0.本稿について
- 対象:サーバ用Linuxについて学習している初学者。
- 目標:AlmaLinuxでsudoができるようになる。sudoの基本概念を理解する。
- 想定:ユーザ、グループの概念について理解している人を想定。
御託はいいからAlmaLinuxでsudoできるようにしたいという人はrootユーザで
usermod -aG wheel ユーザ名
を実行してください。
debian系(ubuntuとか)の場合はこっちです。
usermod -aG sudo ユーザ名
sudoしたいユーザで再ログインするとsudoできるようになります。
1.一般ユーザで特定のコマンドが実行できない
Linuxを触り始めると、rootユーザだと実行できるのに一般ユーザだと以下のようなメッセージが出てきてコマンド実行ができない事があります。
$ dnf update
Error: This command has to be run with superuser privileges (under the root user on most systems).
日本語の場合
エラー: このコマンドはスーパーユーザー特権(大概のシステムではrootユーザー)で実行しなければいけません。
これはコマンドを実行した一般ユーザが、管理者権限を持っていないためです。
2.コマンド実行権限
Linuxには、システムの設定を簡単に変更できないように、システムに致命的な変更を与えるコマンドには権限が必要にする仕組みがあります。
rootユーザの場合は実行できるが、一般ユーザだと実行できないのはこの仕組みのためです。
rootユーザはすべてのコマンドを実行する強力な権限を持ち、一般ユーザは管理者が付与しない限りこの権限を持っていません。そのため一部コマンドを実行できません。
これは一般ユーザの理解不足・typoによる誤操作や、侵入者による破壊行為によるシステム設定変更を防ぐためにあります。
しかし一般ユーザにもこの権限を一時的に付与し、すべてのコマンド実行を可能にする事ができます。
それがsudoです。
王様の持ってる各種権限を一時的に借りるようなものです。
3.sudo
sudoは別のユーザとしてコマンドを実行するコマンドです。
sudo
コマンドは、オプションを指定しなければ、デフォルトではroot
ユーザとして実行します。-u
オプションを付けると別のユーザとして実行できますが、今回はその説明は割愛します。
sudoの使い方
sudoは、
$sudo dnf update
のように実行したいコマンドの先頭にsudo
とつけるだけです。
sudo
を付けたけどなんか色々出てきて実行できないんだけど!というあなた。話はまだ終わってません。
sudo
をつけて実行したら今度は次のように表示されたはずです。
[yoyo@AL ~]$ sudo dnf update
nbvc[\/l,ik8jn b fd
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for yoyo:
これはsudoを実行(=管理者権限でコマンド実行)するにあたっての注意点と、あなたが使用しているユーザのパスワード入力を求められています。 大いなる力には大いなる責任が伴う
と書いてありますね。
そしてパスワードを入力すると次のように表示されます。
yoyo is not in the sudoers file. This incident will be reported.
#「yoyo(ユーザ)はsudoersファイルにないよ。これは報告しますからね!」という意味。
このメッセージにあるように、sudoを実行できるようにするにはユーザの情報をsudoersファイルに登録(sudoの設定)をしなければなりません。
sudoersの設定
sudoの設定をするにはroot
ユーザでsudoers
ファイルを編集します。
sudoers
ファイルは/etc/sudoers
にあります。これを編集すればいいのですが、このファイルを編集する場合はvisudo
コマンドで編集します。vi /etc/sudoers
などで直接編集するのは推奨されません。
記載ルール
次のようなルールで記載することで設定できます。
user host=(runas_user) command
値 | 意味 |
---|---|
user | 権限を与えるユーザー名 |
host | 許可するホスト名。特定のホスト名やALLを指定 |
runas_user | sudoを実行する際に指定するユーザー。省略可能で、通常はALLまたはroot |
command | 実行を許可するコマンド。複数のコマンドをカンマで区切って指定可能。ALLとすると全てのコマンドを許可 |
visudo
でsudoersを開き、100行目付近を見てみると、次のように記載されています。
95 ## user MACHINE=COMMANDS
96 ##
97 ## The COMMANDS section may have other options added to it.
98 ##
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101
これはrootユーザがすべてのホストで、すべてのユーザですべてのコマンドを実行できるという意味です。
例えばyoyo
ユーザに同様の権限を与えたい場合は
yoyo ALL=(ALL) ALL
のように記載します。この1行を100行目の下に追加挿入すればOKです。
グループの設定
先ほどの書き方は、特定ユーザについて設定する方法でした。
下のほうの106
,107
行目に以下のような記載があります。
106 ## Allows people in group wheel to run all commands
107 %wheel ALL=(ALL) ALL
これはwheelグループにrootと同じ権限を指定している記述になります。
グループを指定したい場合は、このようにグループ名の先頭に%
記号をつけて記載します。
手軽にsudoできるようにしたい
AlmaLinuxでsudo実行できるように管理者権限を与えるには、wheelグループに追加するのが一番簡単です。冒頭で記載したのはこの方法になります。rootユーザでログインして以下コマンドを実行し、bash再読み込みで反映されます。bash再読み込みをさせるには再ログインが一番簡単です。
wheelグループへユーザ追加
usermod -aG wheel ユーザ名
実行例
usermod -aG wheel yoyo
なおdebian系ディストリビューションの場合はwheel
グループに値するものとしてsudo
が存在します。debian系の場合はwheel
の代わりにsudo
に変えて実行すると同じ事になります。
ならwheelに登録するのがいいんじゃないの?
と思うのですが、確かに手軽に迅速にsudo権限を与えるならばそれが一番です。
しかし、利用するユーザが多くなってきたり、いろんな権限を与えるようになってくると、このユーザはこのコマンドだけ実行できるように制限したいなとなってきます。
そういった場合はsudoersに登録する手法の方が良いです。
このように、どちらの手法を利用すべきかは利用・提供する環境によって変わってくるので、TPOにあわせて選択して設定を行いましょう。