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

Материал из Home wiki
Версия от 16:05, 26 июля 2018; KOleg (обсуждение | вклад) (Новая страница: «Работая в Linux (равно как и во FreeBSD и Windows), нужно не забывать о правах доступа на файлы и пап…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

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

Ниже приведённые рецепты помогут решить 90% проблем, возникающих при настройке прав доступа.


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

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

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

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

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

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

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


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

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

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

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

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


Примеры:

  1. Изменять файл имеет право только владелец, группа владельце может читать, остальные -- ничего не могут: chmod 640 /media/share/file.txt
  2. Создавать файлы в папке могут все, но видит их только владелец: chmod 622 /media/share/messages/
  3. Есть программа, которая не хочет запускаться -- не хватает прав на исполнение. Нужно, чтобы все могли её запустить, но никто, кроме владельца, не мог её редактировать: 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 -- для смены атрибутов папок и файлов (про атрибуты -- в другой раз). Все выше перечисленные утилиты имеют хорошую документацию. Чтобы её увидеть, нужно набрать в консоли man имя_утилиты.

Думаю, этих знаний хватит на первое время всем тем, кто решил настроить права в своём Linux (и Unix).