无需密码的 `sudo`、`gksu` 和 `gksudo`

无需密码的 `sudo`、`gksu` 和 `gksudo`

Fedora,我很惊讶,如果我的管理员帐户没有密码,sudogksu并且gksudo不会提示我输入密码!(这不是由 引起的/etc/sudoers)。在 Ubuntu 中,他们会要求我输入密码,如果我输入的是空密码,他们就不会让我通过。

  1. Fedora 是如何做到这一点的?(Fedora 中哪些技术设计细节导致了这种行为?)
  2. 我怎样才能让 Ubuntu 表现得像这样?(如何配置 Ubuntu 使其在这方面表现得像 Fedora?)

类似的问题之前已经问过很多次了,但他们只提到了sudo和 ,没有提到gksugksudo也没有提到任何其他图形工具。此外, 和 都不需要sudo -i编辑;这是 Fedora 的默认行为。/etc/sudoers

当然,这可能是不建议,我问这个问题只是为了进一步了解 Linux 的工作原理。

答案1

首先,关于所涉及的安全系统的说明:sudogksudo由 管理sudoers,但大部分 GUI 使用波尔基特,其配置与 无关sudoers。没有太多共同因素:

  1. Ubuntu 使用该sudo组在两个系统中授予管理权限。
  2. 均支持聚丙烯酰胺,因此 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_unixnullokman 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-authnullok

sudo sed -i.bak '/pam_unix/s/nullok_secure/nullok' /etc/pam.d/common-auth

相关内容