Как менять права доступа или владельца для папок в Linux (MacOS)

Начинающие linux администраторы сталкиваются с проблемами вызванными непониманием того как работают права пользователей в nix-системах.

В любой операционной системе, будь то Linux, Windows или FreeBSD, корректная работа приложений, сервисов и безопасность системы в целом напрямую зависит от прав доступа  на файлы и папки.

Основа философии Linux — все объекты операционной системы — это файлы, для предоставления доступа к тем или иным возможностям системы мы просто даем доступ пользователю к нужным файлам или убираем.

При создании файла тот пользователь, от имени которого он был создан становится его владельцем, а группой устанавливается основная группа владельца. Но владельца файла и группу можно менять, для этого используются команды chown и chgrp. В этой статье будет рассмотрена команда chown linux, а также основные примеры её использования.

Сменить владельца для всех папок и файлов. Для этих целей в Unix используется команда chown

Синтаксис chown, как и других подобных команд linux очень прост:

$ chown пользователь опции /путь/к/файлу

В поле пользователь надо указать пользователя, которому мы хотим передать файл. Также можно указать через двоеточие группу, например, пользователь:группа. Тогда изменится не только пользователь, но и группа. Вот основные опции, которые могут вам понадобиться:

  • -c, —changes — подробный вывод всех выполняемых изменений;
  • -f, —silent, —quiet — минимум информации, скрыть сообщения об ошибках;
  • —dereference — изменять права для файла к которому ведет символическая ссылка вместо самой ссылки (поведение по умолчанию);
  • -h, —no-dereference — изменять права символических ссылок и не трогать файлы, к которым они ведут;
  • —from — изменять пользователя только для тех файлов, владельцем которых является указанный пользователь и группа;
  • -R, —recursive — рекурсивная обработка всех подкаталогов;
  • -H — если передана символическая ссылка на директорию — перейти по ней;
  • -L — переходить по всем символическим ссылкам на директории;
  • -P — не переходить по символическим ссылкам на директории (по умолчанию).

Таким образом, команда для смены смены владельца (и группы владельцев) для директорий и всех вложенных папок и фалов будет выглядеть так:

sudo chown -R user:group /home/user/dir/

Изменить права доступа на файл или папку  в Linux и *BDS системах можно командой chmod. Стоит отметить, что в Unix имеются свои особенности в работе данной команды и принципа разделения прав. Так, кроме владельца файла или папки, можно настроить, какие операции может выполнять этот самый владелец и группа, а также все остальные пользователи. В Unix идёт разделение возможностей следующим способом — владелец, группа владельцев и другие. Также присутствует следующее разделение прав:

  • Право на запуск файла (для папок — проход по директории).
  • Право на изменение файла (создание и удаление файлов и папок в директории)
  • Право на чтение файла (для папок — это право на просмотр содержимого директории)

Для удобства использования и запоминания, используется следующая кодировка:

  • запуск — 1
  • изменение — 2
  • чтение — 4

Складывая данные цифровые обозначения мы получим набор прав, предоставляемый владельцу/группе/другим. Разберем данную информацию на примере:

Изменять файл имеет право только владелец, группа владельцев может читать, остальные — ничего не могут, соответственно команда будет такой:

chmod 640 /home/filedir/file.demo

Создавать файлы в папке могут все, но видит их только владелец:

chmod 622 /home/filedir/messages/

Чтобы все могли запускать какую-либо программу, но никто, кроме владельца, не мог её редактировать:

chmod 711 /home/filedir/exec

Изменять права на файлы и директории могут только администраторы и владелец этих папок и файлов.

Для изменение прав только на файлы или только на папки применяется команда find.  Файлы обозначаются параметром -f (file), а директории -d. Пример использования:

Надо перейти в требуемую папку

cd /home/site/www
find . -type f -exec chmod 644 {} +
find . -type d -exec chmod 755 {} +

в случае, если требуются 775 и 664

cd /home/site/www
find . -type f -exec chmod 664 {} +
find . -type d -exec chmod 775 {} +

Данная команда задаст всем директориям внутри текущей, права «755» а файлам «644».

StackUP