Linux chmod chown chgrp

Права файлов (chmod)

# chmod --help
Использование: chmod [КЛЮЧ]... РЕЖИМ[,РЕЖИМ]… ФАЙЛ
       или:    chmod [КЛЮЧ]… ВОСЬМ-РЕЖИМ ФАЙЛ…
       или:    chmod [КЛЮЧ]… --reference=ОФАЙЛ ФАЙЛ…
Смена РЕЖИМА доступа к указанным ФАЙЛАМ.
При задании --reference, установить режим
указанных ФАЙЛОВ как у ЭФАЙЛА.

  -c, --changes          как verbose, но выводить только при выполнении
                         изменений
  -f, --silent, --quiet  не выводить большинство сообщений об ошибках
  -v, --verbose          выводить диагностические сообщения по каждому файлу
      --no-preserve-root не обрабатывать «/» особым образом (по умолчанию)
      --preserve-root    отказываться рекурсивно обрабатывать «/»
      --reference=ЭФАЙЛ  использовать режим доступа ЭФАЙЛА
                         вместо значений РЕЖИМ
  -R, --recursive        рекурсивно изменять файлы и каталоги
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

Каждый РЕЖИМ задается в форме «[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+».


Обычно права доступа регламентируют такие действия как чтение, запись (данных в файл или файлов в каталог) и исполнение. В системах UNIX все пользователи разделяются на три группы: "user", Права владельца(непосредственно владелец файла), "group", Групповые права(группа, к которой принадлежит владелец файла) и "other", Публичные права(все остальные).

Команда "chmod" имеет два режима: Абсолютный(цифровой) и Символьный режим. Команда "chmod"

Абсолютный(цифровой). При установке правил в цифровом виде необходимо указывать 3 цифры (например 754):
- 7 - Первая цифра - Права владельца (Первая цифра означает применения прав для пользователя)
- 5 - Вторая цифра - Групповые права (Вторая - для группы)
- 4 - Третья цифра - Публичные права (Третья - права для всех остальных )

7 - rwx - читать, писать, выполнять
6 - rw- - читаь, писать
5 - r-x - читать, выполнять
4 - r-- - читать
3 - -wx - писать, выполнять
2 - -w- - писать
1 - --x - выполнять
0 - --- - ничего нельзя делать

Символьный режим. В текстовом формате установка правил проводится аналогично:
rwx дает право на чтение, запись и выполнение
rw- дает право на чтение и изменение содержимого
r-x дает право на чтение и исполнение
r-- дает право на чтение
-wx дает право на запись и исполнение
--х дает право на исполение
-w- дает право на запись
--- файл не доступен

При Абсолютном (цифровом) режиме используется 3-х цифровой код прав доступа. Символьный режим использует буквенный формат для установки прав доступа. Здесь используются буквы "r", "w" и "x" для read, write и execute соответственно. А также "u", "g", "o" для user, group, other | и a = all (все) соответственно.

d = directory; U = user; G = group; O = other
r = Read; w = Write; x = eXecute; - = Нет права

Например изменение прав на 755 "u", "g", "o" для user и group, other:
u - для пользователей
g - для его группы
o - для остальных
а - для всех (используется по умолчанию)

chmod u=rwx,go=rx filename

изменение прав на 644
chmod u=rw,go=r filename

изменение прав на 600
chmod u=rw,go= filename

изменение прав на 444
chmod a=r filename

Наиболее часто встречающиеся сочетания

- | rw- | --- | ---    chmod 600    только владелец файла может читать/записывать
- | rw- | r-- | r--    chmod 644    владелец файла может читать и записывать, члены группы и остальные - только читать
- | rw- | rw- | rw-    chmod 666    любой пользователь может читать/записывать
- | rwx | --- | ---    chmod 700    только владелец файла, может читать/записывать и запускать на исполнение
- | rwx | --x | --x    chmod 711    владелец файла, может читать/записывать и запускать на исполнение, члены группы и остальные могут запускать на исполнение, но не могут читать и изменять
- | rwx | r-x | r-x    chmod 755    владелец файла, может читать/записывать и запускать на исполнение, члены группы и остальные могут читать и запускать на исполнение, но не могут записывать
- | rwx | rwx | rwx    chmod 777    любой пользователь может читать/записывать и запускать на исполнение
d | rwx | --- | ---    chmod 700    только владелец может входить в этот каталог, читать и записывать в него файлы
d | rwx | r-x | r-x    chmod 755    любой пользователь может входить в этот каталог и читать содержимое каталога, но изменять содержимое может только владелец


А также можно использовать символы:
+ добавить привелегию
- отнять привелегию
= присвоение прав (и отмена не заданных привелегий)

Рекурсивная установка прав на файлы в каталоге

пример:
chmod -hR <права> <каталог>
chmod -hR 777 /home/iuser/files

Установка прав на перечисленные файлы, пример:
chmod права файл1 файл2 ... файлN
chmod 777 file1.txt file2.txt ffile3.txt

Для всех битов (a = all) убрать (-, символ минус) флаги r и w (т.е. запретить чтение и запись)
chmod a-rw /home/user2/folder1/file2.txt

Для группы (g = group) и для других (o = others) добавить (+, символ плюс) флаг чтения (r)
chmod go+r /home/user2/folder1/file9.txt

Информацию о команде chmod можно прочесть в мануале:
man chmod


Так же 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 калькулятор
https://advancedhosters.com/ru/chmod#calc

 

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


# chown --help
Использование: chown [КЛЮЧ]… [ВЛАДЕЛЕЦ][:[ГРУППА]] ФАЙЛ…
       или:    chown [КЛЮЧ]… --reference=ОФАЙЛ ФАЙЛ…
Смена владельца и группы указанного ФАЙЛА на ВЛАДЕЛЬЦА и/или ГРУППУ.
При задании --reference, сменить владельца и группу
указанных ФАЙЛОВ на такие же как у ЭФАЙЛА.

  -c, --changes          как verbose, но выводить только при выполнении
                         изменений
  -f, --silent, --quiet  не выводить большинство сообщений об ошибках
  -v, --verbose          выводить диагностические сообщения по каждому файлу
      --dereference      применять к файлу по символьной ссылке, а не к самой
                         ссылке (по умолчанию)
  -h, --no-dereference   применять к символьной ссылке, а не к самому файлу
                         (имеет смысл только на системах, где
                         можно изменять владельца символьной ссылки)
      --from=ТЕКУЩИЙ_ВЛАДЕЛЕЦ:ТЕКУЩАЯ_ГРУППА
                          Изменяет владельца и/или группу каждого файла
                          только если текущий владелец и/или группа
                          совпадают с указанными.
                          Как группа, так и владелец могут быть опущены;
                          в этом случае совпадение для данного атрибута
                          не обязательно.
      --no-preserve-root не обрабатывать «/» особым образом (по умолчанию)
      --preserve-root    отказываться рекурсивно обрабатывать «/»
      --reference=ЭФАЙЛ  использовать владельца и группу ЭФАЙЛа, вместо
                         указанных значений ВЛАДЕЛЕЦ:ГРУППА
  -R, --recursive        рекурсивно обрабатывать файлы и каталоги

Следующие параметры влияют на способ обхода иерархии каталогов при
заданном параметре -R. Если указано несколько этих параметров, действует
только последний.

  -H                     если аргумент командной строки является символьной
                         ссылкой на каталог, перейти по ней
  -L                     переходить по любой встреченной символьной ссылке на
                         каталог
  -P                     не переходить по символьным ссылкам (по умолчанию)

      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

Владелец не изменяется, если он не задан в аргументе.  Группа также не
изменяется, если не задана; но если после символьного ВЛАДЕЛЬЦА стоит
символ «:», подразумевается изменение группы на основную группу текущего
пользователя.
ВЛАДЕЛЕЦ и ГРУППА могут быть как числовыми, так и символьными.

Примеры:
  chown root /u        Меняет владельца /u на «root».
  chown root:staff /u  То же, но еще меняет группу на «staff».
  chown -hR root /u    Меняет владельца /u и вложенных файлов на «root».


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

# chgrp --help
Использование: chgrp [КЛЮЧ]… ГРУППА ФАЙЛ…
       или:    chgrp [КЛЮЧ]… --reference=ОФАЙЛ ФАЙЛ…
Смена ГРУППЫ у указанных ФАЙЛОВ.
При задании --reference, сменить группу
указанных ФАЙЛОВ как у ЭФАЙЛА.

  -c, --changes          как verbose, но выводить только при выполнении
                         изменений
  -f, --silent, --quiet  не выводить большинство сообщений об ошибках
  -v, --verbose          выводить диагностические сообщения по каждому файлу
      --dereference      применять к файлу по символьной ссылке, а не к самой
                         ссылке (по умолчанию)
  -h, --no-dereference   применять к символьной ссылке, а не к самому файлу
                         (имеет смысл только на системах, где
                         можно изменять владельца символьной ссылки)
      --no-preserve-root не обрабатывать «/» особым образом (по умолчанию)
      --preserve-root    отказываться рекурсивно обрабатывать «/»
      --reference=ЭФАЙЛ  использовать группу ЭФАЙЛа, вместо
                         указанного значения ГРУППЫ
  -R, --recursive        рекурсивно обрабатывать файлы и каталоги

Следующие параметры влияют на способ обхода иерархии каталогов при
заданном параметре -R. Если указано несколько этих параметров, действует
только последний.

  -H                     если аргумент командной строки является символьной
                         ссылкой на каталог, перейти по ней
  -L                     переходить по любой встреченной символьной ссылке на
                         каталог
  -P                     не переходить по символьным ссылкам (по умолчанию)

      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

Примеры:
  chgrp staff /u      Меняет группу /u на staff.
  chgrp -hR staff /u  Меняет группу /u и вложенных файлов на staff.

Изменим группу, к которой принадлежит корневой каталог, применив рекурсивный вариант команды.
sudo chgrp -hR www-data /var/www


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

# chcon --help

Использование: chcon [КЛЮЧ]… КОНТЕКСТ ФАЙЛ…
  или:  chcon [КЛЮЧ]… [-u ПОЛЬЗ-ЛЬ] [-r РОЛЬ] [-l ДИАПАЗОН] [-t ТИП] ФАЙЛ…
  или:  chcon [КЛЮЧ]… --reference=ЭФАЙЛ ФАЙЛ…
Меняет КОНТЕКСТ безопасности SELinux указанных ФАЙЛОВ.
При задании --reference, делает контекст безопасности
указанных ФАЙЛОВ таким же как у ЭФАЙЛА.

Аргументы, обязательные для длинных ключей, обязательны и для коротких.
      --dereference      применять к файлу по символьной ссылке, а не к самой
                         ссылке (по умолчанию)
  -h, --no-dereference   применять к символьной ссылке, а не к самому файлу
  -u, --user=ПОЛЬЗ       задать ПОЛЬЗОВАТЕЛЯ в наз-мом контексте безопасности
  -r, --role=РОЛЬ        задать РОЛЬ в назначаемом контексте безопасности
  -t, --type=ТИП         задать ТИП в назначаемом контексте безопасности
  -l, --range=ДИАПАЗОН   задать ДИАПАЗОН в назначаемом контексте безопасности
      --no-preserve-root не обрабатывать «/» особым образом (по умолчанию)
      --preserve-root    отказываться рекурсивно обрабатывать «/»
      --reference=ЭФАЙЛ  использовать контекст безопасности ЭФАЙЛа, вместо
                         указанного значения КОНТЕКСТА
  -R, --recursive        рекурсивно обрабатывать файлы и каталоги
  -v, --verbose          выводить диагностические сообщения для каждого файла

Следующие параметры влияют на способ обхода иерархии каталогов при
заданном параметре -R. Если указано несколько этих параметров, действует
только последний.

  -H                     если аргумент командной строки является символьной
                         ссылкой на каталог, перейти по ней
  -L                     переходить по любой встреченной символьной ссылке на
                         каталог
  -P                     не переходить по символьным ссылкам (по умолчанию)

      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

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

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

 

Использование, ПРИМЕРы!
Команда chmod -R будет рекурсивно применена ко всем вложенным файлам и каталогам.

Владелец vasya состоящий в группе users, владеет всеми правами на каталог vasya и со всеми вложениями папок и файлов
sudo chown -hR vasya:users /home/vasya

только на папку
sudo chown vasya:users /home/vasya

Задаем права на доступ к чтению ЮЗЕРУ и ГРУППЕ, с рекурсией (-R), т.е. со всеми вложениями папок и файлов
sudo chmod -hR ug+r /home/vasya

только на папку
sudo chmod ug+r /home/vasya

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

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

Для смены владельца файлов/каталогов используем chown:
chown -hR vasya:users /home/vasya

Изменим владельца корневого каталога сервера:
sudo chown -hR www-data:www-data /var/www

Добавить пользователя к группе www-data можно следующей командой:
sudo usermod -a -G www-data username

Удалить пользователя из группы www-data можно командой:
sudo gpasswd -d username www-data

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

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

Чтобы проверить какие права установлены на директорию выполните в командной строке:
ls -Alh /home/vasya

Следующие команды разрешают доступ к папке для всех и делают владельцем nobody:
cd /samba
sudo chmod -R 0755 obmen
sudo chown -R nobody:nogroup obmen/

Комментарии