ユーザの種類
-
root
ユーザ - システムユーザ
- 一般ユーザ
root
ユーザ
- システム管理者専用
- UID:
0
- すべてのコマンドを実行できる
システムユーザ
- サービス、デーモンの実行専用
- UID:
1
~999
(ディストリビューションによって異なる場合あり) -
nobody
、daemon
、www-data
、mysql
など
一般ユーザ
- UID:
1000
以上 - それぞれのホームディレクトリ内のファイルや設定を管理できる
-
$ sudo
コマンドによって一部の管理権限を取得可能(sudo
グループに所属する場合)
/etc/passwd
/etc/passwd
の書式を間違えるとシステムが正常に動作しなくなるため、編集には $ vipw
や $ usermod
、$ passwd
を利用する
ユーザアカウント情報は /etc/passwd
ファイルに保存される。
/etc/passwd
は 1 ユーザあたりの情報が 1 行のテキストファイルになっていて、各項目は :
で区切られている。
パーミッション は通常、 -rw-r--r--
となっている。
ユーザ名:パスワード:UID:GID:コメント:ホームディレクトリ:ログインシェル
フィールド | 説明 |
---|---|
ユーザ名 | 最大 32 文字 |
パスワード | ユーザのパスワード。通常は x と表示される。実際のパスワードは シャドウパスワード として /etc/shadow に保存される。* もしくは ! :ログイン不可 |
コメント | ユーザの説明(フルネームなど) |
UID | ユーザID |
GID | ユーザが所属する プライマリグループ の GID |
ホームディレクトリ |
/root 、/home/ユーザ名 など(※ /home/ ) |
ログインシェル | ログイン時に自動で起動するシェル/bin/bash 、/usr/sbin/nologin など |
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
user1:x:1000:1000:User One:/home/user1:/bin/bash
/etc/shadow
ユーザパスワード情報を安全に格納するためのファイル。暗号化されたパスワードなどが格納される。
パーミッション は -rw------
で設定される。
ユーザ名:パスワード:最終変更日:最小日数:最大日数:警告日数:無効日数:有効期限:予約
root
ユーザしか読み取りができないようにされた各ユーザのパスワードが格納されたファイル。
昔は /etc/passwd
に x
ではなく直接パスワードが格納されていた。暗号化されて保存されていた場合も解読される恐れがあるため、今では /etc/shadow
が使用される。
フィールド | 説明 |
---|---|
ユーザ名 |
/etc/passwd に対応するユーザ名 |
パスワード | 暗号化されたパスワード* もしくは ! :ログイン不可!! :パスワード未設定 |
最終変更日 | UNIX時代(1970/1/1 )からの日数として格納されている。$ chage -l ユーザ名 で確認可能。 |
最小日数 | パスワード変更を強制するための最低間隔(日数)0 :制限なし |
最大日数 | パスワードの有効期間(日数)99999 :無期限 |
警告日数 | 有効期限前に警告を表示する日数7 :7日前から警告 |
無効日数 | 期限切れ後、アカウントを無効にするまでの日数14 :14日後に無効 |
有効期限 | アカウントの有効期限 |
予約 | 予約フィールド |
/etc/nologin
/etc/nologin
ファイルを作成することで、一時的に root
ユーザ以外のすべてのユーザのログインを拒否することができる。
$ touch /etc/nologin
/ets/nologin
は、ファイルの存在有無によって動作を制御するフラグファイル と呼ばれるテキストファイルであるため、ファイルの中身は特に必要ない。
システムメンテナンスなどで一時的に通常ユーザのログインを禁止する場合に利用される。
/sbin/nologin
/ /usr/sbin/nologin
システムユーザや特定のユーザのシステムへのログインを制限するための 実行可能ファイル。実体は何もしないで即座に 終了ステータス 1
を返すプログラム。
/etc/passwd
のログインシェルとして設定される。
ログインシェルとして /sbin/nologin
または /usr/sbin/nologin
が設定されたユーザがログインを試みた場合、以下のようなメッセージが表示される。
This account is currently not available.
/usr/sbin/nologin
の代わりに /bin/false
を使用することもできる。
Linux ディストリビューションの種類によって /sbin/nologin
または /usr/sbin/nologin
のどちらが使用されるかが異なり、どちらが使用されているかは $ which
で確認することができる。
$ which nologin
/bin/false
/usr/sbin/nologin
と同様の目的で使用される実行可能ファイル。
/usr/sbin/nologin
とは異なり、誤ってログインした場合にメッセージが表示されない(無言で失敗する)。
/etc/skel/
skeleton=骨格、骨組み、基盤
新しいユーザを作成する際に、そのホームディレクトリに自動的にコピーされるテンプレートファイルを格納するディレクトリ。
デフォルトで以下のファイルが既に作成されている。
$ ls -la /etc/skel/
total 20
drwxr-xr-x 2 root root 4096 Aug 27 2024 .
drwxr-xr-x 108 root root 4096 Feb 26 20:45 ..
-rw-r--r-- 1 root root 220 Mar 31 2024 .bash_logout
-rw-r--r-- 1 root root 3771 Mar 31 2024 .bashrc
-rw-r--r-- 1 root root 807 Mar 31 2024 .profile
以下は Bash の 設定ファイル。
.bash_logout
.bashrc
.profile
/etc/skel/
内のファイルを追加、または削除したとしても、既存のユーザのホームディレクトリは影響を受けない。
$ useradd
/ $ adduser
$ useradd ユーザ名
$ useradd オプション ユーザ名
オプションを省略した場合、/etc/default/useradd
の設定がデフォルトとして利用される。
オプション | 説明 |
---|---|
-u ユーザID --uid ユーザID
|
UID を指定する |
-g グループID --gid グループI
|
所属する プライマリグループ を指定する |
-G グループ名 --groups
|
所属する サブグループ を指定する(, で複数指定可) |
-d パス --home パス
|
ホームディレクトリのパスを指定する |
-c "コメント" --comment "コメント"
|
コメントを追加する |
-m --create-home
|
ホームディレクトリを作成する |
-s シェルのパス --shell シェルのパス
|
ログインシェル を指定する |
-p パスワード --password パスワード
|
パスワードを設定する 通常は $ passwd コマンドを コマンド置換 によって使用し、暗号化したパスワードを指定する |
-r システムユーザ名 --system システムユーザ名
|
システムユーザ を作成する |
ユーザを作成することにより、以下のファイルにエントリが追加される。
$ userdel
$ sudo userdel ユーザ名
$ sudo userdel -r ユーザ名
$ sudo userdel --remove ユーザ名
$ sudo userdel -f ユーザ名
$ sudo userdel --force ユーザ名
強制削除する場合、ユーザが起動したプロセスを削除しておく。
$ sudo killall -u ユーザ名
$ sudo pkill -KILL -u ユーザ名
$ usermod
ユーザ情報を変更する。
$ usermod [-option] ユーザ名
手動で /etc/passwd
ファイルを編集する方法もある。
$ usermod -l 新ユーザ名 旧ユーザ名
$ usermod -d 新しいパス -m ユーザ名
$ usermod -s シェルのパス ユーザ名
$ usermod -g グループ名 ユーザ名
$ usermod -G グループ名 ユーザ名
$ usermod -aG グループ名 ユーザ名
$ usermod -L ユーザ名
$ usermod -U ユーザ名
$ usermod -e YYYY-MM-DD ユーザ名 # 指定した日を過ぎるとログインできない
$ usermod -e "" ユーザ名 # 有効期限を無期限(制限なし)にする
$ uusermod -f 日数 ユーザ名 # 猶予期間中にパスワードの変更をしないとアカウントがロックされる
$ passwd
$ passwd # 自分のパスワードを変更する
$ sudo passwd 他人のユーザ名
パスワードは !
に変更することで、ログインにロックをかけることができる。
$ sudo passwd -l ユーザ名 # /etc/shadow のパスワードが ! に変更される
$ sudo passwd -u ユーザ名
$ passwd
コマンドの実体である /usr/bin/passwd
には SUID パーミッションが設定されている。SUID が設定された実行可能ファイルは、実行者の権限ではなく、所有者の権限で実行される。
/usr/bin/passwd
の所有者は root
ユーザであるため、$ passwd
は root
ユーザの権限で実行される。
そのため一般ユーザは、書き込み権限のない /etc/shadow
ファイルの自身のパスワードを変更することができる。
ただし /usr/bin/passwd
のプログラムの内部では、一般ユーザが「他のユーザのパスワード」を変更しようとした場合には、エラーを出すように制御されている。
$ passwd -x 日数 ユーザ名 # 期限を過ぎるとパスワードの変更が要求される
$ passwd -i 日数 ユーザ名 # 猶予期間中にパスワードの変更をしないとアカウントがロックされる
$ chage
change age
ユーザのパスワードとアカウントの有効期限を管理するためのコマンド。
$ chage [-option] ユーザ名
$ chage -l ユーザ名
$ chage -E YYYY-MM-DD ユーザ名
$ chage -E -1 ユーザ名 # 有効期限を無期限(制限なし)にする
$ chage -M 日数 ユーザ名 # 期限を過ぎるとパスワードの変更が要求される
$ chage -m 日数 ユーザ名 # 指定した日数が経過しないと、新しいパスワードに変更できない
$ chage -I 日数 ユーザ名 # 猶予期間中にパスワードの変更をしないとアカウントがロックされる
$ chage -d YYYY-MM-DD ユーザ名
YYYY-MM-DD
の代わりに 1970年1月1日 からの日数を指定してもよい。
$ chage -d 0 ユーザ名 # パスワードの変更日を期限切れの古いhに強制変更
グループの種類
複数のユーザをまとめて管理するための仕組み。
ファイルやディレクトリのアクセス制御を行う際に、個々のユーザではなくグループ単位で権限を設定できるため、管理がしやすくなる。
各ユーザは最低 1 つのグループに所属する。
1 人のユーザは複数のグループに所属することができる。
- プライマリグループ
- サブグループ
プライマリグループ
ユーザが所属するメインのグループ。
基本グループ とも呼ばれる。
ユーザがファイルを作成すると、自動的にプライマリグループがファイルの所有グループになる。
サブグループ
プライマリグループ以外に所属できるグループ。
参加グループ とも呼ばれる。
$ groups
コマンドで確認できる。
/etc/group
グループ情報は /etc/group
ファイルに保存される。
/etc/passwd
と同様に 1 グループあたりの情報が 1 行のテキストファイルになっていて、各項目は :
で区切られている。
パーミッション は通常、 -rw-r--r--
となっている。
グループ名:パスワード:GID:メンバー
フィールド | 説明 |
---|---|
グループ名 | グループの名前 |
パスワード | グループのパスワード。通常は x と表示される。実際のパスワードは シャドウパスワード として /etc/gshadow に保存される。 |
GID | グループ ID |
メンバー | グループに所属するユーザのリスト(カンマ , 区切り) |
/etc/gshadow
/etc/shadow
同様に、グループのパスワードが暗号化され、格納されたファイル。
$ groups
$ groups
$ groups ユーザ名
$ id
$ id ユーザ名
$ groupadd
$ groupadd グループ名
$ groupadd -g GID グループ名
$ groupdel
削除しようとするグループを プライマリグループ として所属しているユーザがいる場合、削除することはできない。
$ groupdel グループ名
$ groupmod
$ groupmod [-option] グループ名
$ groupmod g GID グループ名
$ groupmod -n 新グループ名 旧グループ名