【第9回】目指せLinuxマスター(1) ~sudoersの管理~

 皆さま,こんにちは. 迷子のエンリュです.

 今回は「目指せLinuxマスター」ということで,sudoersの管理をやっていきたいと思います.なんだかいきなり難しそうなことになってきました...

 やることは簡単です.今日の作業をざっくりまとめると,次のようになります.

  • wheelまたはsudoグループへのユーザーの追加
  • sudo権限を持たないユーザーの追加(比較用)
  • sudoers設定ファイルを編集

 今日の作業を終えると,今までsudo出来なかったユーザーがsudoで様々なシステムコマンドを使うことができます.その分rootユーザーにログインして作業することを減らせます.

 rootユーザーでうっかりシステムの重要な設定ファイルを消してしまった,なんてことはもう起こりません.sudoで権限を制御してあげるというのは,とても大切なことなのです.

 それでは早速始めていきましょう.よろしくお願いいたします.

ユーザーの追加とグループの設定

 まず,ユーザーとグループを設定していきます.今回sudoコマンドを使えるようになってほしいユーザーは「enryu」です.皆さんは普段使ってるメインのユーザーに置き換えて考えてください.この「enryu」を「wheel」グループに入れることで,sudoを使えるようにしていきます.

 それ以外のユーザーは,wheelメンバーではない一般ユーザとします.

 また,もう一つ「users」というグループに物理コンソールでログインしたときだけシャットダウンや再起動を行える権限を与えていきましょう.一般ユーザを,usersメンバーと非usersメンバーとに分けるのです.

 まとめると,今回の設定の検証には3つのユーザーを使っていきます.設定内容は次の表のようになります.

番号 名前 フルネーム 所属グループ
1 enryu Lost Enryu enryu, wheel, users
2 bob Bob Beck bob, users
3 alice Alice Atanasoff alice, guest-users

 では早速この通りに設定していきましょう.今回はCUIを使ってユーザーを追加していきます.わからないことがあったらこちらを参考にしてください.

Qiita:Linuxコマンド入門(3) ~ユーザー・グループの管理~
$ su -
# useradd bob -c "Bob Beck"
# useradd alice -c "Alice Atanasoff"
# passwd bob
# passwd alice
# groupadd guest-users
# usermod enryu -aG wheel,users
# usermod bob -aG users
# usermod alice -aG guest-users

 設定は次のように簡単に確認できます.

$ groups enryu bob alice

f:id:LostEnryu:20161021155449p:plain

 正しく設定できましたね.

sudoers設定ファイルの編集

 いよいよ本日の要,sudoers設定ファイルを編集していきます.設定ファイルは/etc/sudoersです.ターミナルを開いて確認してみましょう.

$ ls -l /etc/sudoers
-r--r-----. 1 root root …/etc/sudoers

 以前のアクセス権限の話は覚えているでしょうか(第6回)

 「owner」と「group」は「root」,そのアクセス権限はどちらも「r--」.root権限ですら読み込み許可だけで書き込みができません.

 /etc/sudoersは,非常に特殊な設定ファイルです.root権限で無理やり編集することはできなくはないのですが,文法などにミスがあると致命的なエラーにつながってしまいます.そこで,専用のコマンド「visudo」を使います.

 visudo/etc/sudoersに書き込みを行えるだけではなく,編集した内容が文法的に正しいかどうかも判断してくれます.

 例えば間違った文字が打ち込まれた場合,このようになります.

visudo: >>> /etc/sudoers: syntax error nea line ## <<<
What now?    # ここでEnterを押す
Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)
What now?

 What now? と聞かれてShift+qを押さない限り,文法エラーを残してしまうことはありません.安心ですね.

viの使い方

 visudoコマンドを使うと,viエディタが立ち上がります.viエディタはコマンドモードと編集モードを切り替えながらCUIでファイル編集を行うエディタで,多くのLinuxマシンにデフォルトでインストールされています.

 しかし,一般的なGUIベースのテキストエディタとは操作方法が異なるため,少々慣れが必要です.viの基本的な使い方についてはこちらで説明しています.使いこなせばとても便利なコマンドがたくさんあります.

Qiita: 覚えておきたいviコマンド

 最悪覚えていなくてはならないコマンドは次の4つです.

コマンド 意味
i 編集モードに切り替え(文字の挿入)
Esc 編集モードからコマンドモードに切り替え
:q! 保存しないで終了
:wq 変更を保存して終了

 編集モードに入ったら,通常通りに編集できます.編集が終わったらEscでコマンドモードに戻り,:wq(保存して終了)でターミナルに戻りましょう.

visudoで設定変更

 では,心の準備はよろしいでしょうか.設定を変更します.なおこの設定はGUIでは行えません.もう,やるしかないのです.

 まずはバックアップを取りましょう.Linuxコマンドの「cp」を使ってコピーします.

 ターミナルでrootユーザに変更し,以下のようにします.

$ su -
# cp /etc/sudoers /etc/sudoers.bak

 続いてvisudoを実行します.

# visudo

f:id:LostEnryu:20161021155707p:plain

 表示されました.

wheelをsudoersに追加

 まずはwheelグループのメンバーをsudoersに追加します.

 編集するポイントまで移動しましょう.矢印キーで下に移動してもよいですが,折角のviなので文字列検索コマンドを実行してみましょう.コマンドモードで/wheelとタイプして,Enterキーを押しましょう.

f:id:LostEnryu:20161021155746p:plain

 色が反転して表示されているマスがカーソルです.見事「wheel」という文字列を探し当てました.それではその下の行の先頭に移動してみましょう.j0と入力してみてください.

 jが下に一行移動,0がその行の先頭に移動です.

 今カーソルは「#」の上にあるはずです.この「#」はコメントアウト,すなわちその行の無効化を表しています.これを外して行を有効にします.

 iで編集モードにしてから2回Deleteキーを押してもいいですが,ここは2xと入力しましょう.xが文字の削除,その前の2は文字数を表します.これでコメントアウトが外れました.

 これで,wheelグループに所属するユーザがsudoを行えるようになりました.

 設定ファイルが以下のようになったことを確認してください.

(省略)

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

(省略)

shutdownをusersグループのメンバーに制限

 続いて,shutdownを行えるユーザやホストに制限を設けましょう.今度は/shutdownとして「shutdown」を検索します.

(省略)

## Allows members of the users group to shutdown this system
# %users        localhost=/sbin/shutdown -h now
    ↑この行を編集します↓
%users        localhost=SHUTDOWN
(省略)

 SHUTDOWNとはコマンドエイリアスのひとつです.コマンドエイリアスというのは,いくつかのコマンドをセットにしてまとめて呼ぶための仮の名前です.これもsudoersの中で定義されている必要があります.

 今度は逆向きに検索をかけてみましょう.コマンドモードで?Cmnd_Aliasと打ってみてください.次のような場所まで飛べたでしょうか.もし違う場所にいたら,nShift+nで検索結果を前後に移ることができます.

(省略)

## Drivers
# Cmnd_Alias    DRIVERS    /sbin/modprobe

# Defaults specification

(省略)

 では,Driversの下にShutdownを追加していきましょう.

(省略)

## Drivers
# Cmnd_Alias    DRIVERS    /sbin/modprobe

## Shutdown
Cmnd_Alias    SHUTDOWN   /sbin/shutdown, /sbin/init, /sbin/halt, /sbin/reboot, /sbin/poweroff

# Defaults specification

(省略)

 ここまで書けたらコマンドモードに戻り,:wqを入力してみましょう.エラーメッセージなしで終了できればOKです.visudoのエラーが出たら,eで編集に戻ってどこか間違えていないか確かめましょう.

再起動して設定のチェック

 sudoersの設定が終わったら,再起動して設定を反映させましょう.suコマンドでログインしなおすこともできます.再度ログインしたら,次のコマンドを打ってみてください.

$ sudo -l

f:id:LostEnryu:20161021155905p:plain

 末尾に表示されたのがこのアカウントのsudo権限で動かせるコマンドになります.無事enryuはsudoですべてのコマンドをroot権限で実行できるようになりました.他のユーザーについても確認してみましょう.Uオプションでユーザーを指定できます.

$ sudo -l -U bob
(省略)
User bob may run the following commands on this host:
    (root) /sbin/shutdown, /sbin/init, /sbin/halt, /sbin/reboot, /sbin/poweroff
$ sudo -l -U alice
Sorry, user alice may not run sudo on localhost.

 bobにはシャットダウンの権限が与えられ,aliceにはsudo権限なしという結果になりました.やったね.

usersでシャットダウン

 それでは,シャットダウン権限を与えられたusersメンバー「bob」にシャットダウンしてもらいましょう.

$ sudo su bob        # sudoを付けるとpasswordの入力の必要がない
$ sudo shutdown -h now

 これで今日の作業は完了です.少し長かったですかね.お疲れさまでした.

suって便利なコマンドだなあ

Previous | Top | Next

Prev: 【第8回】CentOSの歩き方 GNOME編(2) ~ユーザー・グループ管理~

Next: 【第10回】目指せLinuxマスター(2) ~権限の制御~

Index
Journey