Как предоставить разные разрешения для каждого пользователя?

11

Итак, я использую Linux уже несколько лет, и я действительно должен знать этот ответ, но мне трудно его найти. В частности, я использовал дистрибутив на основе Debian .... в основном Ubuntu.

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

Например:

Если у меня есть файл с этими разрешениями и владельцем:

rwx rw_ r__ user1:group1 file1.txt

и у меня есть 3 пользователя с этими желаемыми разрешениями ....

  • user1 rwx
  • user2 rw_
  • user3 r__

Все, что мне нужно сделать, это иметь user1 , владеющего файлом, user2 быть в group1 , а user3 не может быть ни - правильным?

Но что, если у меня есть user4 и user5 .

  • user4 _wx
  • user5 __x

Как бы я это настроил?

Я не должен был делать это раньше, но мне задали этот вопрос администратор Windows, и я честно не мог ответить.

trueCamelType
источник
8
Для такого типа детализации в разрешениях вам нужно будет использовать списки контроля доступа (ACL). Краткое руководство можно найти здесь . Несмотря на предостережение, когда вы начинаете идти по пути ACL вместо разрешений, это очень скользкий путь, и все очень быстро усложняется с некоторыми непредвиденными последствиями в конце.
MelBurslan

Ответы:

19

Традиционные разрешения Unix позволяют только пользователю, группе, другим разрешениям, как вы нашли. Это может привести к некоторой неловкой комбинации групп, нуждающихся в создании ...

Таким образом, была добавлена ​​новая форма ACL (списки контроля доступа). Это позволяет указать несколько пользователей и несколько групп с разными разрешениями. Они устанавливаются setfaclкомандой и читаются сgetfacl

$ setfacl -m u:root:r-- file.txt
$ setfacl -m u:bin:-wx file.txt 
$ setfacl -m u:lp:--x file.txt 
$ getfacl file.txt
# file: file.txt
# owner: sweh
# group: sweh
user::rw-
user:root:r--
user:bin:-wx
user:lp:--x
group::r--
mask::rwx
other::r--

Вы можете легко определить, имеет ли файл ACL, посмотрев на lsрезультат:

$ ls -l file.txt
-rw-rwxr--+ 1 sweh sweh 0 Jul 26 10:33 file.txt

В +конце разрешений указывается ACL.

Стивен Харрис
источник
2

Да, списки ACL позволяют свободно устанавливать разные права для разных пользователей или групп. IIRC обычные групповые разрешения ограничивают набор разрешений, которые группы и пользователи могут иметь через ACL: s (показано как maskна getfacl), но setfaclдолжны иметь дело с этим, если вы добавляете разрешения.

Но в некоторых случаях вам нужно спросить, имеет ли смысл набор разрешений.

У меня есть 3 пользователя с этими желаемыми разрешениями ....
- user1 rwx
- user2 rw_
- user3 r__

Вы можете реализовать это с помощью ACL: s или (приблизительно) с обычными разрешениями Unix, сделав user1 владельцем файла, user2 членом группы и предоставив другим пользователям, включая user3, доступ на чтение. Хотя тогда каждый (с доступом к каталогу) также будет иметь права на чтение.

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

Это не имеет большого смысла в моем уме. Любой пользователь, который может прочитать файл, может сделать копию (*), пометить его как исполняемый и запустить его, не имея права на запуск исходного файла. Единственная ситуация, в которой имеет смысл иметь доступ к исполнению для некоторых пользователей, но не для других, - это когда исполняемый файл имеет повышенные привилегии через suid. Но если бы это было так, у вас не должно быть других пользователей с правами на запись в файл.

В том же смысле user4 с -wxи user5 с --xне имеют смысла для меня. Доступ только для записи может иметь смысл, если бы была возможность разрешать только добавления , но система разрешений не настолько детализирована.

(* если они не могут нигде писать)


Хотя, если мы удалим странное требование для xбита, у нас останется файл, в котором user1 и user2 должны иметь доступ на запись, а user3 должен иметь доступ на чтение. Один автор и несколько читателей могли бы легко использовать традиционную модель, но в этом случае потребовались бы хитрости, чтобы объединить права доступа к файлу с разрешениями содержащего каталога. К счастью, во многих случаях достаточно одного пользователя с большим количеством разрешений.

Без требования к биту выполнения это похоже на случай использования ACL: s. Но с этим, этот конкретный пример кажется мне довольно запутанным.

ilkkachu
источник
Если пользователь может выполнять запись только в файловую систему, смонтированную без разрешения на выполнение, он не может выполнить копию, даже если он может выполнить оригинал, если будут установлены соответствующие разрешения. Также может иметь смысл только выполнение, если вы не хотите, чтобы они искали эксплойты. -wxбезусловно, странно.
celtschk
1
Некоторые системы имеют механизм, позволяющий только добавлять. Linux есть chattr +a, например. И даже без каких-либо специфичных для системы вы можете сделать файл FIFO. --xи, соответственно -wx, имеет смысл для каталогов .
Random832