Я искал способ настроить umask для OpenSSH 0027
согласованным образом для всех типов соединений.
По типам подключения я имею в виду:
- SFTP
- УПП
- имя хоста ssh
- программа ssh hostname
Разница между 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 hostname - здесь нет проблем, поскольку оболочка читает
/etc/profile
по умолчанию, что означаетumask 0027
текущая настройка.Программа ssh hostname - та же ситуация, что и для scp .
В общем, установка umask на sftp
изменяет результат, но не так, как следует, ssh hostname
работает как ожидаемое чтение, /etc/profile
и оба, scp
и, ssh hostname program
кажется, umask 0022
где-то жестко закодированы.
Любое понимание любого из вышеперечисленных пунктов приветствуется.
РЕДАКТИРОВАТЬ: Я хотел бы избежать патчей, которые требуют ручной компиляции openssh. Система работает под управлением Ubuntu Server 10.04.01 (lucid) 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
.
РЕДАКТИРОВАТЬ : После некоторых комментариев я перепроверил эту проблему.
По крайней мере, в Ubuntu (где я тестировал) кажется, что если у пользователя есть другой набор umask в файлах инициализации его оболочки (.bashrc, .zshrc, ...), umask PAM игнорируется и вместо него используется пользовательский umask. Изменения /etc/profile
не повлияли на результат, если пользователь явно не указал эти изменения в файлах инициализации.
Пока неясно, происходит ли такое поведение во всех дистрибутивах.
UsePAM yes
в sshd_config?
/etc/profile
. Нечто подобноеalias umask=/bin/true