Программы, которые не устанавливают их собственный umask, наследовали umask приложения, которое запустило его. Остановите sshd полностью, установите Ваш umask на 0027, затем запустите его снова. (Можно добавить команду umask в init сценарии для будущих перезагрузок.)
Протестированный для работы с scp.
Вот решение, которое позволит Вам сделать то, что Вы хотите на основе в расчете на пользователя. Это использует только собственный компонент sshd
функции и не требуют слоняния без дела с локально сохраняемыми патчами. Это решение использует в своих интересах ForceCommand
поведение sshd, чтобы вставить сценарий установки среды в каждое соединение SSH и затем выполнить исходную команду.
Во-первых, создайте сценарий где-нибудь в Вашей системе со следующим содержанием:
#!/bin/sh
umask 0027
exec /bin/sh -c "${SSH_ORIGINAL_COMMAND:-$SHELL}"
В целях этого примера я предположу, что Вы назвали это /usr/bin/umask-wrapper
.
Теперь, у Вас есть несколько опций в установке этого. Если Вы хотите, чтобы это было обязательной конфигурацией для всех пользователей (который кажется немногим вряд ли), можно изменить sshd конфигурацию для включения следующего:
ForceCommand /usr/bin/umask-wrapper
Если Вы только хотите, чтобы это относилось к некоторым пользователям, можно использовать a Match
блок (это идет в конце Вашего sshd_config
):
Match User user1,user2
ForceCommand /usr/bin/umask-wrapper
Если Вы хотите, чтобы это было управляемым пользователем поведением, то можно использовать command=
опция в authorized_key
файл для выбора этого поведения для определенных ключей. Например, при проверении этого я добавил запись в мой authorized_keys
файл, который выглядит примерно так:
command="/home/lars/bin/umask-wrapper" ssh-rsa AAAAB3NzaC1 ... umask-test
И вот некоторые результаты моего теста:
Используя ssh
без команды:
localhost$ ssh remotehost
remotehost$ touch umask-test/file1
remotehost$ ls -l umask-test/file1
-rw-r-----. 1 lars lars 0 Feb 2 06:02 file1
Используя ssh
с командой:
localhost$ ssh remotehost touch umask-test/file2
localhost$ ssh remotehost ls -l umask-test/file2
-rw-r-----. 1 lars lars 0 Feb 2 06:03 file2
Используя scp
:
localhost$ touch file3
localhost$ ls -l file3
-rw-r--r-- 1 lars staff 0 Feb 2 06:03 file3
localhost$ scp file3 remotehost:umask-test/file3
localhost$ ssh remotehost ls -l umask-test/file3
-rw-r-----. 1 lars lars 0 Feb 2 06:03 file3
Используя sftp
:
localhost$ sftp remotehost
sftp> put file3 umask-test/file4
sftp> ls -l umask-test/file4
-rw-r----- 0 500 500 0 Feb 2 06:05 umask-test/file4
И там у Вас есть он. Я полагаю, что это - поведение, которое Вы искали. Если бы у Вас есть какие-либо вопросы об этом решении, я был бы рад предоставить дополнительную подробную информацию.
Я получил pam_umask для работы с ssh, но не с scp или sftp.
Метод-оболочка также ничего не делает для sftp или scp. Я не уверен, что 027 - хороший пример, так как в большинстве дистрибутивов umask уже установлен на это. Попробуйте указать 002 и посмотрите, работает ли это.
Я использовал несколько иной подход к централизации настроек.
Это было добавлено в /etc/pam.d/common-session
:
session optional pam_umask.so
Это было изменено в /etc/login.defs
:
UMASK 0027
Если pam_umask
, похоже, не влияет на ваши сеансы SFTP, проверьте, установлено ли для UsePam
значение Да
в / etc / ssh / sshd_config
файл.
Если вы отключили аутентификацию по паролю и для параметра UsePam
было установлено или по умолчанию установлено значение Нет
. Вы можете указать ChallengeResponseAuthentication №
в файле sshd_config
, поскольку в противном случае вы можете случайно включить аутентификацию по паролю через эту систему.
Я только что протестировал возможное улучшение параметров larsks sshd_config в solaris 11
Настройте группу с пользователями, которыми нужно управлять, и переместите сценарий в сам файл конфигурации, в моем случае я хотел установить umask равным 0002.
результирующая конфигурация становится ....
Match Group managedgroup
ForceCommand /bin/sh -c 'umask 0002; ${SSH_ORIGINAL_COMMAND:-$SHELL}'
Добавлена заметка к ответу user188737, приведённому выше:
Это может быть само собой разумеющимся, но если вы не используете пакет openssh-server, и скомпилировали OpenSSH вручную , убедитесь, что вы "Включили поддержку PAM", передав флаг конфигурации --with-pam
.
В противном случае, UsePAM=yes
в sshd_config, плюс любые изменения в /etc/pam.d/*
будут эффективно проигнорированы sshd
.
Наконец, меня осенило, почему ни одно из рекомендуемых решений PAM не влияет на тестирование через неинтерактивные SFTP соединения...
.Я боролся с этой проблемой, особенно с разрешениями файлов после копирования файла с помощью scp , и, наконец, мне пришло в голову просто использовать ssh для изменения разрешений после копия.
Вот решение:
localhost $ scp filename remotehost: umask-test / filename
localhost $ ssh remotehost "chmod go + r umask-test / filename "
Лучше всего то, что для применения этого решения не требуется root-доступ.
Поскольку umask наследуется от родительского процесса, в системе Slackware, которая использует /etc/rc.d/rc.sshd
для запуска / остановки / перезапуска sshd, вы можно просто разместить umask 0027
в отдельной строке непосредственно над «sshd_start» или «sshd_restart», или, альтернативно, в любой момент до начала основной секции выполнения, в /etc/rc.d/ rc.sshd
:
case "$1" in
'start')
umask 0027
sshd_start
;;
'stop')
sshd_stop
;;
'restart')
umask 0027
sshd_restart
;;
*)
Или, альтернативно, вверху файла:
#!/bin/sh
# Start/stop/restart the secure shell server:
umask 0027