Использует ли OpenSSH SFTP-сервер umask или сохраняет клиентские разрешения после команды put (chrooted окружение)?
Я знаю, что этот вопрос уже обсуждался, но, читая посты, я не мог понять ответы, потому что некоторые говорили: "Да, umask может работать", а другие говорят: "Команда openSSH put всегда сохраняет разрешения".
Прежде всего, чтобы уточнить:
- Я использую OpenSSH 5.9 на RHEL 6.2
- Я настроил привязанный SFTP-сервер, используя
internal-sftp
подсистема, с-u 0002
для масок - Я точно не использую
-p
или же-P
вариант
Из того, что я прочитал с одной стороны: есть много способов определить umask для SFTP-передач:
- вариант
-u
изinternal-sftp
(или жеsftp-server
), так как OpenSSH 5.4 - создать обертку для
sftp-server
(в котором мы явно устанавливаем umask - кстати, это не подходит для chrooted окружения) - добавить конкретную конфигурацию в
pam.d/sshd
файл
С другой стороны, я прочитал:
SFTP-клиент и сервер OpenSSH передают разрешения (как расширение) и создают удаленный файл с разрешениями на локальной стороне. AFAICT, нет способа отключить это поведение.
Итак, я сделал следующий тест:
На моем клиенте я создал файл MYFILE
и каталог MYDIR
с разрешениями 600 и 700.
Затем с sftp
команды:
mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)
Если я изменю разрешения MYFILE
а также MYDIR
на стороне клиента и загрузить снова, я получаю новые разрешения на стороне сервера.
Я попробовал pam.d
Решение тоже, но это ничего не изменило.
Так что теперь я в замешательстве:
Из того, что я тестировал, и из части того, что я читал, я бы сказал, что OpenSSH всегда сохраняет права доступа. Но так как есть много сообщений, в которых говорится, что можно определить umask, я могу представить, что я сделал неправильную вещь в своих тестовых конфигурациях.
Буду признателен за опытную обратную связь.
Спасибо.
1 ответ
Во-первых, umask - это сервер, а не клиент. Так что спрашивая, если put
Команда клиента OpenSSH использует umask неверно. Вы должны спросить, использует ли сервер OpenSSH umask при создании файла в результате загрузки SFTP.
В любом случае, что делает SFTP-клиент OpenSSH:
put
без-P
флаг, он просит сервер создать файл с теми же разрешениями, что и у локального файла. Затем сервер OpenSSH (неявно по правилам *nix) применяет umask.put
с-P
флаг, он запускается так же, но после завершения загрузки клиент просит сервер явно (пере) установить разрешения на то же, что и у локального файла (запрос "chmod"). Для "chmod", umask не применяется.mkdir
, он просит сервер создать каталог с разрешениями 0777. Umask неявно применяется.
В любом случае, я считаю, что umask 0002 не влияет на файл с разрешениями 0600, поскольку они взаимоисключающие. Вы должны попробовать свой umask для файла с разрешениями, такими как 0644.
Так что на самом деле, это должно работать, если ваша система настроена так, как вы описываете. Смотрите доказательства из моей коробки (Ubuntu с OpenSSH 6.2p2)
Match user user2
ChrootDirectory /home/user2/chroot
ForceCommand internal-sftp -u 0077
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
Смотрите разницу в разрешениях после put
против put -P
:
user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser 0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password:
Connected to localhost.
sftp> cd somefolder
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt 100% 0 0.0KB/s 0:00
sftp> ls -l
-rw------- 1 1003 1001 0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt 100% 0 0.0KB/s 0:00
sftp> ls -l
-rw-r--r-- 1 1003 1001 0 Oct 23 15:34 file.txt
Кстати, последняя спецификация SFTP определяет поведение клиента и сервера в отношении umask. Как вы можете видеть, OpenSSH фактически нарушает это, хотя OpenSSH реализует SFTP версии 3, в которой еще не упоминалось umask.
7,6. права доступа
...
Сервер НЕ ДОЛЖЕН применять umask к битам режима; но следует установить биты режима, как указано клиентом. Клиент ДОЛЖЕН применить соответствующий "umask" к битам режима перед их отправкой.