Рубрики
users \ group \ пользователи \ группы \ права

Работа с правами доступа файлов и директорий

Немного теории:

Права доступа к файлу:
В каждом файле или каталоге сохраняется следующая информация:
владелец файла;
группа, к которой относится файл;
девять битов доступа (rwxrwxrwx для read/write/execute — для владельца файла, членов группы владельца и всех остальных);
еще несколько дополнительных битов для выполнения специальных функций.

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

Информация о доступе (г, w и х) описывает, кто имеет право читать файл, записывать в него информацию (то есть вносить изменения) и выполнять его. 
Таким образом, владелец файла получает больше прав, чем другие пользователи. 
Обычно эта информация называется битами доступа, так как внутри системы она сохраняется как число с разрядной кодировкой.
Биты доступа, владелец файла, а также соответствие этого файла к той или иной группе можно просмотреть с помощью команды ls -l. 

Права на файлы/папки
      d 421 421 421 
chmod d rwx rwx rwx
   тип  U    G   O
d - тип файла  (d)каталог, (-)файл, (c)идентификатор, (l)символьные ссылки, (b)блочные устройства, (p)именованные каналы, (s) сокеты
r - чтение 4
w - запись 2 
x - выполнение 1 

Права доступа к каталогам:

В принципе девять битов доступа применимы и при работе с каталогами, но в таком случае их значение несколько отличается: 
r-бит позволяет другим пользователям просмотреть содержимое каталога с помощью команды ls. 
x-бит дает возможность перейти в этот каталог с помощью cd. 
Если поставить и х, и w, то в каталоге можно создавать новые файлы.

Бит Setuid:

Бит Setuid иногда сокращенно называется suid. 
С его помощью программа всегда выполняется так, как если бы пользователь запускал ее сам. 
Итак, если владельцем программы является администратор (это случается довольно часто), 
то любой пользователь может работать с этой программой так же, как если бы он был администратором. 
Внутри системы для выполнения программы применяется пользовательский идентификационный номер владельца файла, 
а не UID пользователя, работающего с файлом в данный момент.
Бит Setuid применяется для того, чтобы присваивать обычным пользователям дополнительные права, 
действующие лишь при выполнении данной конкретной программы. 
Правда, это чревато угрозой для безопасности — особенно тогда, когда при выполнении данной программы запускаются другие программы. 
Это означает, что по возможности следует избегать применения бита Setuid. 
Одно из немногих исключений — команда mount. 
Вместо бита Setui d можно использовать команду sudo. 
В таких программах команда ls -l показывает для пользовательского бита доступа букву s (a не x). 
Восьмеричное значение этого бита (для chmod) составляет 4000.

Бит Setgit:

Этот бит работает с программами почти так же, как и Setuid. 
Правда, в данном случае при выполнении программы используется идентификационный номер группы, 
к которой относится файл (а не групповой идентификационный номер пользователя, работающего с программой). 
В таких программах команда ls -l выдает для групповых битов доступа букву s (a не x). 
Восьмеричное значение этого бита составляет 2000.
При работе с каталогами бит Setgid действует так, что новые файлы, создаваемые в том или ином каталоге, 
сразу же относятся к той же группе, что и этот каталог (а не к группе пользователя, создавшего файл, как это бывает обычно).

Бит Sticky:

В каталогах, в которых файлы может изменять любой пользователь, бит Sticky гарантирует, что каждый пользователь может удалять только свои файлы, но не файлы коллег. 
Этот бит ставится, например, для каталога /tmp. Здесь любой пользователь может сохранять временные файлы. 
Однако необходимо избегать таких случаев, в которых любой пользователь мог бы по собственному усмотрению переименовывать или удалять файлы других пользователей.
Команда ls -l в таких программах выдает для всех действительных битов доступа букву t (а не х). 
Восьмеричное значение этого бита составляет 1000. 

Специальные биты в ls:

При выполнении команды ls -l в определенной ситуации могут отображаться специальные биты S и T. 
При этом мы не имеем дело с новыми специальными битами, а получаем указание на то, что биты Setuid, Setgid или Sticky были использованы неправильно.
S — бит Setuid или Setgid поставлен, но не поставлен бит доступа x (при этом Setuid или Setgid не будут работать).
T — бит Sti cky поставлен, но не поставлен бит доступа x для группы others.

chown

chown vasya /file - назначить пользователя vasya владельцем файла file
chown -R vasya directory - рекурсивно обойти директорию directory и назначить пользователя vasya владельцем всех вложенных файлов и директорий
chown vasya:group /file - назначить владельца и группу для файла /file

chgrp

chgrp new_group file - изменить группу-владельца для file на new_group

chmod

chmod ugo+rwx /directory - установить полные права доступа rwx ( Read Write eXecute ) для всех ugo ( User Group Other ) на директорию /directory. 
                           то-же самое можно сделать, используя числовой представление chmod 777 directory

chmod go-rwx /directory - удалить все права на директорию /directory для группы и остальных

chmod o+t /home/public - установить так называемый STIKY-бит на директорию /home/public. 
                         удалить файл в такой директории может только владелец данного файла

chmod o-t /home/public - удалить STIKY-бит с директории /home/public

chmod u+s /bin/binary_file - установить SUID-бит на файл /bin/binary_file. 
                             это позволяет любому пользователю системы, запускать данный файл с правами владельца файла

chmod u-s /bin/binary_file - удалить SUID-бит с файла /bin/binary_file

chmod g+s /home/public - установить SGID-бит на директории /home/public

chmod g-s /home/public - удалить SGID-бит с директории /home/public

Показать права

find / -perm -u+s - поиск всех файлов с установленным SUID битом, начиная с корня файловой системы
ls -lh - листинг текущего каталога с правами доступа