bashスクリプトで一連のコマンドを実行するためにsudoを再利用する方法

bashスクリプトで一連のコマンドを実行するためにsudoを再利用する方法

さまざまなポートアクティビティを監視するために実行中の複数の端末ウィンドウを開くスクリプトがありますiftop

開いているすべての端末にはsudoパスワードを入力する必要があります。合計5つの端末があることを考えると、少し痛いです。

だから私の質問は、sudoパスワードを一度入力し、すべてのウィンドウにパスワードを入力するのではなく、その権限ですべてのウィンドウを実行するにはどうすればよいですか?

#!/bin/bash

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 22\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 33 or port 44\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"(port 55) or (port 66)\""' --hide-menubar --zoom=0.85 

スクリプト全体を実行してみたsudoところ、開いているすべての端末もsudo端末になりました。私にとって必要なのは、通常の端末を実行することですsudo iftop

ベストアンサー1

場所または設定はまたはtimestamp_type?マニュアルページによると、デフォルトは次のとおりです。/etc/sudoers/etc/sudoers.d/*ttyppidttysudo

タイムスタンプの種類-sudoers資格情報のキャッシュにはユーザー固有のタイムスタンプファイルを使用します。このtimestamp_typeオプションを使用して、使用されるタイムスタンプレコードの種類を指定できます。可能な値は次のとおりです。

global端末または親プロセスIDに関係なく、ユーザーのすべてのログインセッションに単一のタイムスタンプレコードが使用されます。追加レコードは、パイプラインで複数回使用されたときにパスワードプロンプトをシリアル化するために使用されますが、 sudoこれは認証には影響しません。

ppid単一のタイムスタンプレコードは、同じ親プロセスID(通常はシェル)を持つすべてのプロセスに使用されます。同じシェル(または他の共通の親プロセス)で実行されるコマンドには数分間パスワードは必要ありませんtimestamp_timeout(デフォルトは15分)。他の親プロセスID(シェルスクリプトなど)を使用してsudoを介して実行されるコマンドは、別々に認証されます。

tty各エンドポイントはタイムスタンプレコードを使用します。これは、ユーザーのログインセッションが独立して認証されることを意味します。端末がない場合、動作はppidと同じです。同じ端末で実行されるコマンドには数分間パスワードは必要ありません timestamp_timeout(デフォルトは15分)。

デフォルト値はですtty

この設定はバージョン 1.8.21 以降でのみサポートされます。

その場合はいttyまたはに設定すると、ppid毎回パスワードを要求する理由が説明されます。実行中の各コマンドは別々のttysudoで実行されます。gnome-terminalそして親PIDが異なります。

global必要なことを行う唯一の設定のように見えます。


これが役に立たない場合、あなたのtimestamp_timeout設定は何ですか?に設定されています0か?デフォルトは15分でなければなりません。

他のtimestamp*設定(timestampdir、、timestampowner)も確認してください。もしtimestampdir(私のDebian sidシステムのデフォルトは/実行/sudo/ts)が存在しないか、rwXではありませんtimestampowner(デフォルト))。

sudo説明的なエラーメッセージはsyslogを介して記録されます。そしてこれらの設定でエラーが発生した場合は、管理者(root)に電子メールを送信してください。


/etc/sudoers別のオプションは、ユーザーがiftopパスワードを入力しなくても実行できるように編集することです。例えば

yourusernamehere ALL= NOPASSWD: /usr/sbin/iftop

バラよりパスワードを要求せずにルートで特定のプログラムをどのように実行できますか?これについての詳細は次のとおりです。

おすすめ記事