Я сделал некоторые исследования для вас.
Мой (локальный) клиент - Ubuntu, мой (удаленный) сервер - Raspbian. Я подключаюсь через SFTP с помощью интерактивной команды sftp
клиента. Я перенес тестовый файл с локальными разрешениями -rwxrwxrwx
с клиента на сервер, используя эту команду в sftp
:
put testfile
Удаленная копия унаследовала разрешения, за исключением того, что некоторые из них были замаскированы удаленным umask ( 0022
, поэтому удаленные разрешения оказались -rwxr-xr-x
. Это ожидается.
Затем я отредактировал удаленный ~/.profile
чтобы (временно) установить umask как 0002
. После повторного входа в систему новый umask работал в удаленной оболочке. Я перезапустил свой локальный sftp
и снова протестировал, но новая удаленная копия не подчинялась новому umask.
Не удивительно В моем удаленном .profile
это читает:
для установки umask для логинов ssh установите и настройте пакет libpam-umask
Оказалось, что libpam-umask
фактически находится в libpam-modules
. Он уже был установлен.
Я прочитал эту часть документации. Это дает пример:
Добавьте следующую строку в /etc/pam.d/login
чтобы установить пользовательский umask при входе в систему:
session optional pam_umask.so umask=0022
Я проверил удаленный каталог /etc/pam.d
и предположил, что мне нужно изменить файл sshd
, а не login
. Кроме того, я не хотел передавать umask глобально модулю. В документации сказано:
Модуль PAM пытается получить значение umask из следующих мест в следующем порядке:
umask=
аргумент
umask=
запись в поле пользователя GECOS
- [...]
Я выбрал GECOS, запустил sudo vipw
и добавил umask=0002
к моей записи; сохранены. Результат был:
kamil:x:1001:1004:Kamil Maciorowski,,,,umask=0002:/home/kamil:/bin/bash
Затем я добавил эту строку в конец /etc/pam.d/sshd
:
session optional pam_umask.so
После этого я удалил удаленную копию testfile
запустить локальный sftp
заново и снова передал testfile
Новая удаленная копия подчинялась выбранному мной маску.
редактировать
Я попробовал FileZilla на своей локальной Ubuntu. Он создает файлы на сервере по отношению к удаленному umask; он копирует локальные файлы с их локальными разрешениями также в отношении удаленного Umask.
С FileZilla можно изменить разрешения удаленного файла "вручную". Я понимаю, что это то, что вы хотите избежать.
(Редактирование заканчивается здесь)
Я думаю, что процедура для вас заключается в следующем:
- Возьмите приведенный выше пример и установите umask для двух рассматриваемых пользователей, чтобы удаленные файлы, которые они создают через SFTP, были доступны для записи по группам.
- Создайте специальную группу на сервере, добавьте в нее двух пользователей и сделайте их своей основной группой.
(Я не буду подробно объяснять пункт 2 здесь. Проводить исследования; задать отдельный вопрос (ы) в случае возникновения проблем).
Таким образом, каждый новый файл, созданный через SFTP любым из двух пользователей, будет принадлежать специальной группе, и он будет доступен для записи этой группой. Помните, что копируемые файлы сохраняют свои разрешения настолько, насколько они могут (по крайней мере, в моих тестах).