Работая в Linux (равно как и во FreeBSD и Windows), нужно не забывать о правах доступа на файлы и папки. Часто это касается директории Web серверов на OS Linux когда необходимо правильно выставить права на директории и файлы с точки зрения безопасности. Выставлять права отдельно на каждый файл или папки не совсем правильное решение когда этих файлов и папок десятки, а то и сотни.

Ниже приведенные примеры помогут удобно и быстро выставить права файлов или папок в кратчайшие сроки.

Изменить владельца для папки и всех файлов лежащих в этой папке

Чтобы сменить владельца, в Unix используется команда chown. Первая группа параметров данной команды — опции. Для того, чтобы изменения коснулись не только данной директории, но и всех поддиректорий, нужно применить команду рекурсивно — с параметром «-R».

Вторая группа параметров — это владелец и группа владельцев, разделённые двоеточием (можно не устанавливать группу — тогда это просто логин владельца) — «user:group» или «user».

Третья же группа параметров — это пути до папок / файлов, к которым нужно применить команду. Например, «/home/user/dir/».

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

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

Sudo говорит о том, что команда будет исполняться с повышенными привилегиями — обычный пользователь не способен изменить ни владельца, ни группу.

Изменить права доступа на файл или папку

Помимо владельца, можно настроить, что же может этот самый владелец и группа, а также все остальные. В Unix идёт разделение возможностей именно таким образом — есть 3 группы прав: владелец, группа владельцев и другие. И права, что можно присвоить каждой группе:

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

Кодируются эти права следующим образом: запуск — 1, изменение — 2, чтение — 4. Складывая их мы получим набор прав, предоставляемый владельцу/группе/другим.

Права на доступ изменяются командой chmod.

Примеры:

  • Изменять файл имеет право только владелец, группа владельце может читать, остальные — ничего не могут: chmod 640 /media/share/file.txt
  • Создавать файлы в папке могут все, но видит их только владелец: chmod 622 /media/share/messages/
  • Есть программа, которая не хочет запускаться — не хватает прав на исполнение. Нужно, чтобы все могли её запустить, но никто, кроме владельца, не мог её редактировать: chmod 711 /media/share/exec

Для рекурсивного изменения прав используется опять же ключ «-R». Например, chmod -R 700 /home/user — доступ к файлам и папкам /home/user останется только у владельца.

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

Изменение прав только на файлы или только на папки

Вышеприведённый пример рекурсивного изменения прав на файлы и папки в /home/user/ не так уж и хорош, как может показаться. Мы сделали, чтобы теперь и обычные файлы могли запускаться. Это может привести к проблемам, если среди фалов были примеры программ, на которые специально были выставлены права без запуска, дабы случайно не исполнить хранимые программы. Если бы мы поставили права 600 — мы бы потеряли доступ к подпапкам и файлам, лежащим в них, ибо без права «на исполнение» (оно же — «право перехода по папке»), мы бы не смогли до них добраться.

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

find /home/user -type f -exec chmod 600 {} \;

Немного магии, но если присмотреться, всё понятно: найти в /home/user все объекты, типа file (f) и выполнить для них chmod 600.

Или же для директорий:

find /home/user -type d -exec chmod 700 {} \;

Крайне полезны могут быть утилиты find, grep для поиска и фильтрации работы команд. chown и chmod также умеют больше, чем здесь описано. Есть ещё chattr — для смены атрибутов папок и файлов (про атрибуты — в другой раз). Все выше перечисленные утилиты имеют хорошую документацию.