У меня есть папка / mnt / disk / folder
.
Я хочу, чтобы user1
и user2
имели полный рекурсивный доступ для чтения и записи к любым текущим и будущим каталогам и файлам.
Я хочу создать символическую ссылку на папку / home / user1 / data /
и / home / user2 / data /
с сохранением прав доступа.
Вот что я сделал:
Сделать каталог
mkdir / mnt / disk / folder
Символьная ссылка на каталог
ln -s /mnt/disk/folder /home/user1/data
ln -s /mnt/disk/folder /home/user2/data
Создать группу для совместного использования
sudo groupadd sharing
Добавить пользователей в эту группу
sudo usermod -a -G sharing user1
sudo usermod -a -G sharing user2
Отобразить все существующие файлы (в данном случае не все), чтобы они принадлежали к группе
sudo chgrp -R sharing / mnt / disk / folder
Сделать все существующие файлы (не в в данном случае) группа-чтение-запись
sudo chmod g + rw -R / mnt / disk / folder
Убедитесь, что все вновь созданные файлы и каталоги будут принадлежать группе
chgrp sharing /mnt/disk/folder
chmod g+s /mnt/disk/folder
Если вы вошли в систему как user1
выполняет mkdir / home / user1 / data / folder / 123
, он работает.
Как и cd 123
и > test.txt
.
Если затем войти в систему как user2
и перейти к / home / user1 / data / folder /
, то там будут данные, созданные user1
, и оба пользователи могут создавать, редактировать и удалять каталоги и файлы.
Однако я запускаю сервер JupyterHub, где user1 и user2 получают доступ к своим каталогам через интерфейс браузера jupyter. При создании и редактировании здесь разрешения НЕ работают.
Вторая часть проста: символические ссылки всегда поддерживают разрешения в том смысле, в котором вы ожидаете. Таким образом, создайте их просто с помощью ln -s
:
ln -s /mnt/disk/folder /home/user1/data
ln -s /mnt/disk/folder /home/user2/data
(в случае, если вы используете приложения, которые не работают правильно с символической ссылкой, рассмотрите возможность использования привязки).
Это «более сложная» часть, потому что она зависит (по крайней мере частично) от сотрудничества пользователей. Базовый подход UNIX к подобной проблеме состоит в том, чтобы сделать обоих пользователей ( user1
и user2
) частью одной и той же группы (например, dataaccess
). Затем все существующие данные необходимо указать, чтобы они принадлежали к этой группе, например. с помощью такой команды:
chgrp -R dataaccess /mnt/disk/folder
Наконец, все файлы в каталоге должны быть доступны для группового чтения-записи, что может, например, достигается с помощью chmod g + rw -R / mnt / disk / folder
для существующих файлов.
После установления доступа к существующим файлам в игру вступает взаимодействие пользователя: все вновь созданные файлы и каталоги должны принадлежать к группе и иметь установленный бит g + rw
. Правильная установка разрешений может быть достигнута путем настройки подходящей umask
для обоих пользователей.
Последний шаг - убедиться, что вновь созданные файлы и каталоги принадлежат правильной группе. Пользователи могут сделать это вручную, вызвав подходящие команды chgrp
после того, как они создали файлы, или автоматически с помощью бита setgid, см. Этот вопрос: https://askubuntu.com/questions/51951 /set-default-group-for-user-when-they-create-new-files .
Если вы не можете полагаться на то, что пользователи будут создавать файлы, к которым только они имеют доступ, вы можете установить автоматическое разрешение механизм расширения с помощью cronjob или inotify.
Другой «подход кувалды», который сопровождается множеством проблемных побочных эффектов, - это использование файловой системы, которая не поддерживает разрешения и, таким образом, всегда будет иметь (настраиваемые во время монтирования) разрешения на доступ. На ум приходит FAT32, но мы настоятельно рекомендуем вместо этого использовать описанное выше решение для очистки!