當 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 帳戶(通過 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/synaptic
為gksu -S /usr/sbin/synaptic
.來自 man gksu:
–sudo-mode, -S :強制 gksu 使用 sudo(1) 作為執行程序的後端。
這似乎強制sudo,它代表了我想要的。如果需要,Synaptic 包管理器會進行身份驗證。