Разрешить пользователю читать домашние каталоги некоторых других пользователей

10

Я новичок в системном администрировании, и у меня есть запрос, связанный с разрешениями. У меня есть группа под названием administration. Внутри administrationгруппы, у меня есть пользователи user1, user2, user3, superuser. Все пользователи в administrationгруппе. Теперь мне нужно дать разрешения пользователю, superuserчтобы он мог просматривать /homeкаталог других пользователей. Тем не менее, я не хочу user1, user2, user3чтобы увидеть дом любого другого пользователя , кроме самой себя. (То есть user1должен видеть только user1дома и т. Д.).

Я создал пользователей и группы и назначил всех пользователей в группу. Как мне указать разрешения на данный superuserмомент?

Другими словами, я думаю о двух группах (скажем, NormalUsersи Superuser). NormalUsersГруппа будет иметь пользователь user1, user2и user3. В Superuserгруппе будет только пользователь Superuser. Теперь мне нужно Superuserиметь полный доступ к файлам пользователей в группе NormalUsers. Возможно ли это в Linux?

Рамеш
источник
Чем это отличается от вашего предыдущего вопроса ?
Жиль "ТАК - перестань быть злым"
В моем предыдущем вопросе я больше занимался редактированием файла / etc / sudoers и назначением пользователя с частичным администратором. Здесь я пытаюсь изменить разрешения локального пользователя. Да, это похоже на то, что я пытаюсь достичь, но я пытаюсь использовать другой метод здесь.
Рамеш

Ответы:

10

Если пользователи сотрудничают, вы можете использовать списки контроля доступа (ACL). Установите ACL в домашний каталог user1(и друзей), который предоставляет доступ для чтения superuser. Установите также ACL по умолчанию для вновь создаваемых файлов, а также ACL для существующих файлов.

setfacl -R -m user:superuser:rx ~user1
setfacl -d -R -m user:superuser:rx ~user1

user1 может изменить ACL на своих файлах, если он пожелает.

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

mkdir -p ~superuser/spyglass/user1
chown superuser ~superuser/spyglass
chmod 700 ~superuser/spyglass
bindfs -p a+rX-w ~user1 ~superuser/spyglass/user1

Файлы, доступные через ~ superuser / spyglass / user1, доступны для чтения всему миру. Кроме разрешений, ~superuser/spyglass/user1это представление user1домашнего каталога. Поскольку superuserэто единственный пользователь, который может получить доступ ~superuser/spyglass, только superuserможет извлечь выгоду из этого.

Жиль "ТАК - перестань быть злым"
источник
В моей системе, права доступа и имя пользователя меняются местами: setfacl -R -m user:superuser:rx ~user1.
Орелиен Оомс
10

Вы можете использовать ACL для предоставления доступа к определенному каталогу произвольной группе.

Например, если вы запустились setfacl -m g:dba:rwx /home/foo, у членов группы dba будут права на rwx, независимо от того, какой группе принадлежит каталог.

Возможно, вы также захотите установить ACL по умолчанию (ACL для вновь создаваемых объектов в каталоге), чтобы также включить это разрешение.

derobert
источник
да, точно .. Я тоже узнал то же самое, но все еще не уверен, будет ли хорошей идеей предоставлять ACL на сервере пользователям LDAP.
Рамеш
@Ramesh Ну, если они пользователи системы (потому что вы используете nss-ldap, sssd и т. Д.), То я не уверен, почему это не будет нормально.
Дероберт
Я пытался повторить это в испытательном стенде. Когда я вхожу в систему как пользователь (например, foo), я вижу предупреждающее сообщение как «разрешения должны быть установлены на 644». Я верю, что предупреждение можно игнорировать. Но я не хочу, чтобы пользователи лаборатории знали, что их учетные записи были взломаны. Когда я изменяю rwx на просто r в команде setfacl, я не вижу директорию foo.
Рамеш
2
@Ramesh Вам нужно + x, чтобы на самом деле просматривать каталоги. Я не уверен, что говорит вам, что каталог должен быть 644, это глупо, это должно быть 755 или подобное. Но в любом случае пользователь увидит + в поле разрешений ls и может запустить getfacl, чтобы увидеть его - это не секрет.
Дероберт
Хорошо, я получаю предупреждающее сообщение, каталог $ HOME пользователя должен принадлежать пользователю и не должен быть доступен для записи другим пользователям. Я удалил разрешение на запись в команде setacl и теперь не вижу предупреждающего сообщения.
Рамеш
0

К сожалению, на самом деле нет никакого способа сделать это напрямую в vanilla Linux.

Возможно, вы сможете создать новую группу в sudoers для частично-администраторов с белым списком допустимых команд, которые вы хотите разрешить им запускать.

Однако для достижения именно того, о чем вы просите, вам нужно использовать Apparmor или SELinux, чтобы добиться того, чего вы хотите. К сожалению, ни один из этих инструментов не прост в настройке и использовании, и примеры находятся далеко за пределами быстрого ответа здесь.

швейцарцы
источник
1
Linux уже некоторое время поддерживает ACL. ACL позволяют вам делать это.
Дероберт
Да, я только что нашел это решение и обновил ответ. Тем не менее, я до сих пор не знаю, можно ли его использовать на сервере, и это тоже для пользователей LDAP.
Рамеш
@ derobert Из того, что я понимаю, невозможно дать кому-то права корневого уровня через sudo, одновременно используя ACL для ограничения доступа. Вы должны использовать SELinux или другой MAC для этого.
Швейцария,
1
Я думаю, когда ОП говорит пользователю «суперпользователь», он имеет в виду, что буквально - не root.
Дероберт