Чи сервер OpenSSH SFTP використовує umask чи зберігає дозволи клієнтської команди після команди команд (chrooto середовище)?


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 середовища btw)
  • додати конкретну конфігурацію у pam.d/sshdфайл

З іншого боку, я прочитав:

Клієнт і сервер OpenSSH SFTP передають дозволи (як розширення) та створюють віддалений файл з дозволами на локальній стороні. 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.

У будь-якому випадку, що робить клієнт OpenSSH SFTP:

  • 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

Відчуваєте різницю в дозволах після putVS. 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

Btw, остання специфікація 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.