сhmod - установка, изменение прав доступа для файлов и директорий

chmod [-fhv] [-R [-H | -L | -P]] права доступа файл ...

Утилита chmod изменяет биты прав доступа для файлов и директорий, перечисленных в командной строке, в опции права доступа.

Поддерживаются следующие опции:

-f
Не отображать диагностическую информацию, в случае невозможности изменения прав доступа файла, не менять код завершения с целью просигнализировать о неудачном завершении операции.
-H
Если указана опция -R, следовать по символическим ссылкам в командной строке. ( По-умолчанию символические ссылки, встреченные при обходе дерева каталогов не обходятся )
-h
Если файл является символической ссылкой, менять права доступа на саму ссылку, а не на файл, на который она указывает.
-L
Если присутствует опция -R следовать по символическим ссылкам.
-P
Если опция -R присутствует, не следовать по символическим ссылкам ( поведение по-умолчанию ).
-R
Рекурсивно изменить права доступа на все дерево файлов и директорий, находящихся ниже указанного в опции файл.
-v
Вывод отладочной информации. Показывает имена файлов на которые были изменены права доступа. Если опция указано больше одного раза, например -vv, chown покажет имя файла а также старые и новые права доступа в цифровом и символическом представлении.

Опции -H, -L и -P будут проигнорированы, если не указана опция -R. Кроме того, данные опции переопределяют друг друга, использована будет та, которая указана последней.

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

При успешном выполнении операции chmod возвращает 0 и >0 в противном случае.

Права доступа:

Права доступа могут быть представлены абсолютными или символическими значениями. Абсолютное значение является восьмеричным номером, получаемым из суммы следующих значений:

4000 ( setuid бит ).
Исполняемый файл с установленным битом setuid, будет запущен с еффективным userid владельца файла.
При установке setuid бита на директорию, все файлы и поддиректории создаваемые в данной директории будут иметь владельца данной директории, а не владельца процесса, создавшего файл или директорию. При условии что текущая файловая система поддерживает такой функционал. Смотрите chmod(2) и опцию suiddir команды mount(8).
2000 ( setgid бит).
Исполняемый файл будет запущен с groupid владельца файла.
1000 ( sticky бит ).
Смотрите chmod(2) и sticky(8)
0400
Разрешить чтение владельцу.
0200
Разрешает запись владельцу.
0100
Для файлов, разрешает запуск владельцу файла, для директорий, разрешает поиск владельцу директории.
0040
Разрешить чтение членам группы.
0020
Разрешить запись членам группы.
0010
Для файлов, разрешает запуск членам группы, для директорий, разрешает поиск членам группы.
0004
Разрешает чтение остальным.
0002
Разрешает запись для остальных.
0001
Для файлов, разрешает запуск остальным, для директории разрешает поиск.

Например, обсолютное значение прав доступа, разрешающих: чтение, запись и выполнение владельцу, чтение и выполнение для членов группы, чтение и выполнение для остальных и без установленных битов SUID и SGID, будутиметь такое значение: 755 (400+200+100+040+010+004+001).

Символическое выражение прав доступа имеет следующую грамматику:

	   mode 	::= clause [, clause ...]
	   clause	::= [who ...] [action ...] action
	   action	::= op [perm ...]
	   who		::= a | u | g | o
	   op		::= + | - | =
	   perm 	::= r | s | t | w | x | X | u | g | o

Символы для who, "u", "g" и "o", соответствуют значениям "пользователь", "группа" и "остальные". Символ "а" является эквивалентом "ugo".

Символы perm соответствуют следующим значениям:

	   r	   Бит прав на чтение.
	   s	   Бит SUID и SGID на выполнение.
	   t	   Sticky бит.
	   w	   Бит прав на чтение.
	   x	   The execute/search bits.
	   X	   Бит выполнения/поиска, если файл является директорией или если данные быты установлены в оригинальных правах доступа. Операции с символом X имеют значение только совместно с op равным "+" и будет проигнорирован в любом другом случае.
	   u	   Бит прав для пользователя.
	   g	   Бит прав для членов группы.
	   o	   Бит прав для остальных.

Символы op ( операции )

+ Если значение perm не установлено, ничего не делать. Если не установлено значение для who, будут установлены значения perm для которых не установлены биты в маске создания файлов ( см. umask(2) ).

- Поведение аналогичное "+" только наоборот.

= Если опция who и опция perm не указаны, будут очищены биты прав доступа для пользователя, группы и остальных. Если в perm установлены какие-то биты, они будут присвоены согласно umask. Проще показать)

freebsd88 /# chmod -vv = ./testfile
/testfile: 0100777 [-rwxrwxrwx ] -> 0100000 [---------- ] # Все биты били сброшены
freebsd88 /# chmod -vv =r ./testfile
/testfile: 0100000 [---------- ] -> 0100444 [-r--r--r-- ] # Установить биты прав на чтение для всех.
freebsd88 /# chmod -vv =rwx ./testfile
/testfile: 0100200 [--w------- ] -> 0100755 [-rwxr-xr-x ] # В этом случае права доступа устанавливаются согласно umask.
freebsd88 /# chmod -vv u= ./testfile
/testfile: 0100755 [-rwxr-xr-x ] -> 0100055 [----r-xr-x ] # Сбрасываем все права для пользователя.
freebsd88 /# chmod -vv g=rwx ./testfile
/testfile: 0100000 [---------- ] -> 0100070 [----rwx--- ] # Устанавливаем все права для группы.

Классические примеры:

 
      644	   Права доступа на чтение для всех и на запись только для владельца.

     go-w	   Запретить права на запись для группы и остальных.

     =rw,+X	   Установить права на чтение и запись в значения по умолчанию, но сохранить права на исполнение в текущей установке.

     +X 	   Установить права доступа поиск/выполнение для файла или дректории для всех.

     755           Сделать файл читаемым/исполняемым для всех и дать права на запись только для владельца.
     u=rwx,go=rx
     u=rwx,go=u-w  

     go=	   Сбросить все биты прав доступа для группы и остальных.

     g=u-w	   Установить биты прав для группы какие установлены для владельца, но снять бит на запись.

СМОТРИТЕ ТАКЖЕ
chflags(1), install(1), setfacl(1), chmod(2), stat(2), umask(2), fts(3), setmode(3), symlink(7), chown(8), mount(8), sticky(8)
администрирование серверов