Каковы различные способы установки прав доступа к файлам и т. Д. В GNU / Linux

19

В Unix я давно узнал о chmod: традиционном способе установки разрешений, о Unix (и разрешении программам получать привилегии, используя setuid, setgid).

Недавно я обнаружил несколько новых команд в GNU / Linux:

  • setfaclрасширяет традиционные ugo:rwxбиты и tнемного chmod.
  • setcapдает больший контроль зерна, чем ug:sбиты chmod.
  • chattr Позволяет некоторые другие элементы управления (немного микс) файла.

Есть ли другие?

Ctrl-Alt-Делор
источник
см. также unix.stackexchange.com/q/183994/4778 для получения более подробной информации оchmod
ctrl-alt-delor
см. также unix.stackexchange.com/q/246606/4778 для расширенных ACL (richACL).
Ctrl-Alt-Delor

Ответы:

28

chmod: изменить биты режима файла

Использование (восьмеричный режим):

    chmod <octal-mode> files...

Использование (символьный режим):

    chmod <references><operator><modes> files..

referencesявляется комбинацией букв ugoa, которые определяют, какой доступ пользователя filesбудет изменен:

  • u пользователь, которому он принадлежит
  • gдругие пользователи в fileгруппе
  • o другие пользователи, не входящие в группу файла
  • a все пользователи

    Если он опущен, он используется по умолчанию для всех пользователей, но umaskизменяются только разрешения, разрешенные пользователем .

    operatorэто один из персонажей +-=:

    • + добавить указанные биты режима файла к существующим битам режима файла каждого file
    • - удаляет указанные биты режима файла в существующие биты режима файла каждого file
    • =добавляет указанные биты и удаляет неуказанные биты, за исключением setuidи setgidбит для каталогов, если явно не указано.

    modeсостоит из комбинации букв rwxXst, которые указывают, какой бит разрешения должен быть изменен:

    • r читать
    • w записывать
    • x выполнить (или поиск по каталогам)
    • X выполнять / искать, только если файл является каталогом или уже имеет бит выполнения, установленный для какого-либо пользователя
    • ssetuid или setgid (в зависимости от указанного references)
    • t ограниченный флаг удаления или закрепленный бит

    В качестве альтернативы, modeбуква может состоять из одной буквы ugo, и в этом случае режим соответствует разрешениям, предоставленным в настоящее время владельцу ( u), члену fileгруппы ( g) или разрешениям пользователей ни в одной из предыдущих категорий ( o).

Различные биты chmodобъяснили:

  • Контроль доступа (см. Также setfacl)
    • rwx - права чтения (r), записи (w) и выполнения / пересечения (x).
      • Read (r) влияет, если файл может быть прочитан или каталог может быть указан.
      • Запись (w) влияет, если файл может быть записан или каталог может быть отредактирован (файлы добавлены, удалены, переименованы).
      • Выполнение (x) влияет на возможность запуска файла, использования для сценариев (см. #!) И других исполняемых файлов.
      • Cross (x) влияет на возможность обхода каталога.
    • sи t- липкий бит (t) и setgid (s) для каталогов
      • Заклепка влияет только на каталоги. Предотвратит удаление файлов в каталоге всем, кроме владельца файла и пользователя root.
      • бит setgid для каталогов приведет к тому, что в новых файлах и каталогах будет установлена ​​группа для той же группы, а в новых каталогах будет установлен бит setgid (см. также значения по умолчанию в setfacl).
    • s - setuid, setgid, для исполняемых файлов.
      • Это может плохо повлиять на безопасность, если вы не знаете, что делаете.
      • Когда исполняемый файл запущен, и если установлен один из этих битов, то действующий пользователь / группа исполняемого файла станет таковым файла. Таким образом, программа запускается от имени этого пользователя. Посмотрите setcapна более современный способ сделать это.

chown chgrp:


chattr: изменить атрибуты файла

Использование:

    chattr <operator><attribute> files...

operatorявляется одним из символов +-=: * +добавляет выбранные атрибуты к существующим attributesиз files * -удаляет выбранные attributes * =перезаписывает текущий набор атрибутов, которые файлы имеют с указанными attributes.

attributeявляется комбинацией букв acdeijstuADST, которые соответствуют атрибутам:

  • a добавить только
  • c сжатый
  • d нет свалки
  • e формат экстента
  • i неизменный
  • j журналирование данных
  • s безопасное удаление
  • t без слияния хвостов
  • u неудаляемости
  • Aнет atimeобновлений
  • D синхронные обновления каталогов
  • S синхронные обновления
  • T вершина иерархии каталогов

setfattr: изменить расширенные атрибуты файла

Использование (установить атрибут):

    setfattr -n <name> -v <value> files...

Использование (удалить):

    setfattr -x <name> files...

name Имя расширенного атрибута для установки или удаления

value это новое значение расширенного атрибута


setfacl: изменить списки контроля доступа к файлам

Использование:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option должен включать одно из следующего:

  • --set установить ACL для файла или каталога, заменив предыдущий ACL
  • -m| --modifyизменить ACL файла или каталога
  • -x| --remove удалить записи ACL из файла или каталога

    targetэто одна из букв ugmo(или более длинная форма, показанная ниже):

  • u, usersразрешение именованного пользователя, идентифицированного пользователем param, по умолчанию указывается владелец файла, uidесли он опущен

  • g, groupразрешение именованной группы, идентифицируемой по paramумолчанию, группе-владельцу, uidесли опущено
  • m, maskЭффективные права маски
  • o, otherразрешения других

    permsэто комбинация букв rwxX, которые соответствуют разрешениям:

  • r читать

  • w записывать
  • x выполнять
  • X выполнять только если файл является каталогом или уже имеет разрешение на выполнение для какого-либо пользователя

    В качестве альтернативы, permsможет быть восьмеричная цифра ( 0- 7), обозначающая набор разрешений.


setcap: изменить возможности файла

Использование:

    setcap <capability-clause> file 

A capability-clauseсостоит из разделенного запятыми списка имен возможностей, за которым следует список пар флаг-оператор.

Доступные операторы =, +и -. Доступные флаги e, iи pкоторые соответствуют Действуют , наследуемые и Разрешенные наборами возможностей.

=Оператор поднимет указанные наборы возможностей и сбросить другие. Если вместе с =оператором не указаны флаги, все наборы возможностей будут сброшены. +И -операторы будут повышать или понижать один или более указанных наборы возможностей соответственно.


chcon: изменить контекст безопасности файла SELinux

Использование:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

пользователь - это пользователь SELinux, например user_u, system_uили root.

роль - это роль SELinux (всегда object_rдля файлов)

тип - это тип субъекта SELinux


chsmack: изменить SMACK расширенные атрибуты

Использование:

    chsmack -a <value> file

valueметка SMACK, которая будет установлена ​​для SMACK64расширенного атрибута файла


setrichacl : изменить расширенный список контроля доступа.

richacl - это функция, которая добавляет более продвинутые списки ACL.

В настоящее время ведутся работы, поэтому я не могу вам о них много рассказать. Я не использовал их.

См. Также этот вопрос. Существуют ли более продвинутые списки ACL для файловых систем, помимо традиционных rwx и POSIX ACL? и справочная страница

Томас Найман
источник
5
+1 Если бы вы добавили примеры использования каждого cmd, этот ответ был бы чрезвычайно полезен, поскольку в качестве канонического ответа мы можем ссылаться в будущем!
SLM
1
@slm Спасибо за предложение. Я добавил краткое объяснение использования для каждой команды.
Томас Найман
Предупреждение для любого, кто желает продвинуться дальше, чем показано здесь. Я использовал возможности, как указано здесь. Однако попытка наследовать их (с пользой) через fork и exec кажется невозможной. Я думаю, что есть ошибка, см. Unix.stackexchange.com/questions/196483/…
ctrl-alt-delor
Ошибка, о которой я упоминал в предыдущем комментарии, была ошибкой проектирования и была исправлена ​​в ядре 4.3 с добавлением внешних возможностей, см. Man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor
1
Я хотел бы видеть примеры на все это, это стало бы каноническим ответом!
17
1

с высокого уровня:

  • основные разрешения файловой системы, поддерживаемые всеми linux и всеми файловыми системами, которые -rwxrwxrwxобрабатываются chmodвместе с идентификаторами владельца и группы, привязанными к каждому файлу или папке в файловой системе, обрабатываемой chownи chgrp; все в основном знают эту часть.
  • Расширенные атрибуты файла, которые сокращенно или известны как xattr . Они представляют собой функции файловой системы, которые позволяют пользователям связывать компьютерные файлы с метаданными, не интерпретируемыми файловой системой, тогда как обычные атрибуты имеют цель, строго определенную файловой системой; Атрибутами являются пары имя: значение, постоянно связанные с файлами и каталогами, аналогично строкам среды, связанным с процессом. Существуют специальные команды linux, связанные с простой установкой этих метаданных для различных файлов / папок.
  • SELINUX известен как безопасный Linux . Вы можете найти в Интернете историю по нему. Также знайте, что есть альтернативы SELINUX, такие как AppArmor, и, возможно, есть и другие. На данный момент это модули ядра, которые предоставляют функциональные возможности и механизмы для выполнения MAC (обязательного контроля доступа) с использованием xattr; selinux хранит метки защиты файлов в xattrs . И есть определенные команды, связанные с selinux.

другие ключевые моменты:

  • эпоха и версия gnu / linux имеют значение для xattr и selinux для того, что доступно и что работает.
  • сообщается, что не все файловые системы поддерживают xattr; Лучше всего заниматься индивидуальными исследованиями на основе дистрибутива и используемой версии Linux (rhel / suse / debian, irix, solaris, aix, unix 1960-х)
  • на самом деле это просто присущие базовые права доступа к файлам / папкам с uid's / gid's plus xattr, которые делают все возможное; SELinux использует xattr для хранения меток безопасности файлов / папок ... с selinux все низкоуровневое занятие несколько сделано / определено в xattr для использования вами. Так что если ваша древняя файловая система не поддерживает xattr, вы не будете использовать selinux.
  • вы можете включить или отключить selinux (или apparmor, или любой другой модуль ядра)
  • в зависимости от вашей версии linux может включать или отключать xattr для данной смонтированной файловой системы; Я помню в SLES 11 опцию монтирования fstab, user_xattrи я мог выбрать, чтобы xattr не был доступен в корневой файловой системе во время установки; теперь я думаю, что в RHEL / CentOS 7 xattr присутствует по умолчанию, и вы не можете его не иметь.
  • при выполнении операции lsif, если вы видите, -rwxrwxrwx+что +в этом объекте присутствует расширенный атрибут файла .
  • Список контроля доступа (ACL): список разрешений, прикрепленных к объекту. ACL указывает, каким пользователям или системным процессам предоставляется доступ к объектам, а также какие операции разрешены для данных объектов.
  • из centos wiki selinux: selinux - механизм безопасности MAC, реализованный в ядре; без включения SELinux для управления доступом пользователей к файлам используются только традиционные методы контроля доступа (DAC), такие как права доступа к файлам или списки контроля доступа (ACL); Как пользователям, так и программам разрешается предоставлять незащищенные права доступа к файлам другим пользователям или, наоборот, получать доступ к частям системы, которые не должны быть необходимы для нормальной работы; В сущности, в рамках традиционной модели DAC существует два уровня привилегий: root и пользователь, и нет простого способа применения модели с наименьшими привилегиями. Многие процессы, запускаемые пользователем root, впоследствии теряют свои права на запуск в качестве пользователя с ограниченными правами.
  • Стоит прочитать, чтобы рассмотреть использование xattr и ACL в перспективе, потому что linux [kernel] обрабатывает все как файл (блочные устройства или сетевые порты), вы можете пометить почти все с помощью xattr и применить какой-то контроль доступа через selinux, это не только файлы / папки. https://wiki.centos.org/HowTos/SELinux
  • xattr может вызвать проблемы с перемещением данных между системами и файловыми системами и NFS, где [более новые] системы имеют более полную поддержку xattr по сравнению со старыми системами, которые могут не распознавать все эти расширенные атрибуты [если они вообще есть). Будьте внимательны при использовании tarс xattr, если он остается в этой системе без проблем, но если он уходит в другое место, это может быть проблематично, если xattr важен (например, samba и копирование между win10 ntfs и linux ext3 / 4, btrfs, xfs; или обратно). и далее между сетевыми устройствами хранения данных)
  • если нет selinux или другого механизма, обеспечивающего ACL с помощью того, что определено в xattrs, то xattrs теоретически ничего не может значить и может быть отброшен или удален, потому что в этот момент это просто дополнительный багаж.
  • будьте осторожны, отключая selinux теперь в rhel / centos 7, потому что, если метки файловой системы через xattr будут потеряны, это вызовет проблемы при возвращении selinux обратно к принудительному или разрешающему ; опять же, это зависит от вашей версии linux и от того, как он использует xattr через selinux.

Базовый ресурс Samba не работает в RHEL / CentOS 7 ... потому что selinux по умолчанию настроен на принудительное выполнение; selinux запретил все, пока вы не разрешите, поэтому либо отключите selinux (плохо), либо установите его как разрешающий. Если вы оставляете selinux принудительным, вы должны пометить папку, которую вы хотите использовать в samba, расширенным атрибутом, чтобы selinux распознал и разрешил общий доступ. Так что, если вы оставите selinux принудительным, тогда со всеми командами selinux (которые затем установят необходимые xattrs):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

Вы также используете selinux в системе linux с этим общим ресурсом samba, чтобы наложить ограничения на файлы / папки в этом общем ресурсе samba (используя любой расширенный атрибут). Поскольку эти файлы / папки являются общими, пользователь законно копирует некоторые из них на свой win10 pc, а затем копирует обратно, теряя расширенный атрибут. Теперь, после этой копии туда и обратно, в этой системе linux selinux будет ограничивать доступ к указанным файлам, потому что необходимый xattr больше не присутствует, и пользователи / администраторы стучат там по головам, задаваясь вопросом, почему вещи теперь просто работают, он не ... устанавливает selinux разрешить и распознать проблему потери потерянных xattrфайлов в журналах аудита, но это не будет напрямую указывать на то, что это результат обратной копии, потерявшей xattr. Также рассмотрите возможность резервного копирования и восстановления данных, а также потенциальную работу, которую необходимо запомнитьxattrs в дополнение к uid / gid, если вы хотите обеспечить безопасность на основе правильных xattrs.

рон
источник