このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
/etc/sudoersファイルを編集する:visudoコマンド
/etc/sudoersファイルを編集する:visudoコマンド
Linuxシステムの管理では、一般ユーザーに対して特定の管理コマンドの実行を許可する必要が生じることがあります。しかし、その際にすべてのユーザーに対して無制限の管理権限を与えることはセキュリティ上好ましくありません。このため、/etc/sudoers
ファイルを通じて、どのユーザーがどのコマンドを実行できるかを細かく制御することができます。このファイルを編集する際には、シンタックスエラーを防ぐために専用のvisudo
コマンドを使用します。
visudoコマンドの概要
sudo
コマンドを使用するには、/etc/sudoers
ファイルにどのユーザーがどのコマンドを実行できるかを設定する必要があります。このファイルを直接編集することは推奨されておらず、visudo
コマンドを使用して編集します。visudo
は、ファイルの編集時にシンタックスエラーを防ぐための機能を持っており、システムの安定性を保つために重要な役割を果たします。
【構文】visudo
このコマンドを実行すると、通常はデフォルトのテキストエディタ(Ubuntuではnano
エディタ)が起動し、/etc/sudoers
ファイルを安全に編集できます。
/etc/sudoersファイル
/etc/sudoers
ファイルには、どのユーザーがどのコマンドを実行できるかが記述されています。このファイルは、システム全体の管理権限を制御するための非常に重要なファイルです。
/etc/sudoersファイルの書式
ユーザー名 ホスト名=(権限) [NOPASSWORD:] 許可するコマンド
- ユーザー名: コマンドを実行するユーザーを指定します。グループの場合は先頭に
%
を付けます。 - ホスト名: どのホストでこのルールを適用するかを指定します。
ALL
と指定すると、すべてのホストで有効です。 - 権限: どのユーザーやグループの権限でコマンドを実行するかを指定します。
ALL
を指定すると、すべてのユーザー権限で実行可能です。 - 許可するコマンド: 実行を許可するコマンドの絶対パスを指定します。
ALL
とするとすべてのコマンドが許可されます。コマンドのパスはwhich
コマンドで調べることができます。また、ALL
の前に「NOPASSWORD:」
を記述すると、sudo
コマンドを実行する時に、実行したユーザーのパスワードの入力が求められません。
/etc/sudoersファイルの記述例
root ALL=(ALL:ALL) ALL
この定義は、root
ユーザーに対して、システム全体で無制限の管理者権限を与える設定です。この設定の詳細を説明します。
各部分の意味
root
これはユーザー名を指定しています。この定義はroot
ユーザーに適用されます。ALL(最初のALL)
この部分はホスト名を指定しています。ALL
は、このルールがすべてのホスト(サーバーやワークステーション)で有効であることを意味します。(ALL:ALL)
最初のALL
: これは、root
ユーザーが他のどのユーザーやグループに切り替えてもそのユーザーの権限でコマンドを実行できることを意味します。
ALL
(コロンの後のALL
): これは、root
ユーザーが他のすべてのグループの権限を持ってコマンドを実行できることを示しています。ALL(最後のALL)
これは、root
ユーザーがすべてのコマンドを実行できることを意味します。コマンドのパスはwhich
コマンドで調べることができます。許可するコマンドのパスの定義する際にwhich
コマンドを使用するとよいでしょう。
/etc/sudoersファイルのデフォルト設定
/etc/sudoers
ファイルには、いくつかのデフォルト設定が含まれています。これらの設定を理解することで、システム管理をより柔軟に行うことができます。
設定 | 説明 |
---|---|
root ALL=(ALL:ALL) ALL | root ユーザーがすべてのホストで、すべてのユーザー権限を持ち、すべてのコマンドを実行できることを意味します。 |
%admin ALL=(ALL) ALL | admin グループのメンバーがすべてのホストで、すべてのユーザー権限でコマンドを実行できることを意味します。 |
%sudo ALL=(ALL:ALL) ALL | sudo グループのメンバーがroot ユーザーと同様に、すべてのホストで、すべてのユーザー権限を持ち、すべてのコマンドを実行できることを意味します。 |
コマンドの使用例と解説
以下に、具体的な手順を示します。
1.suzuki
ユーザーに切り替えます。
・「su - suzuki
」コマンドを実行します。
user01@ubuntu-vm:~$ su - suzuki
パスワード:
suzuki@ubuntu-vm:~$
2.管理者コマンド「useradd
」コマンドを実行してみます。
・「sudo useradd watanabe
」コマンドを実行します。
この時点では、suzuki
ユーザーには管理権限が与えられていないため、コマンドを実行できません。一般ユーザーのsuzukiで管理コマンドを実行するには、/etc/sudoersファイルを編集する必要があります。
suzuki@ubuntu-vm:~$ sudo useradd watanabe
[sudo] suzuki のパスワード:
suzuki は sudoers ファイル内にありません。この事象は記録・報告されます。
3.exit
して元のユーザに戻ります。
・「exit
」コマンドを実行します。
suzuki@ubuntu-vm:~$ exit
ログアウト
4.root
ユーザーに切り替えます。
・「su -
」コマンドを実行します。
user01@ubuntu-vm:~$ su -
パスワード:
root@ubuntu-vm:~#
5./etc/sudoers
ファイルを編集します。
・「which useradd
」コマンドを実行します。
useraddコマンドのパスを調べます。
root@ubuntu-vm:~# which useradd
/usr/sbin/useradd
・「visudo
」コマンドを実行します。
user01@ubuntu-vm:~$ visudo
以下の行を追加します。
suzuki ALL=(ALL) /usr/sbin/useradd
# User privilege specification
root ALL=(ALL:ALL) ALL
suzuki ALL=(ALL) /usr/sbin/useradd # ここに追記する
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
nanoエディタの場合、「Ctrl」+「s」で保存、「Ctrl」+「x」で終了します。
6.exit
して元のユーザーに戻ります。
・「exit
」コマンドを実行します。
root@ubuntu-vm:~# exit
ログアウト
7.再度「su - suzuki
」でsuzuki
ユーザーに切り替えます。
・「su - suzuki
」コマンドを実行します。
user01@ubuntu-vm:~$ su - suzuki
パスワード:
suzuki@ubuntu-vm:~$
8.設定が反映されているかを確認します。
・「sudo -l
」コマンドを実行します。
useradd
コマンドが許可されていることを確認できます。
suzuki@ubuntu-vm:~$ sudo -l
[sudo] suzuki のパスワード:
既定値のエントリと照合中 (ユーザー名 suzuki) (ホスト名
ubuntu-vm):
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
ユーザー suzuki は ubuntu-vm 上で コマンドを実行できます
(ALL) /usr/sbin/useradd
9.早速、useradd
コマンドを使ってみます。
以下のコマンドを実行します。
- 「
sudo useradd watanabe
」コマンド - 「
grep watanabe /etc/passwd
」コマンド
suzuki@ubuntu-vm:~$ sudo useradd watanabe
suzuki@ubuntu-vm:~$ grep watanabe /etc/passwd
watanabe:x:2223:2223::/home/watanabe:/bin/sh
まとめ
visudo
コマンドを使用することで、/etc/sudoers
ファイルを安全に編集し、特定のユーザーやグループに対して、適切な管理権限を付与することが可能です。これにより、セキュリティを確保しながら、必要な作業を効率的に行うことができます。