Ситуация:
Группа A
требует доступа к /path/to/dir/foo
загружать файлы через ssh или ftp, но рассматриваемый каталог: /path/to/dir/foo
принадлежит группе B
(если Вы хотели бы: /path
рекурсивно принадлежит B
), который должен остаться этот путь из соображений безопасности.
Моя попытка для решения:
Я создаю символьную ссылку на /home/A
, который A
владеет. Затем, я даю разрешения так A
может получить доступ к символьной ссылке:
sudo ln -s /path/to/dir/foo /home/A/foo
sudo chown -h A:A /home/A/foo
Я изобразил это /path/to/dir/foo
должен, по крайней мере, принадлежать группе это A
часть:
sudo addgroup C
sudo useradd -G C A
sudo chown -R B:C /path/to/dir/foo
sudo chmod -R 774 /path/to/dir/foo
После выполнения всего этого я соединился через клиент FTPS как пользователь A
и измененный каталог к: /home/A
. К моему удивлению символьная ссылка не видима, который нечетен, потому что proFTPd настраивается для показа символьных ссылок.
Я также пытался соединиться через SFTP с тем же каталогом. На этот раз символьная ссылка была видима, но когда я пытался получить доступ к ней, я получил следующую подсказку:
Не может открыть удаленный файл '/path/to/dir/foo'.
Разрешение отклонено.
Код ошибки: 3
Сообщение об ошибке с сервера: Разрешение отклонено
Это оставляет меня с мало ни к каким альтернативам, так как это было самым легким решением, о котором я мог думать.
Отчаянная попытка:
Я дал глобальные разрешения к /path/to/dir/foo
, но я все еще не мог получить доступ к символьной ссылке foo
в /home/A
как пользователь A
. Значение: ls -l /path/to/dir/foo
распечатал бы -rwxrwxrwx
.
Вопрос:
Как я создаю символьную ссылку /home/A/foo
который указывает на /path/to/dir/foo
. Который A
может получить доступ, несмотря на /path/to/dir/foo
быть главным образом принадлежавшимся user:group B
(/path
принадлежит B
) ?
Если Ваш каталог находится в ext4 файловой системе, можно использовать ACL. Лучше всего объясненный примером; мой пользователь romano
и другой пользователь default
.
Как romano
:
[romano:~/tmp] % mkdir -p a/b/c/d
[romano:~/tmp] % cd !$
cd a/b/c/d
[romano:~/tmp/a/b/c/d] % touch f1
[romano:~/tmp/a/b/c/d] % ls -l
total 0
-rw-rw-r-- 1 romano romano 0 nov 27 17:15 f1
Очевидно, я могу записать в каталог d
, это является моим..., но от default
:
default@pern:/home/romano/tmp/a/b/c/d$ touch f2
touch: cannot touch ‘f2’: Permission denied
Да. Никакая символьная ссылка не изменит факт это default
не может записать там.
Теперь, как romano
, Я предоставляю дополнительный доступ для группировки default
:
[romano:~/tmp/a/b/c/d] % setfacl -m g:default:rwx .
(чтение как: добавить rwx
разрешение сгруппироваться default
к току .
каталог)
... И теперь, как default
:
default@pern:/home/romano/tmp/a/b/c/d$ touch f2
default@pern:/home/romano/tmp/a/b/c/d$ ls -l
total 0
-rw-rw-r-- 1 romano romano 0 nov 27 17:15 f1
-rw-rw-r-- 1 default default 0 nov 27 17:17 f2
Синтаксис ACL является небольшим convouted, но это - довольно мощный инструмент. Посмотрите man setfacl
и man getfacl
для полной информации и большего количества примеров.
В Вашем случае, если Вы имеете /path/to/dir/foo
принадлежавший A:A, и Вы хотите, чтобы у группы B был доступ для записи к foo
Вы должны:
добавить +rx
разрешение к каждому продвижению каталога к нему для группы B:
setfacl -m g:B:r-x /path
setfacl -m g:B:r-x /path/to
setfacl -m g:B:r-x /path/to/dir
добавить +rwx
permssion группе B к каталогу:
setfacl -m g:B:rwx /path7to7dir/foo
Заметьте однако, что это кажется, что у нас есть противная ошибка вокруг... См. http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8527. Я не уверен в последствиях---простой случай выше обработанного хорошо, но проверьте его.
Этот ответ основан на подсказке, которую Rmano дал в конце его ответа, даже при том, что метод списка управления доступом к файлу не работал.
Это не работало, потому что полный путь, например, /path/to/dir
требует [по крайней мере 113] разрешения read+execute : sudo chmod -R g+rx /path
. Это решило мою проблему, и я могу теперь получить доступ к символьной ссылке в A
корневой каталог и записать в содержание файлов.