sudoコマンドについて理解する

【連載コラム:Linuxを学ぼう(11)】
サーバーを扱う上で必須と言える技術が「Linux」。今回はroot権限を使った管理作業などで役立つsudoコマンドの使い方について解説します。

最終更新日:2023年10月05日

サーバーを管理する上で必須の技術「Linux」の学習の仕方を解説するこのコラムの今回は、root権限を使って管理作業などを行う時に多用するsudoコマンドについて解説します。


sudoコマンドを使う理由

sudoコマンドは、一般ユーザーに対してコマンド実行の単位でroot権限を与える仕組みです。sudoコマンドを実行する度にログが記録されるので、root権限を使ったコマンドの実行を後から確認する監査を行うことができるなどのメリットがあります。

また、細かい設定を行えば、特定の操作を行うコマンドの実行だけ特定のユーザーに許可する、といった使い方もできます。

sudoの設定ファイル/etc/sudoersとvisudo

sudoの設定は/etc/sudoersという設定ファイルに記述します。このファイルはやや特殊で、ユーザーrootでもエディタなどで修正できません。編集用の専用コマンドvisudoを使う必要があります。visudoを実行すると、一時的に編集可能な設定でviエディタでファイルが開かれます。

デフォルトの設定を見る

/etc/sudoersの設定の中には、以下のような設定があります。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

コメントにある通り、wheelグループに所属しているユーザーはすべてのコマンドをsudoコマンドで実行できるようにする設定です。
逆の言い方をすると、wheelグループに所属していないユーザーはsudoコマンドを実行できない設定でもあります(この設定以外に設定が無い場合)。

sudoコマンドを実行してみる

sudoコマンドの動作を確認してみましょう。前述した/etc/sudoersは一般ユーザーには中身を見ることができないファイルです。これをsudoコマンドを通して見てみます。ユーザーlinucはwheelグループに所属しているため、sudoコマンドを実行できます。

パスワードの入力が要求されますが、ここで入力するのは実行しているユーザーのパスワードであり、ユーザーrootのパスワードではありません。一部のディストリビューションでは、ユーザーrootにパスワードを設定しない場合もありますが、インストール時に作成したユーザーはsudoコマンドは使えるようにしてあるので差し支えないということになります。

[linuc@localhost ~]$ id
uid=1001(linuc) gid=1001(linuc) groups=1001(linuc),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[linuc@localhost ~]$ cat /etc/sudoers
cat: /etc/sudoers: 許可がありません
[linuc@localhost ~]$ sudo cat /etc/sudoers

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

[sudo] linuc のパスワード: ※間違えたパスワードを入力してみる
残念、また試してください。
[sudo] linuc のパスワード: ※正しいパスワードを入力する
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
(中略)
## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

パスワード無しでsudoコマンドを実行できるようにする

sudoコマンドを実行した際にパスワード入力を省略したい場合には、/etc/sudoersの以下の設定を有効にします。既に有効になっている上の設定をコメントアウトして無効化するのも忘れないでください。

## Allows people in group wheel to run all commands
# %wheel	ALL=(ALL)	ALL

## Same thing without a password
%wheel	ALL=(ALL)	NOPASSWD: ALL

特定のコマンドを特定のユーザーに許可する

特定のコマンドを許可することもできます。以下の設定はusersグループに所属しているユーザーはシャットダウンできる、という設定です。

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

%が頭に付くとグループ名、外すと特定のユーザーを指定することになります。後ろに実行を許可したいコマンドを記述しますが、オプションなど含めて一致する必要があります。この場合、-hオプションでシャットダウンできますが、-rオプションでリブートはできません。

sudoコマンドのログ

sudoコマンドを実行すると、/var/log/secureログファイルに以下のように記録されます。

xxx xx xx:xx:xx localhost sudo[11746]:   linuc : TTY=pts/2 ; PWD=/home/linuc ; USER=root ; COMMAND=/bin/cat /etc/sudoers

どのような操作をしたのか監査するのに使えますが、サーバー自体を乗っ取られてしまったりすると改ざんされる可能性もあるので、ログは別のログサーバーなどにも転送して記録しておく必要があるでしょう。

sudoコマンドは、システム管理を行う上で使用する頻度が高いコマンドです。基本的な使い方を覚えておけば概ね問題ありませんが、/etc/sudoersの変更方法など、必要な時に設定できるようにきちんと確認しておきましょう。


筆者紹介
宮原 徹 氏

宮原 徹 氏

株式会社びぎねっと

Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。

バックナンバー

第21回:外部からWebサーバーにアクセスする

第20回:Webサーバーを動かす

第19回:Webサーバーをインストールする

第18回:典型的なネットワークトラブルについて理解する

第17回:ネットワークの状態確認を理解する

第16回:アクセス権に関わる様々なことについて理解を深める

第15回:ファイルのアクセス権を理解する

第14回:パッケージをアップデートする dnf編

第13回:PAMを理解する

第12回:グループとは何かを理解する

第11回:sudoコマンドについて理解する

第10回:suコマンドで特権ユーザーになる

第9回:ユーザー権限を理解する

第8回:SSHによるリモートログイン

第7回:Linuxインストール後にやること

第6回:Linuxイストールの実際

第5回:Linuxインストールの準備

第4回:Linux学習のためのネットワーク環境

第3回:学習環境を用意する

第2回:Linuxをどう学ぶのか

第1回:Linuxを学ぼう

ページトップへ