【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【入門】/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権限は与えたくないけど特定のコマンドだけは実行できるようにしたい」等の微調整が可能になります。

セキュリティ的にもクリティカルなファイルなのでぜひ構造を理解して設定しましょう!

 

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
22
読み込み中...
22 票, 平均: 1.00 / 122
28,983
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

インフラわっしょいマン

システムソリューション部所属。
好きで毎日勉強していたところ、運よくビヨンドに拾っていただいた。
眼鏡からコンタクトに変えるか悩み始めてから9年経過している。