В прошлом материале я упоминал права доступа к файлу, указывая 777, но не останавливался на том, что это такое. Давайте рассмотрим подробнее, как в Unix-подобных системах задаётся доступ к файлам.
Скажем сразу, что в отличие от Windows права доступа задаются намного проще и, что главнее, логичнее. Хотя шутки на эту тему тоже есть. Например, Леонид Каганов в «Письме отца Серафимия» писал:
Не зная, что такое «чмод», и опасаясь новой беды, я склонился над его плечом, чтоб видеть, какие кнопки он нажимает. Господи спаси и сохрани, клянусь всем святым, мне не померещилось! Сей волосатый муж набрал мое имя и «chmod 666»...
Владелец файла
Для начала обращу ваше внимание, что если в Windows владельцем файла является либо пользователь, либо операционная система, то в Unix-подобных ОС дело немного сложнее. Каждому файлу назначается не только пользователь владелец, но и группа. Для каждого пользователя группа создаётся по умолчанию, её название идентификатор совпадают с именем и ID пользователя. Номера идентификаторов начинаются с 1000.
Суперпользователь (root) также имеет свой идентификатор, который равен нулю. Идентификаторы от 1 до 999 используются в служебных целях (или получают различные приложения и системные службы).
Если вас заинтересовал этот момент, посмотрите содержимое файлов /etc/passwd и /etc/group в своей системе:
cat /etc/passwd
cat /etc/group
Вывод списка файлов также можно сделать подробным, указав в параметрах команды ключ «-l»:
ls -l
В первом столбике будут отображаться права доступа, затем число, а вот дальше как раз будет владелец и группа.
По умолчанию владельцем для файлов устанавливается пользователь, от имени которого был файл создан. Группа также устанавливается соответствующая этому пользователю.
Обращаю ваше внимание, что владелец и группа могут не совпадать, например, владельцем может быть «user1», а группа − «user2». Это нормальное явление, когда нужно более гибко настроить права доступа.
Как изменить владельца
Изменения владельца и группы можно сделать как из консоли, так и при помощи различных приложений. Например, практически во всех графических окружениях это позволяет диспетчер файлов (в используемом мной Cinnamon это Nemo, в KDE − Dolphin). Также это позволяет файловый менеджер Double Commander и прочие приложения.
Внимание! Для изменения владельца и группы для файла нужны права суперпользователя. В Ubuntu/Mint для этого перед командой надо набрать «sudo».
Для наглядности будем выполнять операцию из консоли, для этого в Cinnamon/GNOME/MATE нужно нажать Ctrl+Alt+T (если вы не меняли эту комбинацию клавиш). Для изменения владельца используется команда chown, которая так и расшифровывается (англ. «change owner»).
По умолчанию консоль запускается в домашней папке, здесь и будем пробовать. Для начала создадим папку для экспериментов:
mkdir testdir
Если мы выведем список файлов при помощи «ls -l», то увидим следующую строку (вместо «rizado» будет ваше имя пользователя):
drwxr-xr-x 2 rizado rizado 4096 мар 23 19:33 testdir
Теперь попробуем изменить владельца и группу, причём поставить их разными (слэш в конце имени папки необязателен, я использую для удобства − сразу видно, что не файл). Первым указывается владелец, затем через двоеточие группа:
sudo chown root:audio testdir/
Если после этого вывести список файлов, то строка будет иметь следующий вид:
drwxr-xr-x 2 root audio 4096 мар 23 19:33 testdir
Аналогично владельца можно изменить обратно (подставьте своё имя пользователя и группы):
sudo chown rizado:rizado testdir/
Для файлов меняется аналогично. Интересный момент, что при смене владельца и группы для папки эти значения для вложенных файлов и папок не меняются. Для обработки всех вложенных объектов нужно указать ключ «-R» (именно заглавную букву):
sudo chown root:root -R testdir/
Больше информации можно получить, набрав в консоли:
chown --help
или
man chown
Права доступа
Права доступа имеют всего 3 опции − чтение, запись и запуск на выполнение, устанавливаемые для владельца, группы и прочих пользователей. Для папки запуск на выполнение означает просмотр содержимого − списка файлов и вложенных папок.
Права можно задавать либо буквами r (read), w (Write) и x (eXecute), либо в двоичной системе (точнее в восьмеричной с использованием цифр от 0 до 7, но основано на двоичной системе).
Праву на чтение (r) соответствует значение 4, записи (w) − 2 и выполнению/просмотру файлов (x) − 1. Комбинируя эти значения, можно получать разные права. Например:
- 6 (4 + 2) − чтение и запись в файл, либо чтение и запись файлов из папки, но для конкретных файлов права доступа определяются отдельно;
- 5 (4 + 1) − чтение и выполнения файла, либо чтение из папки и просмотр её содержимого. Снова же, это не означает автоматического доступа к для вложенным объектам, а определяется их правами;
- 7 (4 + 2 + 1) − полный доступ, чтение, запись файла или файлов в папку и выполнение файла или просмотр содержимого папки.
Первыми задаются права доступа для владельца, затем для группы и в конце для всех прочих.
Обычно для документов и файлов данных устанавливаются права 644 или 664. Это означает, что владелец может читать и изменять файл (включая удаление), члены группы в первом случае только читать, а во втором изменять, а все прочие − только читать.
Для исполняемых файлов и папок обычно задаются права 755 или 775. Значения те же, что и в предыдущем абзаце плюс присутствует право на выполнение или просмотр списка вложенных объектов.
Если задавать права доступа буквами, то указываются нужные права в виде rwx, а то, что нужно пропустить, заменяется дефисом. То есть, 644 соответствует rw-r--r--, а 755 − rwxr-xr-x.
Использовать цифры или буквы − не имеет значения, это дело привычки. Хотя, при использовании букв можно быстро дать или убрать право на запись, указав «+w» или «-w», что проще, чем вычислять в голове числовые значения. Лично я использую оба способа.
Изменение прав
Это действие также можно сделать в упомянутых выше приложениях или из консоли командой «chmod» ( англ. «change mode» − «изменить режим»). Продолжим эксперименты на созданной ранее папке. Для начала попробуем дать право доступа только себе:
chmod 700 testdir/
Для изменения доступа к своим файлам и папкам права суперпользователя не нужны, поэтому набираем команду без sudo. Смотрим результат при помощи «ls -l» и видим следующее:
drwx------ 2 rizado rizado 4096 мар 23 19:33 testdir
Буква «d» перед правами доступа означает «directory», указывая, что это папка, а не файл. Попробуем дать себе полный доступ, группе только чтение и просмотр содержимого, а остальным ничего:
chmod 750 testdir/
Результат
drwxr-x--- 2 rizado rizado 4096 мар 23 19:33 testdir
Обращаю ваше внимание, что устанавливать права на запись для всех небезопасно и это стоит делать только в крайнем случае, когда это действительно необходимо и оправдано.
Для изменения прав доступа вложенных папок и файлов для папки аналогично смене владельца используется ключ «-R». Подробнее можно узнать, вызвав справку по команде:
man chmod
Вместо выводов
Чтобы удалить следы своих экспериментов, наберите в консоли:
rmdir testdir/
Возвращаясь к произведению Леонида Каганова, которое полностью можно прочитать на его сайте, мы можем понять, что же именно сделал сисадмин. Заменив цифры буквенными аналогами, получим rw-rw-rw-, что означает право на чтение и запись для всех, а вовсе не вызов Сатаны.
Учитывая, что речь шла о папке с сайтом, можно предположить, что право на запись должен был иметь как пользователь, как и приложение веб-сервера.
Далеко не у всех систем id юзверей начинаются с 1000.
У того же альта они стартуют с 500.