Я искал способ настроить 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
Ответы:
Я могу предложить попробовать 2 вещи:
источник
sudo
илиsudo su
или тому подобные.Вот решение, которое позволит вам делать то, что вы хотите для каждого пользователя. Он использует только встроенные
sshd
функции и не требует использования локальных исправлений. Это решение использует преимуществаForceCommand
поведения sshd для вставки сценария настройки среды в каждое соединение ssh, а затем запускает оригинальную команду.Сначала создайте скрипт где-нибудь в вашей системе со следующим содержимым:
Для целей этого примера я предполагаю, что вы назвали это
/usr/bin/umask-wrapper
.Теперь у вас есть несколько вариантов настройки. Если вы хотите, чтобы это была обязательная конфигурация для всех пользователей (что выглядит немного маловероятно), вы можете изменить конфигурацию sshd, включив в нее следующее:
Если вы хотите, чтобы это применялось только к некоторым пользователям, вы можете использовать
Match
блок (это идет в конце вашегоsshd_config
):Если вы хотите, чтобы это было управляемое пользователем поведение, то вы можете использовать
command=
опцию вauthorized_key
файле, чтобы выбрать это поведение для определенных ключей. Например, во время тестирования я добавил в свойauthorized_keys
файл запись, которая выглядит примерно так:И вот некоторые результаты моего теста:
Использование
ssh
без команды:Использование
ssh
с командой:Использование
scp
:Использование
sftp
:И там у вас есть это. Я считаю, что это поведение, которое вы искали. Если у вас есть какие-либо вопросы об этом решении, я был бы рад предоставить дополнительную информацию.
источник
command=
действительно опрятная особенность ssh.Я выбрал немного другой подход для централизации настроек.
Это было добавлено к
/etc/pam.d/common-session
:Это было изменено в
/etc/login.defs
:источник
Я получил pam_umask для работы с ssh, но не с scp или sftp.
Метод обертки также ничего не делает для sftp или scp. Я не уверен, что 027 - хороший пример, так как большинство дистрибутивов уже настроили umask на это. Попробуйте с 002 и посмотрите, работает ли это.
источник
Программы, которые не устанавливают собственный umask, наследуют umask приложения, которое его запустило. Полностью остановите sshd, установите umask на 0027, затем запустите его снова. (Вы можете добавить команду umask в сценарий инициализации для будущих перезагрузок.)
Проверено на работу с scp.
источник
umask 0027
(если они читают/etc/profile
), но перезапуск ssh не влияет ни на scp, ни на ssh.Если
pam_umask
кажется, что это не влияет на ваши сеансы SFTP, то проверьте,UsePam
установлено ли значениеYes
в/etc/ssh/sshd_config
файле.Если вы отключили аутентификацию по паролю и
UsePam
были установлены или по умолчаниюNo
. Возможно, вы захотите установитьChallengeResponseAuthentication No
вsshd_config
файле, потому что в противном случае вы можете случайно включить аутентификацию по паролю через эту систему.источник
Добавленная заметка к ответу пользователя 188737 выше:
Это может быть само собой разумеющимся , но если вы не используете пакет openssh-server и вручную скомпилировали OpenSSH, убедитесь, что вы «включили поддержку PAM», передав
--with-pam
флаг конфигурации.В противном случае,
UsePAM=yes
в sshd_config, плюс любые изменения/etc/pam.d/*
будут эффективно игнорироватьсяsshd
.В конце концов меня осенило, почему ни одно из рекомендуемых решений PAM не оказывало никакого влияния на тестирование через неинтерактивные SFTP-соединения ...
источник
Так как umask наследуется от родительского процесса, в системе Slackware, которая использует
/etc/rc.d/rc.sshd
для запуска / остановки / перезапуска sshd, вы можете просто поместитьumask 0027
в строку непосредственно над «sshd_start» или «sshd_restart», или, в качестве альтернативы, в любой точке до Основной раздел исполнения начинается, в/etc/rc.d/rc.sshd
:Или, в качестве альтернативы, вверху файла:
источник
Я только что проверил возможное улучшение параметров larsks sshd_config на солярисе 11
Настройте группу с пользователями, которыми нужно управлять, и переместите сценарий в сам файл конфигурации, в моем случае я хотел установить значение umask 0002.
результирующая конфигурация становится ....
источник
Я боролся с этой проблемой, особенно с правами доступа к файлам после копирования файла с использованием scp , и мне наконец пришло в голову просто использовать ssh для изменения прав доступа после копирования.
Вот решение:
localhost$ scp filename remotehost:umask-test/filename
localhost$ ssh remotehost "chmod go+r umask-test/filename"
Лучше всего то, что для реализации этого решения не нужен root-доступ.
источник