sudo 権限設定ファイルの /etc/sudoers ファイルの書き方入門
目次
はじめに
こんにちは。システムソリューション部のインフラわっしょいマンです。
突然ですがみなさん、「sudo」コマンド使ってますか?
rootユーザや他のユーザ権限でコマンドを実行するときに使うので、ターミナル上で作業する際は かなりの頻度でお世話になるコマンドではないでしょうか。
しかしながら、OSユーザの誰でもこのコマンドを使えてしまうとプロセスのコンフィグなどの重要設定ファイルを編集できたり、デーモンを操作できたりと、セキュリティ上 危険な状態となります。
そのため、通常は設定ファイルで「誰がどこで何に対して何をしていいのか」という権限を調整します。
今回はこの sudo 権限設定ファイルである「/etc/sudoers」の記述形式について、フォーカスしてみたいと思います。
こちらのファイルはサーバのセットアップ時にも手を加える機会があるかもしれませんが
皆さん、なんとなく流れでコピペしていませんか?
記述方法を理解しておくことで思わぬ事故も防げますし、応用的な使い方にも進めるかと思いますのでこの機会にぜひご確認ください。
「/etc/sudoers」の記述解説
「/etc/sudoers」ファイルにはデフォルトでいくつか記述がありますが、一つピックアップしてみます。
root ALL=(ALL) ALL
以下、この記述をベースに解説を加えていきます。
一番左の「root」
誰に与える権限なのか指定する箇所です。
この場合「root」ユーザに与える権限を指定しています。
一般ユーザの権限を決めたい場合は、ここをそのユーザの名前にします。
「=」の左側の「ALL」
複数のサーバで同じ設定を使いまわすときにどのサーバでその行の指定を反映するかの設定です。
各サーバで sudo の設定を個別に管理している場合は、設定ファイルの反映先は必ずそのサーバ自身になります。
なのでその場合、この記述は「ALL」で問題ありません。
ディレクトリサービスなどを使って複数サーバの情報をまとめて管理している場合は例外となります。
「=」の右側、丸かっこの中身
前提として sudo コマンドは本来「他のユーザやグループに成り代わって、その権限で操作を行う」コマンドで、「root の権限で操作する」というのはユーザもグループも指定しなかった場合の規定の動作に過ぎません。
この項目は どのユーザに成り代わってコマンドを実行できるかを記述します。
なお、丸かっこの中身は上の例では省略されていますが、本来は (ALL:ALL) のように コロンの左に「sudo -u」で成り代われるユーザ、右に「sudo -g」で成り代われるグループを指定します。
例えばですが、 root 権限でしか実行できないようなコマンドの実行権限をあるユーザに与えたいという状況では、
一般ユーザにはなれてもなれなくてもどっちでもいい(それ以上になれる)ので、対象には(ALL)のようにrootを含めた誰にでもなれる権限を与える場合が多いです。
もちろん (root)と明示的に指定しても問題ありません。
※ちなみに 「:ALL」 の部分 つまり丸かっこの後半は省略すると「なれるグループ無し= sudo -g が使えない」という意味になります。
一番右側のALLについて
「どんな操作を許可するか」を指定します。
ALL と記述するとなんでもできるという意味になります。
例えば hoge ユーザが Apache の再起動だけできるように設定したい場合、下記のように記述しましょう。
※コマンドをフルパスで書く必要があることに注意。パスは異なる場合があるので which コマンドでパスを調べてください。)
hoge ALL=(ALL:ALL) /usr/bin/systemctl restart httpd
上の記述だとリスタートしかできないので、ほかのコマンドも使えるようにしたい場合は下記のようにカンマでつなげて記述しましょう。
hoge ALL=(ALL:ALL) /usr/bin/systemctl restart httpd, /usr/bin/systemctl status httpd
反対に下記のように「!」を利用した記述をして、特定のコマンドだけ使用不可にもできます。
hoge ALL=(ALL:ALL) ALL, !/usr/bin/systemctl restart httpd, !/usr/bin/systemctl status httpd
おまけ
ユーザを指定可能な部分で「%」を頭につけるとグループの指定となります。
「/etc/sudoers」ファイルにはデフォルトで下記の記述もありますが、ユーザをwheel グループに入れるとroot 権限と同等のパワーを手に入れるのはこの記述が反映されているためです。
%wheel ALL=(ALL) ALL
まとめ
いかがでしょうか。
sudoers を適切に設定すれば、ユーザを発行した際に「このユーザにはこのコマンドしか実行しかしてほしくない」や「root権限は与えたくないけど特定のコマンドだけは実行できるようにしたい」等の微調整が可能になります。
セキュリティ的にもクリティカルなファイルなのでぜひ構造を理解して設定しましょう!