環境
Ubuntu20.4
はじめに
root権限でないと実行できないコマンド、編集できないファイルがある場合、コマンドの先頭にsudoをつけて、root権限で実行することがよくあります。長らく、sudoはroot権限で実行できるようにするための専用コマンドだと思っていました。自分の場合、ほぼ、よのような用途でしか利用することがないため、その解釈で完全に間違っているわけではありません。しかし、root権限に限定してしか使えないといったことはありません。例えば、test1ユーザーでログインしていて、test2ユーザーとしてコマンドを実行したい場合も、sudoを使って実行することができます。別ユーザーとしてログインする場合は、suコマンドを使うことが多いかも分かりませんが、sudoを使うこともできます。sudoを使えば、ワンライナーで、コマンドが実行ができるといったメリットがあります。
sudoersについて
sudoの設定を記述するファイルが、/etc/sudoersです。このファイルをエディタで編集する場合は、普通のエディタを使うのではなく、visudorといった、/etc/sudoers編集用の専用エディタを使います。viでも編集することはできますが、viの使用は推奨されていません。/etc/sudoersにはroot権限の実行に関する重要な設定が記述されています。重要なファイルであるため、編集機能が強化されています。visudorには文法チェック機能があり、/etc/sudoersに文法的な誤りがあると、更新ができないようになっています。
/etc/sudoersを直接にはあまり触りたくない場合は、/etc/sudoers.dの中に任意のファイルを作成して、/etc/sudoersの中に、つぎの1行を追加して、読み込むといった使い方もあります。こちらの方が一般的な使い方だと思います。
includedir /etc/sudoers.d
sudoersの書き方
/etc/sudoersの中につぎの記述があります。この記述で、rootはどのユーザーでもログインができ、どのコマンドでも実行ができることになります。
root ALL=(ALL:ALL) ALL
test1ユーザーがtest2ユーザーとしてログインして、コマンドを実行したい場合の設定です。
test1 ALL=(test2) ALL
本来なら、test1ユーザーがログアウトして、test2ユーザーでログインしなおして、コマンドを実行することになりますが、いちいち、そのような操作をするのは面倒です。
上記の設定を行うと、test1ユーザーでログインしている状態のままで、あたかも、test2ユーザーとしてログインしている状態を作れて、lsコマンドが実行できるようになります。それが下記のコマンドです。
$sudo -u test2 ls
つぎのようにすれば、test1ユーザーが、test2ユーザーとしてログインできて、実行できるコマンドは、lsコマンドだけに限定させることができます。このような設定を行うことで、test2ユーザーが他の人に実行させられては困るコマンドをブロックさせることができるため、セキュリティを高めることができます。
test1 ALL=(test2) /bin/ls