このページで解説している内容は、以下の 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) ALLrootユーザーがすべてのホストで、すべてのユーザー権限を持ち、すべてのコマンドを実行できることを意味します。
%admin ALL=(ALL) ALLadminグループのメンバーがすべてのホストで、すべてのユーザー権限でコマンドを実行できることを意味します。
%sudo ALL=(ALL:ALL) ALLsudoグループのメンバーがrootユーザーと同様に、すべてのホストで、すべてのユーザー権限を持ち、すべてのコマンドを実行できることを意味します。
/etc/sudoersファイルのデフォルト設定

コマンドの使用例と解説

以下に、具体的な手順を示します。

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ファイルを安全に編集し、特定のユーザーやグループに対して、適切な管理権限を付与することが可能です。これにより、セキュリティを確保しながら、必要な作業を効率的に行うことができます。