chown chmod

Краткое описание четырех популярных программ предназначенных для управления правами на папки и файлы. Все программы входят в пакет  gnu coreutils

  • chmod - Изменяет права доступа к файлу
  • chown - Изменяет владельца файла
  • chgrp - Изменяет группу владельца файла
  • chcon - Изменяет контекст безопасности файла (SELinux)

chmod

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

Синтаксис:
chmod [ОПЦИИ] ПРАВА1[,ПРАВА2...] file1 [file2 …]
или при использовании символьного вида:
chmod [СУБЪЕКТ][ОПЕРАТОР][ПРАВА] file ...


Опции:

  • -c, --changes - Подробно описывать действия для каждого файла, чьи права действительно изменяются.
  • -f, --silent, --quiet - Не выдавать сообщения об ошибке для файлов, чьи права не могут быть изменены.
  • -v, --verbose - Подробно описывать действие или отсутствие действия для каждого файла.
  • -R, --recursive - Рекурсивное изменение прав доступа для каталогов и их содержимого (игнорирует символические ссылки).
  • --help - Выдать подсказку на стандартный вывод и успешно завершиться.
  • --version - Выдать информацию о версии на стандартный вывод и успешно завершиться.

Способ записи назначаемых прав:
Права записываются одной строкой сразу для трёх типов пользователей:

  • u - владельца файла;
  • g - других пользователей, входящих в группу владельца;
  • o - всех прочих пользователей;

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


Варианты записи прав с расшифровкой:

binhexcharправа на файлправа на директорию
000 0 --- нет нет
001 1 --x выполнение чтение файлов и их свойств
010 2 -w- запись нет
011 3 -wx запись и выполнение всё, кроме чтения списка файлов
100 4 r-- чтение чтение имён файлов
101 5 r-x чтение и выполнение доступ на чтение
110 6 rw- чтение и запись чтение имён файлов
111 7 rwx все права все права

Использование команды в числовом виде:

   Это самый простой способ, вы просто указываете необходимые вам права и имя файла или каталога для которого эти права нужно установить. Например:chmod 640 filenameустановит для файла filename разрешения владельцу на чтение и запись, группе в которую входит владелец разрешения на чтения и всем прочим отказ в доступе.


   Так же chmod позволяет изменять биты SGID, SUID и T. Установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно. Маска для SUID выглядит как - 4000, для SGID как -2000 а для T - 1000. Эти атрибуты имеют смысл только при установленном соответствующем бите разрешающим ваполнение и обозначаются при символьной записи буквой «s»: srwx.
   Бит SUID можно задать например командой: chmod 4555 filename - в этом случае запускаться файл на исполнение будет с правами владельца, но права на исполнение имеют все пользователи. Установка SGID для директории приведёт к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сама директория, а не к основной группе владельца, как это происходит по умолчанию. SUID для директории не имеет смысла.
   t-бит используется только с директориями. Когда t-бит для директории не установлен, файл в данной директории может удалить любой пользователь, имеющий доступ на запись к данному файлу. При установленном t-бите на директорию, удалить файл может только владелец этого файла.


   Право на запись (w) даёт пользователю возможность записывать или изменять файл, а право на запись для каталога - возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).


Использование команды в символьном виде:

Напомню синтаксис:
chmod [субъект][оператор][права] file ...
Субъект определяет пользователей, которым будут меняться права.

  • U - Владелец файла
  • g - Пользователи, входящие в группу владельца файла
  • o - Остальные пользователи
  • a - Все пользователи (то же что ugo)

Оператор определяет операцию, которую будет выполнять chmod:

  • + - добавить определенные права
  • - - удалить определенные права
  • = - установить определенные права

Права определяет какие именно права будут установлены, добавлены или удалены:

  • r - чтение файла или содержимого каталога
  • w - запись в файл или в каталог
  • x - выполнение файла или чтение содержимого каталога
  • X - выполнение, если файл является каталогом или уже имеет право на выполнение для какого-нибудь пользователя
  • S - установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно
  • t - устанавливая t-бит на директорию, мы меняем это правило таким образом, что удалить файл может только владелец этого файла

Примеры:
Установить права на чтение, выполнение и запись для владельца файла и на чтение для всех остальных:
chmod 744 filename

То же но в символьном варианте:
chmod u=rwx,g=r,o=r filename

Установить права на чтение каталога catalog и всего его содержимого для всех пользователей:
chmod -R a+r ./catalog

Удалить атрибуты SUID и SGID файла filename:
chmod u-s,g-s ./filename

chown


chown — Программа изменяющая владельца и/или группу для указанных файлов. В качестве имени владельца/группы берётся первый аргумент, не являющийся опцией. Если задано только имя пользователя (или числовой идентификатор пользователя), то данный пользователь становится владельцем каждого из указанных файлов, а группа этих файлов не изменяется. Если за именем пользователя через двоеточие следует имя группы (или числовой идентификатор группы), без пробелов между ними, то изменяется также и группа файла. Для работы программе требуются права суперпользователя (root).


Синтаксис:
chown [ПАРАМЕТРЫ] [--dereference] [--reference=rfile] пользователь[:группа] файл…


Параметры:

  • -c, --changes — Выводит подробное описание действий для каждого файла, владелец которого действительно изменяется.
  • -f, --silent, --quiet - Не выдавать сообщения об ошибках для файлов, чей владелец не может быть изменён.
  • -h, --no-dereference — Изменять владельца символьной ссылки, а не с файла, на который она указывает. Данная опция доступна только если в вашей системе имеется системный вызов lchown.
  • -R, --recursive - Рекурсивно изменять владельца каталогов и их содержимого.
  • -v, --verbose — Выводить подробное описание действия (или отсутствия действия) для каждого файла.
  • --dereference - Изменить владельца файла, на который указывает символьная ссылка, вместо самой символьной ссылки.
  • --reference=rfile - Изменить владельца файла на того, который является владельцем файла.
  • --help - Выдать подсказку на стандартный вывод и успешно завершиться.
  • --version - Выдать информацию о версии на стандартный вывод и успешно завершиться.
  • -- - Служит для обозначения конца списка опций.

Примеры:
Изменить владельца filename на user:
chown user /var/run/filename

Изменить владельца для myfile на myuser и идентификатор группы на mygroup:
chown myuser:mygroup myfile

Изменить идентификатор группы для /home на 111:
chown :111 /home

chgrp


chgrp — Программа предназначенная для изменения группы (GID) файлов. В отличие от команды chown, chgrp позволяет рядовым пользователям изменять группы, но только те, членами которых они являются. Группа может быть представлена как именем группы, так и её числовым идентификатором (GID).
Расширение GNU (начиная с GNU fileutils−4.0) позволяет использовать --reference=rfile в качестве определения группы: та же группа, что и у rfile.

Синтаксис:
chgrp [ОПЦИИ] группа файл…

Параметры:

  • -R - Рекурсивное изменение группы для каталогов и их содержимого. Возникающие ошибки не прекращают работы команды.
  • -h - Для каждого аргумента, который является символьной ссылкой, изменить группу самой этой ссылки, а не объекта, на который она указывает. Если система не поддерживает группы для символьных ссылок, то ничего не делать.
  • -H (полулогический метод) - (Используется совместно с -R.) Для каждого аргумента, который является символьной ссылкой на каталог, изменить группу самого каталога и всех файлов в иерархии этого каталога.
  • -L (логический метод) - (Используется совместно с -R.) Для каждого файла, указанного ли в командной строке, или встреченного при обходе дерева каталогов, если этот файл является символьной ссылкой на каталог, изменить группу самого этого каталога и всех файлов в иерархии этого каталога.
  • -P (физический метод) - (Используется совместно с -R.) Для каждого файла, указанного ли в командной строке, или встреченного при обходе дерева каталогов, если этот файл является символьной ссылкой, изменить группу самой этой ссылки, а не объекта, на который она указывает. Если система не поддерживает группы для символьных ссылок, то ничего не делать. Это поведение по умолчанию.
  • -c, --changes - Подробно описывать действия для каждого файла, чья группа действительно изменяется.
  • -f, --silent, --quiet - Не выдавать сообщения об ошибке для файлов, чья группа не может быть изменена.
  • -h, --no-dereference - Работать с самими символьными ссылками, а не с файлами, на которые они указывают. Данная опция доступна только если в вашей системе имеется системный вызов lchown.
  • -v, --verbose - Подробно описывать действие или отсутствие действия для каждого файла.
  • --help - Выдать подсказку на стандартный вывод и успешно завершиться.
  • --version - Выдать информацию о версии на стандартный вывод и успешно завершиться.
  • -- - Завершает список опций.

Пример:
Изменить группы filename на guser:
chgrp ugser ./filename

chcon

chcon — вносит изменения в контекст SELinux для файлов. Изменения, вносимые с помощью команды chcon не сохраняются после перемаркирования файловой системы или выполнения команды /sbin/restorecon. (Так что для настройки контекста лучше использовать другие программы)


Синтаксис:
chcon [ПАРАМЕТРЫ]... CONTEXT FILE...
chcon [ПАРАМЕТРЫ]... --reference=RFILE FILE...


Параметры:

  • -c, --changes - Действует как описанный ниже параметр -v, выводя подробное описание для обработанного файла, но лишь в случае внесения изменений.
  • -h, --no-dereference - Действует на символьные ссылки (меняет контекст ссылки, доступно только если в вашей сборке присутствует системный вызов lchown который меняет владельца символьной ссылки)
  • -f, --silent, --quiet - скрывает большую часть сообщений об ошибках.
  • -l, --range - устанавливает указанный диапазон для целевого контекста безопасности.
  • --reference=RFILE - использует контекст RFILE вместо существующего значения.
  • -R, --recursive – требует рекурсивного изменения типа для каталога и всего его содержимого
  • -r, --role - Меняет роль в контексте безопасности для объекта.
  • -t, --type - Изменение типа файла. С этим параметром необходимо указать тип который должен быть установлен, например: httpd_sys_content_t, и имя файла или каталога.
  • -u, --user - Добавить пользователя в целевой контекст безопасности для файла
  • -v, --verbose - Выводит подробное описание для каждого обработанного файла
  • --help - Показать справку и выйти
  • --version - Показать информацию о версии программы и выйти

Примеры:
Установить для файла filename тип httpd_sys:
chcon -t httpd_sys_content_t filename

Установить тип httpd_sys для каталога catalogname и всего его содержимого:
chcon -R -t httpd_sys_content_t catalogname

Комментарии  

#1 Дмитрий 18.10.2016 02:41
Отличная статья. Очень выручила. Спасибо автору за подробное описание темы.
Цитировать
#2 Евген 22.03.2017 12:56
Мне ещё вот эта статья помогла - https://tavportal.ru/archives/535
Цитировать
#3 Egor 25.09.2017 12:25
Good material!
Цитировать