PermitRootLogin 是基于 UID 还是用户名?

PermitRootLogin 是基于 UID 还是用户名?

手册页指出PermitRootLogin

指定 root 是否可以使用 登录ssh(1)

但尚不清楚此检查是基于用户名("root")还是 UID(0)。

如果将 root 帐户重命名为 会怎样"admin""admin"什么时候才能登录PermitRootLogin=no

如果有两个 UID=0 的账户,即"root"和,会发生什么情况"admin"?他们中的任何一个都可以登录吗?

答案1

看来检查是在 UID 上完成的(已在 上测试OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

将 PermitRootLogin 关闭:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no

确保admin创建一个名为的用户的 UID 为 0:

mtak@pdv1:~$ sudo grep admin /etc/passwd
admin:x:0:0:Root User:/root:/bin/bash

确保该用户可以用来登录系统:

mtak@pdv1:~$ su - admin
Password: 
root@pdv1:~# 

检查我们是否可以使用 SSH 登录系统:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Permission denied, please try again.

如果我们打开 PermitRootLogin:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes

并尝试登录:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Linux pdv1 4.4.8-1-pve #1 SMP Tue May 17 16:14:08 CEST 2016 x86_64
Last login: Wed Aug 24 12:05:28 2016 from xxx
root@pdv1:~# 

答案2

我很欣赏@mtak 在另一个答案中提出的方法,但即使没有这些尝试,答案也是显而易见的。

它基于UID,正如您在源代码openssh 的:

if (authctxt->pw->pw_uid == 0 &&
            !auth_root_allowed(auth_method))
authenticated = 0;

每种身份验证方法节目就像是

if (pw->pw_uid == 0 && options.permit_root_login != PERMIT_YES)
    ok = 0;

grepstrcmp('root', pw->pw_name)- 在代码中进一步,您可能会注意到,如果这对您来说足够的话,没有或有一些替代方案。

相关内容