/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/synaptic
をgksu -S /usr/sbin/synaptic
。
man gksuから:
--sudo-mode, -S : gksu がプログラム実行のためのバックエンドとして sudo(1) を使用するように強制します。
これは私が望むことを行うsudoを強制するようです。必要に応じてSynaptic Package Managerが認証します。
答え2
コンテンツが "SU_TO_ROOT_SU="sudo" である "~/.su-to-rootrc" というファイルを作成します。
例:
echo 'SU_TO_ROOT_SU="sudo"'>~/.su-to-rootrc
または、システム全体に/ etcを作成します。このrcファイルを持たないsu-to-rootは常にsuを試みますが、ブロックされたルートアカウントでは機能しません。 rcファイルを生成すると、代わりにsudoを使用し、すべてが正常です。