手册页指出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;
grep
strcmp('root', pw->pw_name)
- 在代码中进一步,您可能会注意到,如果这对您来说足够的话,没有或有一些替代方案。