Debian

當 root 使用者鎖定時,su-to-root 失敗?

  • September 8, 2019

/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 帳戶(通過 command )。

通過 su-to-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$ 

創建一個名為 ‘~/.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 代替,一切都很好。

似乎腳本/usr/bin/su-to-root將執行使用者的euidsu-to-root與帳戶 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 包管理器會進行身份驗證。

引用自:https://unix.stackexchange.com/questions/47665