Я шукав спосіб настройки в OpenSSH UMASK до 0027
послідовним чином у всіх типах з'єднань.
За типом з'єднання я маю на увазі:
- sftp
- scp
- ssh ім'я хоста
- ssh програма імені хоста
Різниця між 3. і 4. полягає в тому, що перший запускає оболонку, яка зазвичай читає /etc/profile
інформацію, а друга - ні.
Крім того, прочитавши цю публікацію, мені стало відомо про параметр -u, який присутній у нових версіях OpenSSH. Однак це не працює.
Я також повинен додати, що /etc/profile
зараз включає umask 0027
.
Точка за пунктом:
- SFTP - Установка
-u 0027
вsshd_config
як уже згадувалося тут , мало.
Якщо я не встановив цей параметр, sftp використовує за замовчуванням umask 0022
. Це означає, що якщо у мене є два файли:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Коли я використовую sftp, щоб помістити їх у машину призначення, я фактично отримую:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
Однак , коли я встановив -u 0027
на sshd_config
машини призначення я на самому ділі отримати:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
чого не очікується, оскільки це насправді має бути:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
Хтось розуміє, чому це відбувається?
scp - незалежно від того, що налаштовано для sftp , дозволи завжди є
umask 0022
. Наразі я не маю уявлення, як це змінити.ssh ім'я хоста - тут немає жодних проблем, оскільки оболонка читається
/etc/profile
за замовчуванням, що означаєumask 0027
в поточній установці.Програма ssh hostname - така ж ситуація, як і scp .
Підсумовуючи, встановлення umask на sftp
зміну результату, але не так, як слід, ssh hostname
працює як очікуване читання, /etc/profile
і те, і інше, scp
і, ssh hostname program
здається, umask 0022
десь жорстко закодовано.
Будь-яке розуміння будь-якого з вищезазначених моментів вітається.
EDIT: Я хотів би уникати патчів, які вимагають вручну компілювати opensh. У системі працює Ubuntu Server 10.04.01 (зрозумілий) LTS з openssh
пакетами від maverick.
Відповідь: Як вказує poige, використання pam_umask зробило трюк.
Точні зміни були:
Рядки додаються до /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Крім того, щоб вплинути на всі оболонки входу, незалежно від того, джерела вони є /etc/profile
чи ні, до них також додавалися ті самі рядки /etc/pam.d/login
.
EDIT : Після деяких коментарів я повторно перевірив це питання.
Принаймні, в Ubuntu (де я тестував) здається, що якщо користувач має інший umask, встановлений у файлах init своїх оболонок (.bashrc, .zshrc, ...), PAM umask ігнорується і замість нього використовується визначений користувачем umask. Зміни /etc/profile
не вплинули на результат, якщо користувач не надав явних джерел цих змін у файлах init.
На даний момент незрозуміло, чи трапляється така поведінка у всіх дистрибутивах.
UsePAM yes
у вас sshd_config?
/etc/profile
. Щось на кшталтalias umask=/bin/true