パスワードを要求せずにルートで特定のプログラムをどのように実行できますか?

パスワードを要求せずにルートで特定のプログラムをどのように実行できますか?

パスワードなしでsudoで何かを実行する必要があるので、visudoこれを使用してsudoersファイルに次のものを追加しました。

MYUSERNAME ALL = NOPASSWD: /path/to/my/program

それからこれを試しました。

$ sudo /path/to/my/program
[sudo] password for MYUSERNAME: 

パスワードを尋ねるのはなぜですか?パスワードを要求せずにroot以外のユーザーとしてrootとしてコマンドを実行/使用するにはどうすればよいですか?

答え1

sudo に一致する項目が複数ある場合、/etc/sudoers最後の項目が使用されます。したがって、パスワードプロンプトを持つコマンドを実行し、パスワードプロンプトなしで特定のコマンドを実行できるようにするには、最後に例外が必要です。

myusername ALL = (ALL) ALL
myusername ALL = (root) NOPASSWD: /path/to/my/program

を使用すると、(root)プログラムをrootとして実行できますが、他のユーザーとしては実行できません。 (影響を考慮しない限り、必要最小限の権限よりも多くの権限を付与しないでください。)

Ubuntuを実行していない場合、またはデフォルトのsudo設定を変更した読者は注意してください(Ubuntuのsudoはデフォルトでは問題ありません)。: 高い権限でシェルスクリプトを実行するのは危険です。クリーンな環境で起動する必要があります(シェルが起動すると遅すぎます(参照)。シェルスクリプトでsetuid設定を許可する)、したがってこれを処理するにはsudoが必要です。このオプションDefaults env_reset/etc/sudoersコンパイル時のデフォルト値であることを確認してください(sudo sudo -V | grep env含める必要がありますReset the environment to a default set of variables)。

答え2

他の項目があります。sudoersファイルは通常にあり、/etc/sudoersユーザーとも一致します。このNOPASSWDルールが優先される場合は、このルールの後に続く必要があります。

これを完了すると、通常、パスワードを要求せずに実行できるコマンドをsudo除くすべてのコマンドに対してパスワードの入力を求められます。/path/to/my/program

答え3

警告する:この回答は安全ではないと見なされます。以下のコメントを参照してください

完璧なソリューション:次のステップは、目的の結果を得るのに役立ちます。

  1. 新しいスクリプトファイルを作成します(create_dir.sh目的のスクリプト名に置き換えます)。

    vim ~/create_dir.sh
    

    スクリプトはユーザーのホームディレクトリに作成されます。

  2. rootsudoルートレベルでフォルダを作成するなど、ユーザーだけが実行できるいくつかのコマンドを追加します。

    mkdir /abc
    

    メモ:sudoこのコマンドに追加しないでください。保存して終了します(使用:wq!

  3. 次のコマンドを使用して実行権限を割り当てます。

    sudo chmod u+x create_dir.sh
    
  4. スクリプトにパスワードが必要ないように変更します。

    1. sudoersファイルを開きます。

      sudo visudo -f /etc/sudoers
      
    2. 最後に次の行を追加します。

      ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
      

      ahmadユーザー名に変更してください。また、これが最後の行であることを確認してください。保存と終了。

  5. ここで、コマンドを実行するときにsudoコマンドの前に次を追加します。

    sudo ./create_dir.sh
    

    これにより、パスワードを要求せずにスクリプトファイル内でコマンドが実行されます。

ここに記載されている簡単な手順に従ってください。http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/

答え4

あなたの構文が間違っているようです。少なくとも私は私に合った以下を使用します。

myusername ALL=(ALL) NOPASSWD: /path/to/executable

関連情報