可以以普通用户身份运行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线显然伸出,但直到尝试接受连接后它才消失。

Answers:


35

经过一番挖掘,我发现了。

从创建新文件的sshd -f ~/.ssh/sshd_config位置开始该过程/.ssh/sshd_config。在其他选项(例如不同的主机密钥,不同的端口等)中,您需要添加line UsePrivilegeSeparation no。这将阻止该sshd进程尝试执行任何操作setuidsetgid呼叫,并使其继续以您的用户身份运行并接受用户的连接。

编辑:弄清楚了几分钟后,其他人在推特上将此链接发送给我,确认这是执行此操作的正确方法:http : //cygwin.com/ml/cygwin/2008-04/msg00363.html


1
您还需要通过将设置UsePam为来禁用PAM no
haridsv 2015年

@bjeanes对您有用吗?可以共享sshd_config文件吗?当我尝试使用ubuntu时,它抱怨“ Set”对我不是有效命令。
jojo

@jojo我没有运行此配置,所以没有文件可共享。您将必须从已知的工作文件开始并适应您的需求。
Bo Jeanes

1
禁用PAM的功能仅适用于特定情况。在Fedora上为我工作,而不会弄乱pam设置。请参阅答案中的链接电子邮件,以获取更多想法,还需要进行哪些更改才能使一切变得更好。我将尽快更新我的注释,以了解如何使其适用于dockerhub.docker.com/r/aosqe/ssh-git-server(请花几天时间阅读)
akostadinov

6

作为对此线程的更新,版本7.5中的OpenSSH已弃用UsePrivilegeSeparation选项,从而无法禁用特权分离。看来现在不可能以用户身份运行SSHD。

参见https://www.openssh.com/releasenotes.html


取决于服务器配置,情况可能并非如此。在我的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服务器占用资源少(功能/配置更少)的ssh服务器的嵌入式设备中。


1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID#发挥作用
dotbit

1

这是一个基于Bo Jeanes答案的userland 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 2018年11月20日
  • pam auth(使用相同的本地和远程用户进行了测试)

我仍然看到:“ debug1:setgroups()失败:不允许操作”
dotbit

好的解决方案,但是您应该使命令看起来更好。丑陋。
MAChitgarha
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.