sudo を使えるようにする

(今回の記事は M.K さんの作ってくれた設定書を参考にしています)

su コマンドで root 権限を取得してしまうと何でもできてしまいます。
一般ユーザーに特定の管理コマンドのみの実行を許可したい場合は sudo コマンドを利用します。sudo コマンドを使えば任意の管理者コマンドを任意のユーザーに許可することができます。(今回は各ユーザーに root とほぼ同様の権限を与える)

sudo の設定

sudo コマンドの利用設定をするには、root ユーザーで visudo コマンドを実行します。すると、デフォルトのエディタで /etc/sudoers ファイルが開かれます。(エディタで直接 /etc/sudoers ファイルを開かないでください。root ユーザーですら書き込み権限がないファイルです)

CentOS 7.6の場合、デフォルトでは下記のような設定になっています。

root ユーザーで # visudo

(~前略~)
## Next comes the main part: which users can run what software on
(ここからがメインパートです)
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
(root はなんでもできるよ)

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
(wheel グループに root権限が必要なすべてのコマンドを実行する許可を与える:要パスワード)

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
(同上:パスワードも不要)

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

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

その他の例として、

hrs    ALL=(ALL) /sbin/shutdown  
(hrs ユーザーのみ、shutdown コマンドが実行できるように設定する)
hrs    ALL=(ALL) ALL  
(hrs ユーザーに対し、root権限が必要なすべてのコマンドの実行を許可)

このようにユーザー毎に権限を付与してもよいのですが、今回は各ユーザーを wheel グループに所属させることで sudo が使えるようにします。

http://codaholic.org/?p=1757 より引用
 [Linux] なぜ sudo する権限のあるグループが「 wheel 」という名前なのか
sudo コマンドを使えるようにするため、ユーザーを wheel グループに追加し権限を付与しましょう、とどこを見ても書いてあるんですが、なぜ wheel って名前なんだろう、と思ったことはないでしょうか?
 調べてみたところ、諸説あるようですが個人的に納得したのが big wheel から由来している説です。big wheel というのは「大物」とか「実力者」とかそういった意味のある言葉のようですので、sudo できる権限をもった者という意味では納得がいきます。

id コマンド

UID,GID,所属グループ名を表示する(引数のユーザー名を省略した場合は、現在のユーザーについて表示する)

# id hrs
uid=1000(hrs) gid=1000(hrs) groups=1000(hrs)

よって現在はまだ sudo は使用できません。無理やり使うと

$ sudo yum update
[sudo] hrs のパスワード:
hrs は sudoers ファイル内にありません。この事象は記録・報告されます。

と言われます。

また、sudo -l でも自分が sudo を使用可能か調べることもできます。

[test@localhost ~]$ sudo -l

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

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

[sudo] hrs のパスワード:
残念ですが、ユーザー hrs は localhost 上で sudo を実行できません。

usermod で一般ユーザーを wheel グループに追加する

既存のユーザーアカウントを変更する。/etc/passwd や /etc/group ファイルの該当フィールドを書き換えた場合と同じ。

# usermod -aG wheel hrs
-a or (--append): 所属するサブグループを追加する。-G: サブグループを変更する。-g: プライマリグループを変更する。

[root@localhost ~]# id hrs                                                            
uid=1000(hrs) gid=1000(hrs) groups=1000(hrs),10(wheel)  (← wheel グループが追加された)

(サブグループの削除コマンドはない。# usermod -G hrs hrs のように、消したいサブグループを除き再度 usermod -G コマンドを使うか、/etc/group ファイルを直接編集して wheel グループから消したいユーザーを削除する)

一旦ログアウトし、再度ログインすると一般ユーザーで sudo を利用して管理者コマンドが使えるようになります。

[hrs@localhost ~]$ sudo yum update

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

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

[sudo] hrs のパスワード:  
  (ここで入力するのは root パスワードではなく、ユーザーパスワード)
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
~(後略)~

ちなみに、wheel ユーザーへの追加は、CentOSのインストール時にもできる。 ルートユーザーと一般ユーザーのパスワードを登録する際に、一般ユーザーで「このユーザーを管理者権限にする」とかなんとかいう部分にチェックを付ける。 すると初めから wheel ユーザーに追加され sudo が使える。(キャプチャ撮り損ねた)

また、前述のように sudo 実行権限がないユーザーが sudo を使おうとすると「hrs は sudoers ファイル内にありません。この事象は記録・報告されます。」となり、root ユーザーに通知メールが飛びます。 root ユーザーで mail コマンドを打つことでメールを閲覧できます。

新しいメールが /var/spool/mail/root にあります
[root@localhost ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 messages 1 new
> N  1 test@localhost.local  Sun Jan 13 14:42  16/683   "*** SECURITY information for localhost.localdomain ***"
& 1 (←読みたいメールの番号)
Message  1:
From root@localhost.localdomain  Sun Jan 13 14:42:21 2019
~(中略)~
Subject: *** SECURITY information for localhost.localdomain ***
Date: Sun, 13 Jan 2019 14:42:21 +0900 (JST)
Status: R

localhost.localdomain : Jan 13 14:42:21 : test : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/test ; USER=root ; COMMAND=/bin/yum update

&  q で終了

su コマンドを利用できるユーザを制限する

su コマンドを利用できるユーザを制限するには、pam_wheel.so を使います。pam_wheel.so は、su コマンドを利用できるユーザを wheel グループに所属するユーザに限定します。 pam_wheel.so を有効にするには /etc/pam.d/su というファイルで、以下のようにコメントになっている部分があるので先頭の # を消して設定を有効化します。

# auth required pam_wheel.so use_uid
これで、wheel グループに所属するユーザのみが su コマンドを使えるようになります。
(「Linuxセキュリティ標準教科書」より)

/* -----codeの行番号----- */