環境
Ubuntu20.4
はじめに
Rubyで作成したスクリプトファイルをroot権限で実行しているのだが、毎回、rootのパスワードが聞かれてきます。毎回、パスワードを入力するのが面倒なため、sudoersファイルを編集してパスワードが聞いてこられないようにしました。
sudoersの設定
sudoersはsudoをつけてroot権限でコマンドを実行するときに参照される設定ファイルです。sudoersで設定されていなユーザーは、sudoをつけてコマンドを実行することはできません。
sudoersのデフォルトはつぎの設定になっています。
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
デフォルトの設定のままであれば、adminグループとsudoグループに含まれるユーザーは、すべてのコマンドに対してsudoをつけて実行することができます。デフォルトの設定に一般ユーザーは1つも登録されていません。
新規ユーザーを登録して、そのユーザーでsudoをつけてコマンドを実行したい場合、新規ユーザーを、既存のadminグループ、もしくは、sudoグループに含めると、sudoersファイルを汚さずに実行することができます。
新規ユーザーをadminグループ、sudoグループに含めない場合は、新規ユーザー用の設定をsudoersファイルに単独で記述することになります。
sudoersファイルは編集すれば即有効になります。何かのサービスを再起動しないと有効にならないとか、OSを再起動しないと有効にならないといったことはありません。
sudoersの設定例
下記の設定は、user1ユーザーがsudoをつけてcpコマンドを実行するときは、rootのパスワードを聞いてこなくする設定です。設定個所の(root)の記述は、(ALL)にしても、(ALL:ALL)にしてもいいでしょう。あまりこだわる個所ではありません。
user1 ALL=(root) NOPASSWD: /bin/cp
user1ユーザーがhogeユーザーとして実行するときに限り、rootのパスワードを聞いてこなくする場合は、(hoge)の記述にします。このような使い方はよほど特殊な使い方だとは思います。
user1 ALL=(hoge) NOPASSWD: /bin/cp
user1ユーザーがデフォルトで設定されている、sudoグループの中に含まれていても、上記の設定は有効になります。cpコマンドだけがパスワードフリートとなり、cpコマンド以外のコマンドの場合はパスワードを聞いてきいてこられます。