sudo

Linux UNIXの自分のアカウントでsudoが使えるかどうかは、

[oreore@marina ~]$ sudo :

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

[sudo] oreore のパスワード:

[oreore@marina ~]$ echo $?
124

このように、 /etc/sudoers の Defaults timestamp_timeout の値(分)を超えるまで待つか、何かしらのコマンドを実行して返り値を求めればよいです。が、自動実行しているスクリプトでこれをやろうとすると、

  • bashの内部コマンドなどで返り値がうまく取れない
  • sudoのパスワード待ち(対話コマンド)で待たされる

という問題を解決したくなるのが人情ってなもの。プログラムの中で自身のアカウントがNOPASSWDでsudoできるかどうかのチェックロジックを入れたいときに、このようなちょい面倒なハードルを超えなければならないのです。大きく面倒というわけじゃないですけど。

/etc/sudoers を短く編集するという手もあるじゃないかという声も聞こえてきますけど、それだと手オペでsudoするときの利便性が損なわれてしまいかねないので、システム全体の利便性を損ねずにプログラムの中だけで解決したいですよね?

…続きを読む

シェルスクリプトの自動運転でsudoを使うには、NOPASSWDで、かつ !requiretty な設定をすればよいのだが、うっかりsudoできないユーザーでこれを実行してしまった場合、いつまでもパスワードの入力待ちで止まってしまう。これに気付かず後続処理が走ってしまうのは怖いのだが、 /etc/sudoers.d/ユーザー名 のファイルをgrepして判断しようにもsudoを使わないといけない(rootで実行すればよいとか言わないで><)。

そこでぽぽは考えましたよ。「(ぴこーん!) 最初にsudoで何かしらの無害なコマンドを叩かせて終了ステータスを捕まえればええんやぁ!」

というわけでこんな処理をスクリプトの最初に仕込んでやればよい。

…続きを読む