Как установить umask ssh для всего типа соединений

Удостоверьтесь, что нет двух экземпляров выполнения крона. Следующая команда должна только произвести один pid.

pgrep -l cron
34
задан 13 April 2017 в 15:14
10 ответов

Я могу предложить пробовать 2 вещи:

  1. pam_umask
  2. Обертка LD_PRELOAD (самозаписанный?)
22
ответ дан 28 November 2019 в 19:53

Программы, которые не устанавливают их собственный umask, наследовали umask приложения, которое запустило его. Остановите sshd полностью, установите Ваш umask на 0027, затем запустите его снова. (Можно добавить команду umask в init сценарии для будущих перезагрузок.)

Протестированный для работы с scp.

1
ответ дан 28 November 2019 в 19:53

Вот решение, которое позволит Вам сделать то, что Вы хотите на основе в расчете на пользователя. Это использует только собственный компонент 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

И там у Вас есть он. Я полагаю, что это - поведение, которое Вы искали. Если бы у Вас есть какие-либо вопросы об этом решении, я был бы рад предоставить дополнительную подробную информацию.

13
ответ дан 28 November 2019 в 19:53

Я получил pam_umask для работы с ssh, но не с scp или sftp.

Метод-оболочка также ничего не делает для sftp или scp. Я не уверен, что 027 - хороший пример, так как в большинстве дистрибутивов umask уже установлен на это. Попробуйте указать 002 и посмотрите, работает ли это.

2
ответ дан 28 November 2019 в 19:53

Я использовал несколько иной подход к централизации настроек.

Это было добавлено в /etc/pam.d/common-session :

session    optional     pam_umask.so

Это было изменено в /etc/login.defs :

UMASK           0027
5
ответ дан 28 November 2019 в 19:53

Если pam_umask , похоже, не влияет на ваши сеансы SFTP, проверьте, установлено ли для UsePam значение Да в / etc / ssh / sshd_config файл.

Если вы отключили аутентификацию по паролю и для параметра UsePam было установлено или по умолчанию установлено значение Нет . Вы можете указать ChallengeResponseAuthentication № в файле sshd_config , поскольку в противном случае вы можете случайно включить аутентификацию по паролю через эту систему.

1
ответ дан 28 November 2019 в 19:53

Я только что протестировал возможное улучшение параметров larsks sshd_config в solaris 11

Настройте группу с пользователями, которыми нужно управлять, и переместите сценарий в сам файл конфигурации, в моем случае я хотел установить umask равным 0002.

результирующая конфигурация становится ....

Match Group managedgroup
ForceCommand /bin/sh -c 'umask 0002; ${SSH_ORIGINAL_COMMAND:-$SHELL}'
0
ответ дан 28 November 2019 в 19:53

Добавлена заметка к ответу user188737, приведённому выше:

Это может быть само собой разумеющимся, но если вы не используете пакет openssh-server, и скомпилировали OpenSSH вручную , убедитесь, что вы "Включили поддержку PAM", передав флаг конфигурации --with-pam.

В противном случае, UsePAM=yes в sshd_config, плюс любые изменения в /etc/pam.d/* будут эффективно проигнорированы sshd.

Наконец, меня осенило, почему ни одно из рекомендуемых решений PAM не влияет на тестирование через неинтерактивные SFTP соединения...

.
1
ответ дан 28 November 2019 в 19:53

Я боролся с этой проблемой, особенно с разрешениями файлов после копирования файла с помощью scp , и, наконец, мне пришло в голову просто использовать ssh для изменения разрешений после копия.

Вот решение:

  1. Скопируйте свой файл: localhost $ scp filename remotehost: umask-test / filename
  2. Разрешение на исправление: localhost $ ssh remotehost "chmod go + r umask-test / filename "

Лучше всего то, что для применения этого решения не требуется root-доступ.

0
ответ дан 28 November 2019 в 19:53

Поскольку 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
1
ответ дан 28 November 2019 в 19:53

Теги

Похожие вопросы