Учетные записи пользователей создаются с определенным набором предопределенных привилегий и прав на системные файлы и службы. С другой стороны, существуют группы для обмена файлами и папками между пользователями. Как правило, при создании учетных записей пользователей их можно назначать альтернативным группам. Однако бывают случаи, когда вы можете не захотеть назначать определенного пользователя в определенную группу, но в то же время вам может потребоваться предоставить общий доступ к файлам/папкам этому конкретному пользователю. Здесь на помощь приходят списки контроля доступа (ACL). В этой статье мы узнаем о списках контроля доступа в Ubuntu.
Списки контроля доступа (ACL) позволяют нам точно настроить контроль доступа. Другими словами, предположим, что пользователю andrey нужен доступ к одной папке, принадлежащей andreyex. Технически мы могли бы назначить andrey в группу andreyex, но это означало бы, что andrey будет иметь доступ к большему, чем ей нужно, и предположим, что у andreyex есть конфиденциальные файлы, которые она не хочет, чтобы andrey читала, записывала или выполняла. Здесь на помощь приходят списки управления доступом или ACL. Теоретически мы можем возиться с разрешениями, но ACL позволяют нам предоставлять разные права доступа разным пользователям, а также предоставлять доступ без необходимости возиться с фактическими базовыми разрешениями файла или папки.
Мы используем команду getfacl (получить список контроля доступа к файлам) для просмотра текущих разрешений ACL.
getfacl <options> file/folder
Предположим, я создаю папку с именем secret с двумя подкаталогами и 5 файлами. Предположим далее, что я хочу просмотреть разрешения ACL для секретной папки.
getfacl secret
Это означает, что владелец файлов и папок andreyex, входящих в группу andreyex, имеет права на чтение, запись и выполнение. Все остальные, однако, не имеют никакого разрешения.
Тонкая настройка разрешений с помощью ACL осуществляется с помощью команды setfacl. Переключатель -m, в частности, используется для изменения разрешений.
setfacl -m u:username:permissions filename
U означает, что изменение предназначено для пользователя, а не для группы. После двоеточия следует написать имя пользователя, которому предоставлено разрешение, а также предоставленное разрешение. Права доступа такие же, как и у chmod: чтение, запись и выполнение. Наконец, мы пишем имя файла, для которого применяется разрешение.
Например, предположим, что я хочу предоставить ей полный доступ к этой секретной папке пользователю andrey, тогда мы напишем:
setfacl -m u:andrey:rwx secret
Теперь, если мы войдем в систему как andrey, мы получим доступ к папке «secret» для чтения, записи и выполнения. Теперь, заметьте, мы установили разрешение 770 для исходного каталога. Это разрешение было сохранено, но было добавлено исключение из правила с помощью списков контроля доступа. Если бы у меня была другая папка под названием «kali» с разрешением 770, принадлежащая andreyex, пользователь andrey не смог бы к ней прикоснуться. На самом деле, он будет говорить “Permission denied”.
Кроме того, следует отметить, что после того, как файл изменен как ACL, рядом с ним появляется знак «плюс», когда вы перечисляете его. В данном случае, как вы можете видеть, это говорит drwxrwx—+ для папки с именем secret. Знак плюс означает, что он был изменен с помощью ACL.
После того, как вы установите ACL, также будет создана маска. Маска — это максимальное разрешение, которое потенциально может иметь пользователь или группа ACL для каталога или файла.
Подобно назначению специальных разрешений пользователям, мы также можем назначать специальные разрешения группам. Это означает, что мы можем оставить наши базовые разрешения как есть и назначить определенной группе дополнительные разрешения с помощью ACL.
setfacl -m g:group_name:permissions filename
Ex:
setfacl -m g:maxim:r secret
В этом случае мы даем группе maxim разрешение на чтение секретной папки. Это означает, что все члены группы maxim будут иметь разрешение на чтение секретной папки и ТОЛЬКО секретной папки. Все остальное будет под замком.
Секретная папка была разработана с 3 файлами непосредственно в ней и 2 подкаталогами, в каждом из которых находится один файл.
Когда мы назначали разрешения для пользователя andrey и группы MAXIM, мы не делали этого рекурсивно, поэтому давайте проверим разрешения ACL для подкаталогов в данный момент (после назначения разрешений для секретного каталога).
Как видите, разрешения ACL применяются только к секретному каталогу, а не к подкаталогам. Это означает, что пользователь andrey и группа MAXIM не имеют данных прав доступа к подкаталогам! В этом случае, если мы хотим предоставить разрешения для всего каталога (включая подкаталоги), мы должны выполнить рекурсивное назначение. Для этого мы используем ключ -R.
setfacl -R -m u:username:permissions filename
Ex:
setfacl -R -m u:andrey:rwX secret
Вы также можете отозвать предоставленные разрешения, и это так же легко сделать, как и дать их. Вы используете переключатель -x вместо переключателя -m для отзыва разрешений.
Чтобы удалить определенную запись:
setfacl -x u:username filename setfacl -x g:group_name filename
В этом случае мы бы написали:
setfacl -x u:andrey secret
setfacl -x g:MAXIM secret
Чтобы удалить все записи одним махом:
setfacl -b filename
Например:
setfacl -b secret
Это, однако, не удаляет права на подкаталоги. Для того, чтобы снять права с подкаталогов, необходимо использовать рекурсию.
setfacl -R -b secret
Все, что мы узнали, сводится к следующему:
Чтобы просмотреть разрешения ACL:
getfacl filename
Чтобы установить разрешения ACL:
setfacl <options> <entry> filename
Опции:
Запись:
Хотя chmod существует для предоставления прав доступа к файлам и папкам, он не является выборочным. Он не может предоставлять разные привилегии разным пользователям. Кроме того, бывают случаи, когда случайных людей тоже не хочется добавлять в группы. ACL или списки контроля доступа были изобретены как раз для таких случаев. Он может предоставлять определенным пользователям или группам доступ к определенным файлам и/или папкам. В этой статье мы узнали, как предоставлять пользователям и группам специальные разрешения, рекурсивно назначать разрешения и отзывать указанные разрешения. Так что идите вперед и настройте права доступа к файлам и папкам отсюда и вперед!