一般ユーザーにsudoアクセス権を与える

スポンサーリンク

一般ユーザーが別のユーザーでプログラムを実行する際、sudoコマンドで実行できるようにしますが、ここでは、特権ユーザー(rootユーザー)の権限で実行できるようにします。

検証した環境

# cat /etc/os-release
NAME="AlmaLinux"
VERSION="9.2 (Turquoise Kodkod)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.2"
PLATFORM_ID="platform:el9"
PRETTY_NAME="AlmaLinux 9.2 (Turquoise Kodkod)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9"
ALMALINUX_MANTISBT_PROJECT_VERSION="9.2"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.2"
# uname -r
5.14.0-284.11.1.el9_2.x86_64

設定前の状態

AlmaLinux(RHEL)では、一般ユーザーがsudoコマンドを使って、特権ユーザーで実行できません。

$ sudo pwd
[sudo] password for orangetakam:xxxx
orangetakam is not in the sudoers file.  This incident will be reported.

設定の変更

設定の変更は、特権ユーザーで行います。sudoコマンドを実行させたいユーザーに「wheel」グループに追加することで可能です。

$ su - root ・・・ 特権ユーザーになる
Password:xxxx
# cat /etc/sudoers | grep ^%wheel ・・・ 設定ファイル内を確認する
%wheel  ALL=(ALL)       ALL
# usermod --append -G wheel orangetakam ・・・ 一般ユーザー(orangetakam)を「wheel」に追加
# id orangetakam
uid=5000(orangetakam) gid=5000(orangetakam) groups=5000(orangetakam),10(wheel)

設定後の状態

# su - orangetakam ・・・ 一般ユーザーになる
$ sudo pwd ・・・ 動作の確認
/home/orangetakam

設定ファイルの内容

設定ファイル内の英文を適当翻訳で訳してみました。

$ sudo cat /etc/sudoers
## Sudoers を使用すると、特定のユーザーが root パスワードを必要とせずに、
## root ユーザーとしてさまざまなコマンドを実行できます。
##
## 関連コマンドのコレクションの例がファイルの下部に示されており、
## これらのコマンドを特定のユーザーまたはグループに委任できます。
##
## このファイルは「visudo」コマンドを使用して編集する必要があります。

## ホストのエイリアス
## マシンのグループ。代わりにホスト名 (おそらくドメイン全体にワイルドカードを使用) 
## または IP アドレスを使用することもできます。
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## ユーザーのエイリアス

## このファイルでは通常のグループ (つまり、ファイル、LDAP、NIS など) 
## を使用できるため、これらはほとんど必要ありません。
## USERALIAS ではなく %groupname を使用するだけです。
# User_Alias ADMINS = jsmith, mikem


## コマンドのエイリアス
## これらは関連するコマンドのグループです...

## ネットワーキング
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## ソフトウェアのインストールと管理
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## サービス
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable

## ロケートデータベースの更新
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## ストレージ
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## 権限の委任
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## プロセス
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## ドライバー
# Cmnd_Alias DRIVERS = /sbin/modprobe

# デフォルトの仕様

#
# tty でエコーを無効にできない場合は、実行を拒否します。
#
Defaults   !visiblepw

#
# HOME を保持すると、多くのプログラムが構成ファイルを検索するときに使用するため、
# セキュリティに影響します。 env_reset オプションが有効な場合、
# HOME はすでに設定されているため、このオプションは env_reset が無効になっているか、
# HOME が env_keep リストに存在する構成に対してのみ有効であることに注意してください。

#
Defaults    always_set_home
Defaults    match_group_by_gid

# バージョン 1.8.15 より前では、システム グループ データベースで見つからなかった sudoers に
# リストされるグループは、グループ プラグイン (存在する場合) に渡されました。
# 1.8.15 以降、デフォルトでは、%:group 形式のグループのみがグループ プラグインを介して解決されます。
# always_query_group_plugin を有効にして古い動作を復元します。
# 新しい動作を行うには、このオプションを無効にします。
Defaults    always_query_group_plugin

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

#
# HOME を env_keep に追加すると、ユーザーは sudo 経由で無制限のコマンドを実行できるようになります。
#
# Defaults   env_keep += "HOME"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## 次に主要な部分になります。どのユーザーがどのマシンでどのソフトウェアを実行できるかです
## (sudoers ファイルは複数のシステム間で共有できます)。
## 構文:
##
##      user    MACHINE=COMMANDS
##
## COMMANDS セクションには、他のオプションが追加される場合があります
##
## root がどこでもコマンドを実行できるようにする
root    ALL=(ALL)       ALL

## 
「sys」グループのメンバーがネットワーク、ソフトウェア、サービス管理アプリなどを実行できるようにします。
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## グループホイール内のユーザーがすべてのコマンドを実行できるようにします
%wheel  ALL=(ALL)       ALL

## パスワードなしでも同じこと
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## ユーザー グループのメンバーが root として CDROM をマウントおよびアンマウントできるようにします
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## 
ユーザーグループのメンバーがこのシステムをシャットダウンできるようにします
# %users  localhost=/sbin/shutdown -h now

## /etc/sudoers.d からドロップイン ファイルを読み取ります (ここでの # はコメントを意味しません)
#includedir /etc/sudoers.d