/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/synaptic
为gksu -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 代替,一切都很好。