在Fedora,我很惊讶,如果我的管理员帐户没有密码,sudo
,gksu
并且gksudo
不会提示我输入密码!(这不是由 引起的/etc/sudoers
)。在 Ubuntu 中,他们会要求我输入密码,如果我输入的是空密码,他们就不会让我通过。
- Fedora 是如何做到这一点的?(Fedora 中哪些技术设计细节导致了这种行为?)
- 我怎样才能让 Ubuntu 表现得像这样?(如何配置 Ubuntu 使其在这方面表现得像 Fedora?)
类似的问题之前已经问过很多次了,但他们只提到了sudo
和 ,没有提到gksu
,gksudo
也没有提到任何其他图形工具。此外, 和 都不需要sudo -i
编辑;这是 Fedora 的默认行为。/etc/sudoers
当然,这可能是不建议,我问这个问题只是为了进一步了解 Linux 的工作原理。
答案1
首先,关于所涉及的安全系统的说明:sudo
和gksudo
由 管理sudoers
,但大部分 GUI 使用波尔基特,其配置与 无关sudoers
。没有太多共同因素:
- Ubuntu 使用该
sudo
组在两个系统中授予管理权限。 - 均支持聚丙烯酰胺,因此 PAM 配置可以影响两者。
具体来说,Fedora 的默认 PAM 配置具有:
$ grep 'auth.*pam_unix' /etc/pam.d -R
/etc/pam.d/password-auth-ac:auth sufficient pam_unix.so nullok try_first_pass
/etc/pam.d/system-auth-ac:auth sufficient pam_unix.so nullok try_first_pass
/etc/pam.d/system-auth:auth sufficient pam_unix.so nullok try_first_pass
/etc/pam.d/vmtoolsd:auth sufficient pam_unix2.so nullok
/etc/pam.d/vmtoolsd:auth sufficient pam_unix.so shadow nullok
/etc/pam.d/vmtoolsd:auth required pam_unix_auth.so shadow nullok
/etc/pam.d/password-auth:auth sufficient pam_unix.so nullok try_first_pass
对比Ubuntu:
$ grep 'auth.*pam_unix' /etc/pam.d -R
/etc/pam.d/common-account:account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
/etc/pam.d/common-auth:auth [success=2 default=ignore] pam_unix.so nullok_secure
重点是针对 Ubuntu 和Fedoranullok_secure
进行设置。根据pam_unix
nullok
man pam_unix
:
nullok
The default action of this module is to not permit the user access
to a service if their official password is blank. The nullok
argument overrides this default and allows any user with a blank
password to access the service.
nullok_secure
The default action of this module is to not permit the user access
to a service if their official password is blank. The nullok_secure
argument overrides this default and allows any user with a blank
password to access the service as long as the value of PAM_TTY is
set to one of the values found in /etc/securetty.
现在,/etc/securetty
包含:0
和其他图形会话的命令值,例如gksudo
,将要使用空密码。
# Local X displays (allows empty passwords with pam_unix's nullok_secure)
:0
:0.0
:0.1
:1
:1.0
:1.1
:2
:2.0
:2.1
:3
:3.0
:3.1
#...
另一方面,Polkit 似乎未PAM_TTY
设置,因此securetty
不影响它。sudo
当然,不会起作用,因为您总是sudo
从终端运行,并且分配给它的伪终端(/dev/ptsX
)不会在中提及/etc/securetty
。 但是,您可以sudo
在 TTY 中使用。
那么我们如何让 Ubuntu 像 Fedora 一样呢?只需将其nullok_secure
更改common-auth
为nullok
:
sudo sed -i.bak '/pam_unix/s/nullok_secure/nullok' /etc/pam.d/common-auth