Red Hat Certified System Administrator (RHCSA) #11 ユーザー/グループ: UID/GID、sudo、ACL、パスワードポリシー
#10 基本ネットワーキング で nmcli を使って永続的な接続を押さえたなら、次はシステムを誰がどう使うのかを制御する番です。RHCSA でユーザーとグループ、sudo、ACL、パスワードポリシーは作業数が多く採点ポイントが明確なので、点数を安定して稼げる領域です。この記事は useradd から setfacl まで、試験にそのまま出るコマンドを自分で打ちながら整理します。
アカウント情報が保存される 3 つのファイル #
ユーザーを扱う前に、アカウント情報がどこにどんな形式で保存されるのかを知っておく必要があります。核心となるファイルは 3 つです。
| ファイル | 入れる情報 |
|---|---|
/etc/passwd | ユーザー名、UID、GID、GECOS、ホームディレクトリ、ログインシェル |
/etc/shadow | 暗号化されたパスワード、パスワードの有効期限ポリシー |
/etc/group | グループ名、GID、補助グループのメンバー |
/etc/passwd の 1 行はコロンで区切られた 7 つのフィールドです。
alice:x:1001:1001:Alice Kim:/home/alice:/bin/bash左から、ユーザー名、パスワードのプレースホルダー (x は実際のハッシュが shadow にあるという意味)、UID、基本 GID、GECOS (説明)、ホームディレクトリ、ログインシェルです。
/etc/shadow もコロンで区切られ、パスワードハッシュと有効期限関連のフィールドを入れます。
alice:$6$xyz...:19500:0:90:7:::ユーザー名、ハッシュ、最終変更日 (1970-01-01 からの日数)、最小使用日数、最大使用日数、警告日数の順です。このファイルは root のみが読めます。
/etc/group はグループ名、パスワードのプレースホルダー、GID、補助グループのメンバー一覧を入れます。
developers:x:2000:alice,bobこの 3 つのファイルは直接編集するより、useradd・usermod・passwd・chage のようなコマンドで扱うほうが安全です。直接編集が必要なら、整合性チェックをかける vipw (passwd) と vigr (group) を使います。
ユーザーの作成と変更 #
useradd でユーザーを作る #
最も単純なユーザー作成は次のとおりです。ホームディレクトリと基本グループが自動的に作られます。
useradd alice
passwd aliceRHCSA では単純な作成より、オプションを指定した作成がよく出ます。よく使うオプションは次のとおりです。
| オプション | 意味 |
|---|---|
-u | UID の指定 |
-g | 基本グループ (primary group) の指定 |
-G | 補助グループ (supplementary group) の指定 |
-s | ログインシェルの指定 |
-d | ホームディレクトリパスの指定 |
-c | GECOS (説明) の指定 |
-M | ホームディレクトリを作らない |
UID と基本グループ、補助グループ、シェルを一度に指定する例は次のとおりです。
useradd -u 1500 -g developers -G wheel,docker -s /bin/bash -c "Alice Kim" aliceこのコマンドは UID 1500、基本グループ developers、補助グループ wheel と docker、ログインシェル bash で alice を作ります。基本グループと補助グループは事前に存在している必要があるので、なければ先に groupadd で作る必要があります。
ログインを禁止するサービスアカウントは、シェルを /sbin/nologin に指定する場合が多いです。
useradd -s /sbin/nologin -M appsvcusermod で既存のユーザーを変更する #
すでにいるユーザーの属性を変えるときは usermod を使います。オプション名は useradd とおおむね同じです。
# ログインシェルの変更
usermod -s /bin/bash alice
# 補助グループを developers ひとつに置き換え
usermod -G developers alice
# 補助グループに docker を追加 (-a なしで -G だけ使うと既存の補助グループが消える)
usermod -aG docker alice
# UID の変更
usermod -u 1600 alice-aG の -a (append) が核心です。-a なしで -G だけ使うと既存の補助グループがまるごと置き換わって消えるので、補助グループを追加するときは必ず -aG を一緒に使います。
userdel でユーザーを削除する #
ユーザーを消すときにホームディレクトリとメールスプールまで一緒に消すには -r を付けます。
# アカウントのみ削除 (ホームディレクトリは残る)
userdel alice
# ホームディレクトリとメールスプールまで削除
userdel -r aliceRHCSA で「ユーザーとそのホームディレクトリを削除せよ」という問題は、-r を抜かすと減点なので注意します。
passwd でパスワードを管理する #
パスワードの設定とロックを扱うコマンドです。
# パスワードの設定 (対話型)
passwd alice
# 標準入力でパスワードを設定 (スクリプト用)
echo 'NewP@ss123' | passwd --stdin alice
# アカウントのロックとロック解除
passwd -l alice
passwd -u alice--stdin は RHEL 系でのみ動作するので、試験環境のように人が直接打つときは対話型 passwd が安全です。
グループ管理 #
基本グループと補助グループ #
Linux のグループは 2 種類です。基本グループ (primary group) はユーザーが新しいファイルを作るときに付与されるグループで、1 ユーザーに 1 つだけです。補助グループ (supplementary group) は追加の権限のために属するグループで、複数持てます。
id コマンドで現在の所属を確認します。
id alice
# uid=1500(alice) gid=2000(developers) groups=2000(developers),10(wheel),990(docker)gid= が基本グループで、groups= に並んでいるのが所属するグループ全体です。
groupadd でグループを作る #
# グループの作成
groupadd developers
# GID を指定して作成
groupadd -g 2000 developers
# システムグループとして作成
groupadd -r appgroupグループにユーザーを入れる作業は、先に見た usermod で行います。複数のユーザーをひとつのグループの補助メンバーにするときは、各ユーザーに usermod -aG を適用します。
usermod -aG developers alice
usermod -aG developers bobgpasswd でグループのメンバーを直接扱うこともできます。
# グループにユーザーを追加
gpasswd -a carol developers
# グループからユーザーを削除
gpasswd -d carol developerssudo 権限の付与 #
sudo が動作する仕組み #
一般ユーザーが root 権限の必要なコマンドを実行できるようにするツールが sudo です。誰が何をできるかは /etc/sudoers ファイルと /etc/sudoers.d/ ディレクトリに定義されます。
/etc/sudoers は直接編集せず、必ず visudo で開きます。visudo は保存時に文法をチェックし、タイプミスで sudo 自体が壊れる事故を防いでくれます。
visudo%wheel グループ #
RHEL では基本的に wheel グループに属するユーザーが sudo ですべてのコマンドを実行できます。/etc/sudoers に次の行が入っています。
%wheel ALL=(ALL) ALL% はグループを意味します。したがって「あるユーザーに sudo の全権限を与えよ」という問題は、そのユーザーを wheel グループの補助メンバーに入れれば終わります。
usermod -aG wheel alicedrop-in ファイルで権限を定義する #
/etc/sudoers を直接いじるより、/etc/sudoers.d/ の下にファイルを置く方式が推奨されます。このディレクトリのファイルも visudo で文法をチェックしながら作ります。
visudo -f /etc/sudoers.d/developersファイルの中にルールを 1 行で書きます。たとえば developers グループに全 sudo 権限を与えるルールは次のとおりです。
%developers ALL=(ALL) ALL特定のユーザーに特定のコマンドだけを許可するには、次のようにコマンドパスを並べます。
alice ALL=(ALL) /usr/bin/systemctl, /usr/sbin/lvextendNOPASSWD #
sudo 実行時にパスワードを尋ねないようにするには NOPASSWD: を付けます。
%developers ALL=(ALL) NOPASSWD: ALL特定のコマンドだけをパスワードなしで許可することもできます。
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpdRHCSA では「パスワードなしで sudo を使わせよ」または「特定のコマンドだけ sudo で許可せよ」のような変形が出るので、NOPASSWD とコマンドパスの指定を一緒に身につけておきます。
ACL: ファイルごとの細かい権限 #
標準権限の限界 #
伝統的な rwx 権限は、所有者・グループ・その他の 3 つの主体にしか権限を与えられません。「このファイルをグループ全体ではなく特定のユーザー 1 人にだけ読ませよ」のような要求は標準権限では解けません。このとき使うのが ACL (Access Control List) です。
getfacl で現在の ACL を確認する #
getfacl /data/report.txt出力で user::、group::、other:: は標準権限で、user:alice: のように名前が付いた項目が ACL で追加された権限です。
setfacl で ACL を付与する #
-m (modify) で権限を追加または変更します。
# ユーザー alice に読み・書きを付与
setfacl -m u:alice:rw /data/report.txt
# グループ developers に読み・実行を付与
setfacl -m g:developers:rx /data/report.txt-x (remove) で特定の ACL 項目を削除します。
setfacl -x u:alice /data/report.txtディレクトリ下のすべてのファイルに再帰で適用するには -R を付けます。
setfacl -R -m g:developers:rwx /data/projectACL をすべて消すには -b (remove all) を使います。
setfacl -b /data/report.txtmask を理解する #
ACL がかかったファイルには mask:: 項目ができます。mask は名前の付いたユーザー・グループ項目と基本グループに許可される権限の上限です。つまり user:alice:rwx があっても mask が r-- なら alice の実効権限は読みだけです。getfacl の出力の #effective: コメントが実効権限を教えてくれます。mask は普通 setfacl が自動的に調整しますが、直接指定することもできます。
setfacl -m m:rx /data/report.txtdefault ACL #
ディレクトリに default ACL をかけると、そのディレクトリの中に新しく作られるファイルとサブディレクトリが当該権限を継承します。d: プレフィックスを付けます。
setfacl -m d:g:developers:rwx /data/projectこうすると、これから /data/project の下に作られるファイルは developers グループに rwx ACL を持って生まれます。既存のファイルには影響しないので、既存のファイルまで一度に処理するには -R で通常の ACL も一緒にかけます。
setfacl -R -m g:developers:rwx -m d:g:developers:rwx /data/projectパスワードの有効期限ポリシー #
chage でアカウントごとのポリシーを見て変える #
chage (change age) はユーザーごとのパスワード有効期限ポリシーを扱います。現在のポリシーは -l で確認します。
chage -l aliceよく使うオプションは次のとおりです。
| オプション | 意味 |
|---|---|
-M | パスワードの最大使用日数 (以後変更を強制) |
-m | パスワードの最小使用日数 |
-W | 期限切れ前の警告日数 |
-E | アカウント有効期限日 (この日付以降ログイン不可) |
-d | 最終変更日の調整 (0 なら次回ログイン時に変更を強制) |
たとえばパスワードを 90 日ごとに変えさせ、アカウント有効期限日を指定する作業は次のとおりです。
# パスワードの最大使用 90 日
chage -M 90 alice
# アカウント有効期限日を 2026-12-31 に指定
chage -E 2026-12-31 alice
# 次回ログイン時にパスワード変更を強制
chage -d 0 aliceアカウント有効期限を解くには -E -1 を指定します。
chage -E -1 alice/etc/login.defs: 新規ユーザーの既定値 #
chage はすでにいるユーザーに適用するコマンドで、これから作るユーザーの既定ポリシーは /etc/login.defs で決めます。主な項目は次のとおりです。
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
UID_MIN 1000この値を変えると、以後 useradd で作るユーザーに適用されます。ただし既存のユーザーには適用されないので、すでにいるアカウントは chage で別途調整します。
アカウントのロック #
パスワードポリシーとは別に、アカウントを一時的に止めなければならないときがあります。usermod の -L (lock) はパスワードハッシュの前に ! を付けてパスワードログインを止め、-U (unlock) は解除します。
# アカウントのロック
usermod -L alice
# ロック解除
usermod -U alicepasswd -l と usermod -L は同じ効果を出します。ログイン自体を完全に止めるには、シェルを /sbin/nologin に変える方法も一緒に使います。
usermod -s /sbin/nologin alice試験ポイント #
- 補助グループの追加は
usermod -aG。-aを抜かすと既存の補助グループがまるごと消えます。追加するときは常に append を付けます。 - ユーザー削除時にホームまで消すには
userdel -r。-rを抜かすとホームディレクトリが残って減点されます。 - sudo の全権限は wheel グループ。「このユーザーに sudo を与えよ」という問題は
usermod -aG wheelで終わる場合が多いです。 - sudoers は visudo でのみ編集。drop-in は
visudo -f /etc/sudoers.d/ファイル名で作って文法チェックを通します。 - ACL は
setfacl -m u:名前:権限、確認はgetfacl。ディレクトリ継承が必要ならd:default ACL を、既存のファイルまでなら-Rを一緒に使います。 - mask が実効権限の上限。ACL をかけたのに権限が効かないなら、getfacl の
#effective:と mask を確認します。 - 有効期限ポリシーは chage、新規の既定値は /etc/login.defs。両者の適用対象が違う点を覚えておきます。
作業を終えた後は、id、getfacl、chage -l、sudo -l -U ユーザー で結果の状態を自分で確認する習慣を付けます。RHCSA は採点スクリプトが結果の状態を検査するので、コマンドを打って終わりにせず、意図した状態になったかを検証することが点数につながります。
まとめ #
この記事で押さえたこと:
- アカウント情報は /etc/passwd・shadow・group の 3 つのファイル に保存され、useradd・usermod・passwd・chage で安全に扱います。
- ユーザー作成は useradd -u/-g/-G/-s/-d、変更は usermod、補助グループの追加は
-aG、削除はuserdel -rです。 - グループは groupadd で作り、補助グループの所属は usermod や gpasswd で管理します。
- sudo は visudo で /etc/sudoers や /etc/sudoers.d/ を編集。wheel グループ、NOPASSWD、コマンドごとの許可が定番の変形です。
- ACL は getfacl/setfacl -m/-x/-R、mask と default ACL (
d:) まで扱います。 - パスワードポリシーは chage -l/-M/-m/-E、新規の既定値は /etc/login.defs、アカウントのロックは usermod -L です。
次へ: firewalld と SSH 鍵 #
ユーザーと権限を押さえたので、次はシステムの外側の境界を守る番です。#12 firewalld と SSH 鍵認証 では、firewall-cmd でポートとサービスを永続ルールとして開ける方法、zone の概念、そして ssh-keygen と ssh-copy-id でパスワードなしの鍵認証を構成する方法まで、自分で打ちながら整理します。