Я сделал некоторые исследования для вас.
Мой (локальный) клиент - 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 любым из двух пользователей, будет принадлежать специальной группе, и он будет доступен для записи этой группой. Помните, что копируемые файлы сохраняют свои разрешения настолько, насколько они могут (по крайней мере, в моих тестах).