Ubuntu でパスワードなしで特定の Sudo コマンドを実行する方法は?


パスワードsudo

ある特定のマシンで、時々 sudo 個のコマンドを実行する必要があります.
ほとんどの場合、sudo にパスワードを入力しても問題ありません.

ただし、パスワードを入力せずに実行したい sudo コマンドが 3 つあります.
  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

  • これらのコマンドをパスワード保護から sudo に除外するにはどうすればよいですか?

    受け入れられた回答


    NOPASSWD ディレクティブを使用する



    NOPASSWD file/etc/sudoers ディレクティブを使用できます.

    ユーザーの名前が user で、ホストの名前が host の場合、次の行を /etc/sudoers に追加できます.

    user host = (root) NOPASSWD: /sbin/shutdown
    user host = (root) NOPASSWD: /sbin/reboot
    
    


    これにより、ユーザー user は、パスワードを入力せずに host で目的のコマンドを実行できます.他のすべての sudo ed コマンドには、引き続きパスワードが必要です.
    sudoers ファイルで指定されたコマンドは、 sudoers man page で説明されているように、完全に修飾されている (つまり、実行するコマンドへの絶対パスを使用している) 必要があります.相対パスを指定すると、構文エラーと見なされます.

    コマンドが末尾の / 文字で終わり、ディレクトリを指している場合、ユーザーはそのディレクトリ内の任意のコマンドを実行できます (ただし、そのディレクトリ内のサブディレクトリ内では実行できません).次の例では、ユーザー user は、ディレクトリ /home/someuser/bin/ 内の任意のコマンドを実行できます.

    user host = (root) NOPASSWD: /home/someuser/bin/
    
    


    注: visudo ファイルを編集するには、常にコマンド sudoers を使用して、システムからロックアウトされないようにしてください.誤って sudoers ファイルに間違った内容を書き込んでしまった場合に備えてください. visudo は、変更されたファイルを一時的な場所に保存し、変更されたファイルがエラーなしで解析できる場合にのみ、実際の sudoers ファイルを上書きします.

    /etc/sudoers を変更する代わりに /etc/sudoers.d を使用する


    /etc/sudoers ファイルを編集する代わりに、/etc/sudoers.d の新しいファイルに 2 行を追加することもできます. /etc/sudoers.d/shutdown.これは、sudo の権利に対するさまざまな変更を分離する洗練された方法であり、元の sudoers ファイルはそのままにして、アップグレードを容易にします.

    注: ここでも、コマンド visudo を使用してファイルを編集し、システムからロックアウトされないようにする必要があります.

    sudo visudo -f /etc/sudoers.d/shutdown 
    
    


    これにより、新しいファイルの所有者と権限が正しく設定されていることも自動的に確認されます.

    sudoers がめちゃくちゃな場合


    visudo を使用してファイルを編集せずに、誤って /etc/sudoers を台無しにしたり、 /etc/sudoers.d 内のファイルを台無しにした場合、 sudo からロックアウトされます.

    解決策は、 pkexec の代替である sudo を使用してファイルを修正することです.
    /etc/sudoers を修正するには:

    pkexec visudo
    
    

    /etc/sudoers.d/shutdown を修正するには:

    pkexec visudo -f /etc/sudoers.d/shutdown
    
    

    sudoers ファイルの所有権やアクセス許可が正しくない場合、そのファイルは sudo によって無視されるため、この状況でロックアウトされることもあります.繰り返しますが、これを修正するには pkexec を使用できます.

    正しいアクセス許可は次のようになります.

    $ ls -l /etc/sudoers.d/shutdown 
    -r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown
    
    


    ownership and permissions を修正するには、次のように pkexec を使用します.

    pkexec chown root:root /etc/sudoers.d/shutdown
    pkexec chmod 0440 /etc/sudoers.d/shutdown
    
    


    投稿 How to Run Specific Sudo Commands Without a Password in Ubuntu?Stack All Flow に最初に表示されました.