Предоставление доступа к файлу или каталогу другому пользователю, но не всем пользователям Ubuntu

4

Как разрешить одному пользователю - но не всем - доступ к файлам другого пользователя в Ubuntu?

У меня есть каталог, /home/alice/dirпринадлежащий alice:

$ cd /home/alice
$ ls -l
drwxr-x---  2 alice alice       4096 Feb 10 21:24 dir

т.е. владелец aliceи группа aliceимеют доступ на чтение / выполнение. Конечно, /homeи /home/aliceдоступны для чтения / исполнения для всех ( drwxr-xr-x), который является конфигурацией по умолчанию для Ubuntu.

Я хочу разрешить пользователю bobдоступ к этому каталогу, но любой другой пользователь eveне должен иметь доступа.

То, что я сделал до сих пор, было:

$ sudo adduser bob alice

и сейчас

$ getent group alice
alice:x:1001:bob

так что теперь bobв группе alice.

Тем не менее, по-прежнему bobне может получить доступ к каталогу:

$ whoami
bob
$ cd /home/alice
$ pwd
/home/alice
$ ls -l
drwxr-x---  2 alice alice       4096 Feb 10 21:24 dir
$ groups bob
bob : bob alice
$ cd dir
bash: cd: test: Permission denied

В чем дело?

Пользователи были созданы с

sudo adduser alice
sudo adduser bob
sudo adduser eve

Убунту 14.04. Я думаю, что ACL не используются, и я не хочу их использовать - я думаю, что то, что я хочу, должно быть вполне достижимо без ACL.

Александр Гельбух
источник

Ответы:

3

Способ, как описано в вопросе, является правильным:

$ sudo adduser bob alice

Однако вы не увидите изменения сразу: все запущенные в настоящее время процессы и службы должны быть перезапущены, чтобы они могли увидеть изменения.

Это связано с тем, что при обновлении групп разрешения текущих запущенных процессов и служб, включая вашу оболочку, не обновляются. Так что в моем случае groups(текущая оболочка, запущенная bobдо изменения групп) и groups bob(текущие права пользователя bob) показали разные результаты:

$ whoami
bob
$ groups bob # current membership of bob
bob alice
$ groups     # shell run by bob BEFORE the groups changed
bob
$ cd /home/alice/dir
bash: cd: test: Permission denied

Поэтому мне пришлось закрыть оболочку и даже закрыть туннель (я был подключен к Ubuntu box через SSH-туннель) и открыть новую оболочку (после того, как я снова подключился к SSH), а затем я увидел

$ whoami
bob
$ groups bob
bob alice
$ groups     # current shell run by bob AFTER the groups changed
bob alice
$ cd /home/alice/dir
$ pwd
/home/alice/dir

Если bobэто служба, такая как apache2(работает под пользователем www-data), эта служба должна быть перезапущена!

Александр Гельбух
источник
Поскольку ваш ответ отличный, я хотел бы предложить добавить, что все вышеперечисленные каталоги (/ home / alice) должны быть читаемыми в группе и (?) Также исполняемыми, в противном случае / home / alice / dir по-прежнему недоступен.
agtoever
Спасибо! Я добавил это в верхней части вопроса (не ответ).
Александр Гельбух,