rootユーザーがロックされているとsu-to-rootは失敗しますか?

rootユーザーがロックされているとsu-to-rootは失敗しますか?

/usr/bin/su-to-root意図的にルートアカウントをロックした後にスクリプトを使用する方法は?

Debian GNU/Linux 6.0.5 "squeeze" を実行すると、「システム > 管理 > シナプティックパッケージマネージャ」メニュー項目に基本コマンドがあることがわかりました。

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

正しいルートパスワードを提供しても失敗します。

sudo passwd -l root/etc/sudoersファイルを介して一般ユーザーにsudoアクセスを許可した後、コマンドを介してrootアカウントをロックしました。

su-root経由男性ページで特定のユーザーを使用するようにコマンドを変更してみました。

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

しかし、これはうまくいかないようです。

どちらの場合も、3 回の認証失敗後に次のメッセージが表示されます。

「管理者権限なしで実行してください。変更を適用できません。ただし、表示された変更をエクスポートしたり、ダウンロードスクリプトを生成したりすることはできます。

どんなアイデアがありますか?

スクリプト追跡:

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比較されるようです。UIDsu-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/etc をスキップし、コマンドを直接実行します。

したがって、呼び出すユーザーはroot権限を持ち、認証されていないと仮定しているようです/usr/bin/su-to-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が認証します。

おすすめ記事