Общая информация о правах доступа
Система прав доступа в Linux позволяет разграничивать и гибко настраивать доступ пользователей к файлам и каталогам, повышая тем самым безопасность системы.
Полные права ко всему имеет только суперпользователь root (именно поэтому работать от root может быть небезопасно); остальные пользователи по умолчанию имеют доступ только к своему домашнему каталогу, а значит не могут выполнить каких-либо нежелательных изменений в системных файлах.
Права доступа включают в себя право на чтение (r), запись (w) и исполнение (x).
Права назначаются как файлам, так и каталогам, и дают пользователям с этими правами следующие возможности:
Права | Для файлов | Для каталогов |
---|---|---|
r, чтение | Просмотр содержимого | Просмотр содержимого, то есть списка объектов в каталоге (например, командами cat, ls) |
w, запись | Изменение содержимого | Изменение содержимого каталога, то есть можно добавлять и удалять файлы (даже принадлежащие другим пользователям), переименовывать их |
x, исполнение | Запуск файла на исполнение | Вход в каталог (например, командой сd), просмотр атрибутов файлов, находящихся в каталоге |
Существует три категории пользователей для каждого файла:
- Владелец файла - пользователь, который создал файл (или который сейчас указан в качестве владельца). По умолчанию владелец имеет полные права.
- Группа - созданная в системе группа пользователей, которой выдан определенный набор прав к файлу. Может состоять из одного пользователя (владельца) или из нескольких. Если группа состоит из нескольких пользователей, то все они имеют права к файлу, выданные группе.
- Остальные - все прочие пользователи, которые не являются владельцем файла и не входят в группу, назначенную для файла.
Для каждой категории может быть установлен свой набор прав к конкретному файлу.
Права могут обозначаться двумя способами: буквами или цифрами:
Цифровая запись | Буквенная запись | Права |
---|---|---|
0 | --- | Отсутствие прав |
1 | --x | Исполнение |
2 | -w- | Запись |
3 | -wx | Запись и исполнение |
4 | r-- | Чтение |
5 | r-x | Чтение и исполнение |
6 | rw- | Чтение и запись |
7 | rwx | Чтение, запись и исполнение |
Права записываются последовательно: сначала для владельца, затем для группы, затем для остальных пользователей. Например, запись 755 (или rwx r-x r-x) означает, что владельцу даны права на чтение, запись и исполнение (7 / rwx), всем остальным - на чтение и исполнение (5 / r-x).
Примеры наиболее распространенных комбинаций для прав доступа:
Цифры | Буквы | Права |
---|---|---|
600 | rw------ | Владелец может просматривать и изменять содержимое, у остальных нет доступа к объекту |
644 | rw-r--r-- | Владелец может просматривать и изменять содержимое, остальные могут только просматривать |
700 | rwx-- -- | Владелец может просматривать, изменять содержимое, запускать исполнение объекта, у остальных нет доступа к объекту |
755 | rwxr-xr-x | У владельца полный набор прав, остальным доступны просмотр и исполнение |
Предоставляя доступ к каталогам, необходимо учитывать, что для полноценной работы с ними нужны, как минимум, права на чтение и исполнение (5 / r-x). Право на чтение (4 / r) будет означать только возможность просмотра имен файлов, без их атрибутов (размер, владелец и пр.).
Просмотр установленных прав
Просмотреть назначенные права для файлов в текущем каталоге можно командой ls -l.
Права для файлов в выводе будут отмечены флагом -, для директории - флагом d в начале строки, например:
username@server:~/new_directory$ ls -l total 4 drwx------ 2 username customers 4096 Mar 10 14:39 dir1 -rw-r--r-- 1 username customers 128 Mar 10 14:39 test.php
Параметры в выводе:
Права Владелец Группа Размер файла Последнее изменение Имя файла rw-r--r-- username customers 0 Mar 10 14:39 test.php
Если нужно просмотреть права только на конкретный файл или каталог в текущей директории, необходимо указать его имя. Например:
ls -l test.php ls -l dir5
Чтобы просмотреть права на файлы во всех вложенных подкаталогах в текущей директории, можно использовать флаг -R:
ls -Rl
Либо можно указать имя директории, права на файлы и подкаталоги в которой нужно просмотреть:
ls -Rl dir1
Настройка прав доступа
Изменять права доступа для файла может только его владелец или администратор системы (т.е. root или пользователь с привилегиями sudo).
Настройку прав доступа можно выполнять:
- при SSH-подключении;
- через FTP-клиент.
По SSH
Настраивать права доступа можно командой chmod. Существует два способа ее использования.
Способ 1, наиболее простой. При каждом изменении прав указывается весь набор прав для всех категорий пользователей. Права указываются в числовом формате.
Синтаксис команды:
chmod xxx имя_файла
Например, следующей командой можно установить для файла test.php права 755, т.е. полные права для владельца, права на чтение и исполнение для всех остальных.
chmod 755 test.php
Чтобы установить права 644 файлу test.php, необходимо выполнить:
chmod 644 test.php
Установить права 755 на каталог dir:
chmod 755 dir
В отдельных случаях может быть полезна опция -R, она позволяет назначать права рекурсивно. Будьте внимательны при ее использовании, так как она изменит права доступа для всех файлов во всех подкаталогах в текущем каталоге.
Указать права 755 всем объектам в текущем каталоге (включая подкаталоги):
chmod -R 755 *
Способ 2 позволяет указывать только конкретное изменение в правах для конкретной категории пользователей. Используется символьная запись прав.
Синтаксис команды:
chmod КатегорияДействиеПрава имя_файла
Категории пользователей имеют следующие обозначения:
- u - владелец (от user)
- g - группа (от group)
- o - остальные (от other)
- a - все категории (от all)
Действия с правами включают в себя:
- + — добавить указанные права
- - — удалить указанные права
- = — заменить права на указанные
Права указываются как r, w и x. При указании комбинаций (например, чтение и исполнение) здесь не нужно использовать дефис, т.е. указываем rx, а не r-x.
Например, следующей командой можно добавить права на чтение и исполнение для группы. Другие ранее установленные права никак не изменяются.
chmod g+rx test.php
Удалить для группы права на запись в файл test.php:
chmod g-w test.php
Удалить права на чтение и запись для остальных пользователей:
chmod o-rw test.php
Дать группе и остальным пользователям доступ к каталогу dir1 (права на чтение и исполнение):
chmod go+rx dir1
Дать группе и остальным пользователям право на чтение всех файлов и каталогов в директории new_directory
(используется ключ -R):
chmod -R go+r new_directory
По FTP/SFTP (FileZilla)
Задавать и изменять права в FTP-клиенте очень просто.
- Подключитесь к серверу с помощью FileZilla.
- Найдите нужный файл или каталог.
- Кликните по нему правой кнопкой мыши и выберите "Права доступа к файлу".
- Задайте нужные права. При редактировании прав на каталог также есть возможность применить настройки к вложенным каталогам.
- Сохраните изменения.
Изменение владельца или группы файла
Чтобы изменить для файла или каталога группу или владельца, используется команда chown.
Синтаксис команды:
chown владелец:группа имя_файла
Например, чтобы установить user1 владельцем файла test.php, необходимо выполнить:
chown user1 test.php
Если одновременно надо изменить группу на customers, используем:
chown user1:customers test.php
Чтобы изменить только группу:
chown :customers test.php