Разрешения Linux: пользователи, группы, другие, белый список или черный список? Помогите поделиться каталогами с полным, частичным и без разрешений
Обновление: для моих общих целей достаточно того, что я выяснил здесь: ОБНОВЛЕНИЕ: https://raspberrypi.stackexchange.com/questions/13401/locking-down-raspbian-to-only-allow-limited-features/58778
Поэтому мне кажется, что разрешения Linux действуют как белый список (принудительно разрешают одному, указанному пользователю или одной указанной группе что-то), а не как черный список (принудительно запрещают одному, указанному пользователю или одной указанной группе что-то), Это правильно? Если да, то как я могу занести кого-то в черный список из-за возможности читать, писать или выполнять в определенном каталоге или в наборе файлов?
Пример: ls -l
отображение разрешений для каталога как drwxr-xr-x
означает, что это каталог, пользователи имеют разрешения на чтение, запись, выполнение (rwx), группы имеют разрешения rx, а другие имеют разрешения rx. Допустим, пользователь "user0", а группа "user0".
Как явно разрешить "user1" и "user2" возможность иметь все разрешения в этом каталоге "user0", "user3" и "user4" не получить разрешений, а "user5" и "user6 получить частичные разрешения?
Мне кажется, мне нужно было бы занести в черный список user3 и user4, в белый список user1 и user2 и частично в белый список или частично в черный список user5 и user6.
Поскольку (я думаю) разрешения Linux указаны только в белом списке, каков наилучший способ добиться этого?
Обратите внимание, что часть моей путаницы заключается в том, что:
- Каталог или файл могут принадлежать только одному пользователю или группе за раз (а не, скажем, давать разрешения нескольким группам на доступ к определенному каталогу или файлу)
- Пользователь может принадлежать к нескольким группам
Я думаю, мне просто нужны хорошие примеры этого материала.
Одно частичное решение, которое помогает продемонстрировать мою проблему, заключается в следующем:
Давайте предположим, что каталог user0, для которого я хочу установить эти разрешения, - "/home/user0"
Во-первых, создайте каталог user "user0" и группу "user0" (по умолчанию это уже сделано, просто используя sudo adduser user0
на первом месте). Затем установите права доступа "drwxrwx ---" (пользователь и группа оба rwx, но другие ничего)
Разрешить user1 и user2 все разрешения для каталога, добавив их каждое в группу user0
Дайте user3 и user4 никаких разрешений: уже сделано, так как другие имеют доступ "---", а user3 и user4 НЕ являются частью группы user0.
Дайте user5 и user6 частичные разрешения (например, "rx"): -не может быть сделано???? --because, если я сделаю другие разрешения "rx", то это даст это и для user3 и user4, но я хочу, чтобы они были в черном списке (имея разрешения "---").
Фоновое чтение, которое я уже сделал, включает в себя:
- Как использовать группы Linux, чтобы ограничить доступ для чтения, записи и выполнения другими пользователями к каталогу?
- https://stackoverflow.com/questions/527876/how-to-restrict-a-linux-user-to-be-only-able-to-read-home-user-and-nothing-else/527976
- https://raspberrypi.stackexchange.com/questions/13401/locking-down-raspbian-to-only-allow-limited-features/14712
- https://askubuntu.com/questions/88356/changing-ownership-of-home-folders/88396
- https://www.linode.com/docs/tools-reference/linux-users-and-groups
2 ответа
Да, если вам нравится формулировать это так, стандартные разрешения Unix являются "белым списком".
Обычный способ работы с разрешениями состоит в создании новой группы, которая абстрагируется от всех файлов, которые должны вести себя одинаково, присваивает этим файлам соответствующий идентификатор группы и делает всех пользователей, которые должны получить эти разрешения, частью группы. Вот почему пользователи могут быть членами многих групп.
Разрешения на использование устройств обрабатываются одинаково, поэтому у вас есть такие группы, как input
, disk
и т.д. во многих дистрибутивах.
Таким образом, в этом смысле вы можете рассматривать группу как определенное "правило" вашего "набора правил доступа". Ограничение состоит в том, что каждый файл может иметь только одно правило с одним rwx
комбинация разрешений, помимо "пользовательских" и "других" разрешений.
Таким образом, ваш сценарий, когда одна группа пользователей должна иметь один набор разрешений, а другая группа должна иметь другой набор разрешений для одного и того же файла или каталога, не может быть реализована со стандартными разрешениями Unix.
Однако есть расширение стандартных разрешений Unix, называемое списками контроля доступа (ACL). Увидеть man acl
для деталей. Для многих файловых систем вы должны указать опцию, чтобы активировать ACL при их монтировании.
Для этого типа детализации вы хотите использовать ACL. С ALC вы можете назначать различные разрешения нескольким пользователям или группам. Чтобы выполнить то, что вы просите, вы должны выполнить следующие команды (при условии, что ваш каталог называется dir):
setfacl -m u:user1:rwx dir
setfacl -m u:user2:rwx dir
setfacl -m u:user3:- dir
setfacl -m u:user4:- dir
setfacl -m u:user5:rx dir
setfacl -m u:user6:rx dir
Это предоставит полный доступ к user1 и 2, нет доступа к user3 и 4, и права на чтение / выполнение для user5 и 6. Если вы сделаете ls -ld
в каталоге вы заметите, что теперь он имеет +
добавлены к битам разрешения.
$ ls -ld dir
drwxrwxr-x+ 2 user0 users 40 Dec 7 11:42 dir
+
означает, что с ним связан один или несколько списков ACL. Вы можете увидеть ACL с getfacl
команда:
$ getfacl dir
# file: dir
# owner: user0
# group: users
user::rwx
user:user1:rwx
user:user2:rwx
user:user3:---
user:user4:---
user:user5:r-x
user:user6:r-x
group::r-x
mask::rwx
other::r-x
Также стоит отметить, что ls
Кажется, команда показывает, что каталог доступен для записи группой, но getfacl
Команда показывает, что это не так. ACL здесь правильный, это означает, что если пользователь в users
группа, но не названная иначе в ACL, или владелец файла пытается создать файл в каталоге, произойдет сбой.