Использует ли OpenSSH SFTP-сервер umask или сохраняет клиентские разрешения после команды put (chrooted окружение)?


13

Я знаю, что этот вопрос уже обсуждался, но, читая посты, я не мог понять ответы, потому что некоторые говорили: «Да, umask может работать», а другие говорят: «Команда openSSH put всегда сохраняет разрешения».

Прежде всего, чтобы уточнить:

  • Я использую OpenSSH 5.9 на RHEL 6.2
  • Я настроил привязанный SFTP-сервер, используя internal-sftpподсистему, -u 0002для umask
  • Я точно не использую опцию -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, я могу представить, что я сделал неправильную вещь в своих тестовых конфигурациях.

Буду признателен за опытную обратную связь.

Спасибо.

Ответы:


12

Во-первых, 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» к битам режима перед их отправкой.


Я уже пробовал со многими различными разрешениями, в самом начале у меня было 755 для моего каталога на стороне клиента, и я хотел получить 775 вместо этого. Но это не сработало. Я согласен с вами для -P, прочитав документацию, но даже без этого флага я всегда получаю на сервере те же разрешения, что и у клиента (какими бы ни были разрешения)
— drkzs

спасибо за замечание, я попытался улучшить заголовок и исправить некоторые термины
— drkzs

Это должно работать на самом деле, смотрите мое обновление.
— Мартин Прикрыл

Да, ваш пример работает ... но если вы измените umask на 0002, он больше не работает. Может быть, этот пост поднимает ту же проблему? кроме того факта, что я нахожусь в openssh5.9 и этот вариант umask должен работать. Разница между вашей конфигурацией SSHD и моей заключается в том, что я не использую ForceCommand, поэтому я указываю umask в строке подсистемы. (Я постараюсь опубликовать конфиг и результат, но тест сети не так легко получить)
— drkzs

1
Просто чтобы прояснить этот момент: The server SHOULD NOT apply a 'umask' применяется только тогда, когда клиент отправляет информацию о правах доступа . Когда клиент не отправляет информацию о правах доступа, он намерен применить umask!
— Heiglandreas
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.