Рассказываем, как настроить права доступа к файлам на сервере через SSH или с помощью FileZilla.
Система прав доступа в 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).
Настройку прав доступа можно выполнять:
Настраивать права доступа можно командой 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 Категория Действие Права имя_файла
Категории пользователей имеют следующие обозначения:
Действия с правами включают в себя:
Права указываются как 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-клиенте очень просто.
Чтобы изменить для файла или каталога группу или владельца, используется команда chown
.
Синтаксис команды:
chown владелец:группа имя_файла
Например, чтобы установить user1
владельцем файла test.php
, необходимо выполнить:
chown user1 test.php
Если одновременно надо изменить группу на customers
, используем:
chown user1:customers test.php
Чтобы изменить только группу:
chown :customers test.php