root 用户锁定时 su-to-root 失败?

root 用户锁定时 su-to-root 失败?

/usr/bin/su-to-root故意锁定 root 帐户后如何使用脚本?

运行 Debian GNU/Linux 6.0.5“squeeze”并注意到菜单项“System > Administration > Synaptic Package Manager”有默认命令:

su-to-root -X -c /usr/sbin/synaptic

即使我提供了正确的 root 密码,它也会失败。

sudo passwd -l root在通过文件 /etc/sudoers 授予普通用户 sudo 访问权限后,我已锁定 root 帐户(通过命令)。

通过su-root男人页面上,我尝试修改命令以使用特定用户:

su-to-root -X -p "user" -c /usr/sbin/synaptic

但这似乎不起作用。

在这两种情况下,在三次身份验证失败后,我都会收到消息:

“在没有管理权限的情况下启动。您将无法应用任何更改。但您仍然可以导出标记的更改或创建下载脚本

有任何想法吗?

脚本痕迹:

k@bucket:/tmp$ bash -x /tmp/su-to-root -X -c /usr/sbin/synaptic
+ test -r /etc/su-to-rootrc
+ test -r /home/k/.su-to-rootrc
+ PRIV=root
+ COMMAND=
+ NEEDS=text
++ which gettext
+ gettext=/usr/bin/gettext
+ for i in '"$@"'
+ case "$prev" in
+ prev=-X
+ for i in '"$@"'
+ case "$prev" in
+ NEEDS=X11
+ prev=-c
+ for i in '"$@"'
+ case "$prev" in
+ COMMAND=/usr/sbin/synaptic
+ prev=/usr/sbin/synaptic
+ '[' -z /usr/sbin/synaptic ']'
++ id -u
+ euid=1000
++ id -u root
+ privid=0
+ test 1000 = 0
+ case $NEEDS in
+ test -z ''
+ which gksu
+ SU_TO_ROOT_X=gksu
+ test X = Xtrue
+ case $SU_TO_ROOT_X in
+ gksu -u root /usr/sbin/synaptic
k@bucket:/tmp$ 

k@bucket:/tmp$ bash -x /tmp/su-to-root -X -p k -c /usr/sbin/synaptic
+ test -r /etc/su-to-rootrc
+ test -r /home/k/.su-to-rootrc
+ PRIV=root
+ COMMAND=
+ NEEDS=text
++ which gettext
+ gettext=/usr/bin/gettext
+ for i in '"$@"'
+ case "$prev" in
+ prev=-X
+ for i in '"$@"'
+ case "$prev" in
+ NEEDS=X11
+ prev=-p
+ for i in '"$@"'
+ case "$prev" in
+ PRIV=k
+ prev=k
+ for i in '"$@"'
+ case "$prev" in
+ prev=-c
+ for i in '"$@"'
+ case "$prev" in
+ COMMAND=/usr/sbin/synaptic
+ prev=/usr/sbin/synaptic
+ '[' -z /usr/sbin/synaptic ']'
++ id -u
+ euid=1000
++ id -u k
+ privid=1000
+ test 1000 = 1000
+ sh -c /usr/sbin/synaptic
k@bucket:/tmp$ 

答案1

看来脚本/usr/bin/su-to-root比较尤伊德su-to-root运行到帐户根(默认)或用户指定帐户的 euid 的用户的:

euid=$(id -u)
privid=$(id -u $PRIV)
if test "$euid" = "$privid"; then
  sh -c "$COMMAND"

如果 euid 匹配,su-to-root 将跳过身份验证并sh -c /usr/sbin/synaptic直接运行命令,跳过 gksu/kdesu/ktsuss/sux/等等。

因此,似乎/usr/bin/su-to-root假设调用用户具有 root 权限并且不进行身份验证……这似乎代表了 Debian 中的一个有效假设。

作为解决方法,我将 Debian 菜单项命令从 更改su-to-root -X -p "user" -c /usr/sbin/synapticgksu -S /usr/sbin/synaptic

来自 man gksu:

--sudo-mode, -S :强制 gksu 使用 sudo(1) 作为运行程序的后端。

这似乎强制sudo,它代表了我想要的。如果需要,Synaptic Package Manager 会进行身份验证。

答案2

创建一个名为“~/.su-to-rootrc”的文件,其内容为“SU_TO_ROOT_SU=”sudo”。

例子:

echo 'SU_TO_ROOT_SU="sudo"'>~/.su-to-rootrc

或者在系统范围内创建它 /etc。没有此 rc 文件的 su-to-root 始终会尝试 su,这不适用于被阻止的 root 帐户。如果您创建 rc 文件,它会使用 sudo 代替,一切都很好。

相关内容