Можно ли запустить sshd как обычный пользователь?

39

Я собираюсь запустить второй sshdэкземпляр на непривилегированном порту (например, 2222) с моим собственным файлом конфигурации.

Очевидно, что sshdпроцесс не может setuidвойти в систему, поскольку другие пользователи, кроме того, кто запускает sshdдемон, явно невозможны.

Однако возможно ли иметь работающего sshdдемона, который будет работать для текущего работающего пользователя? Для моего случая использования это было бы хорошо.

Я попытался загрузить sshdэкземпляр с моим собственным файлом конфигурации и ключом хоста, и sshdпроцесс запускается (никаких жалоб на то, что он не root, как некоторые команды), однако, когда я пытаюсь подключиться к этому порту, sshdпроцесс умирает.

$ /usr/sbin/sshd -dD -h .ssh/id_rsa -p 2222 
debug1: sshd version OpenSSH_5.6p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-dD'
debug1: rexec_argv[2]='-h'
debug1: rexec_argv[3]='.ssh/id_rsa'
debug1: rexec_argv[4]='-p'
debug1: rexec_argv[5]='2222'
debug1: Bind to port 2222 on 0.0.0.0.
Server listening on 0.0.0.0 port 2222.
debug1: Bind to port 2222 on ::.
Server listening on :: port 2222.
debug1: fd 6 clearing O_NONBLOCK
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 6 out 6 newsock 6 pipe -1 sock 9
debug1: inetd sockets after dupping: 5, 5
Connection from ::1 port 57670
debug1: Client protocol version 2.0; client software version OpenSSH_5.6
debug1: match: OpenSSH_5.6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: list_hostkey_types: 
No supported key exchange algorithms
debug1: do_cleanup
debug1: do_cleanup
debug1: audit_event: unhandled event 12

debug1: setgroups() failed: Operation not permittedЛиния явно выпирает, но он не умрет , пока он не пытается принять соединение.

Бо Жанес
источник

Ответы:

35

После небольшого количества копания я понял это.

Начните процесс с того, sshd -f ~/.ssh/sshd_configгде /.ssh/sshd_configнаходится новый файл, который вы создали. Среди других опций (таких как другой ключ хоста, другой порт и т. Д.) Необходимо добавить строку UsePrivilegeSeparation no. Это предотвратит sshdпопытку процесса выполнить какие- setuidлибо setgidвызовы или вызовы и позволит ему продолжать работать как ваш пользователь и принимать подключения как ваш пользователь.

РЕДАКТИРОВАТЬ: Через несколько секунд после выяснения этого кто-то написал мне эту ссылку в Твиттере, которая подтверждает, что это правильный способ сделать это: http://cygwin.com/ml/cygwin/2008-04/msg00363.html

Бо Жанес
источник
1
Вам также нужно отключить PAM, установив UsePamв no.
haridsv
@bjeanes это работает для вас? можешь поделиться своим файлом sshd_config? он жаловался, что «Set» не является действительной командой для меня, когда я пытаюсь использовать Ubuntu.
Jojo
@jojo Я не запускаю эту конфигурацию, поэтому у меня нет файла для обмена. Вам придется начать с известного рабочего файла и настроить его под свои нужды.
Бо Джинс
1
Отключение PAM только для особых случаев. У меня работает на Fedora, не вмешиваясь в настройки pam. Смотрите связанное электронное письмо в ответе, чтобы узнать, что еще нужно изменить, чтобы все было хорошо. Я скоро обновлю свои заметки о том, как я это сделал для докера: hub.docker.com/r/aosqe/ssh-git-server (пожалуйста, подождите пару дней, прежде чем читать)
akostadinov
6

В качестве обновления этого потока OpenSSH в версии 7.5 устарел с помощью опции UsePrivilegeSeparation, что сделало невозможным отключение разделения привилегий. Похоже, что запуск SSHD от имени пользователя теперь невозможен.

См. Https://www.openssh.com/releasenotes.html.

magiclantern
источник
В зависимости от конфигурации сервера, это может быть не так. У меня нет проблем с запуском sshd как обычного пользователя при указании «UsePrivilegeSeparation yes» или «UsePrivilegeSeparation sandbox» в моем конфигурационном файле sshd.
a3nm
Ну, я еще не пробовал, но я думаю, что теперь это "исправлено": "sshd (8): при запуске без привилегий root не требуется существование пользователя или пути разделения привилегий. Упрощает запуск регрессионных тестов не касаясь файловой системы. "
Даниэль Сантос
2

Я подробно проверил возможность запуска службы sshd от имени обычного пользователя. Деталь версии программы:

версия sshd OpenSSH_7.4, OpenSSL 1.0.2k

Наконец, после устранения многих ошибок, я дошел до того, что SSHD прервался со следующей ошибкой:

Попытка записи записей входа в систему пользователем без полномочий root (прерывание)

Я проверил исходный код, чтобы увидеть, возможно ли решить проблему без изменения исходного кода. Смотрите код здесь . Некоторая часть кода вызывает аборт программы:

#ifndef HAVE_CYGWIN
    if (geteuid() != 0) {
        logit("Attempt to write login records by non-root user (aborting)");
        return (1);
    }
#endif

Он проверяет пользовательские привилегии (geteuid() != 0)и здесь вызывает проблему.

Мехрдад Назмар
источник
1

Предполагая, что @magiclantern отметил выше и предполагая, что вы не хотите вносить исправления, sshdбудет работать что-то вроде Dropbear для вас? Он используется во многих встроенных устройствах, которым нужен ssh-сервер с меньшей занимаемой площадью (и меньшим количеством функций / конфигураций).

nhed
источник
1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID # делает трюк
дотбит
1

Вот сценарий пользовательского интерфейса bash, основанный на ответе Бо Джинса:

  • Создать рабочий каталог в доме
  • генерировать ключи сервера в рабочем каталоге
  • создать базовый конфигурационный файл с файлом pid, расположенным в рабочем каталоге
  • запустить демон SSH

mkdir ${HOME}/custom_ssh
ssh-keygen -f ${HOME}/custom_ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -f ${HOME}/custom_ssh/ssh_host_dsa_key -N '' -t dsa
echo "Port 2222
HostKey ${HOME}/custom_ssh/ssh_host_rsa_key
HostKey ${HOME}/custom_ssh/ssh_host_dsa_key
AuthorizedKeysFile  .ssh/authorized_keys
ChallengeResponseAuthentication no
UsePAM yes
Subsystem   sftp    /usr/lib/ssh/sftp-server
PidFile ${HOME}/custom_ssh/sshd.pid" > ${HOME}/custom_ssh/sshd_config
/usr/bin/sshd -f ${HOME}/custom_ssh/sshd_config
echo "
--------
Process ID : ${HOME}/custom_ssh/sshd.pid
-------"
  • OpenSSH_7.9p1, OpenSSL 1.1.1a 20 ноября 2018 г.
  • pam auth (протестировано с тем же локальным и удаленным пользователем)
inattendu
источник
Я все еще вижу: «debug1: setgroups () завершилась неудачно: операция не разрешена»
dotbit
Хорошее решение, но вы должны заставить команды выглядеть лучше. Некрасиво.
MAChitgarha