SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC102】Linuxにおけるユーザセキュリティの管理 LPICで学ぶLinux16


以前の記事で取り上げたユーザ管理コマンドやパーティション管理でもセキュリティの一部をになってはいますが、今回はとくにユーザパスワードの管理やログイン、管理者権限の管理について扱います。

■関連
www.wantanblog.com

ユーザパスワード管理

chageコマンド

chageコマンドはユーザパスワードの有効期限情報を変更するコマンドです。
「change password age」ですね。

パスワード自体の変更ではなく、オプションを使用して期限に関する様々な情報を設定することができます。

・オプション

オプション 内容
-l パスワードの有効期限情報を表示
-m パスワード変更間隔の最小日数を設定
-M パスワード変更間隔の最大日数を設定
-W 期限切れ警告を出す日数を設定
-E ユーザアカウントの有効期限を設定
-I パスワード期限切れ後にユーザロックされる日数

・パスワード変更間隔を設定する
最低30日後から変更できるようにし、90日まで有効にする。

[root@server1 wantan]# chage -m 30 -M 90 testuser

最低期間はあまり聞かない表現かもしれませんが、設定日数より前に変更しようとすると一般ユーザの権限では以下のようなメッセージが表示され、パスワードの変更を行うことができません。

[testuser@server1 home]$ passwd
ユーザー testuser のパスワードを変更。
testuser 用にパスワードを変更中
現在の UNIX パスワード:
パスワードを変更するには長く待つ必要があります
passwd: 認証トークン操作エラー

・期限切れ警告期間を設定する
期限切れ20日前から警告を表示する。

[root@server1 wantan]# chage -W 20 testuser

警告はログイン時に以下のようなメッセージで表示されます。

Warning: your password will expire in 90 days
Last login: Thu Jan 21 23:42:46 2021
[testuser@server1 ~]$

・パスワード期限切れ後のアカウントロック設定
パスワード期限切れ後の30日後にアカウントロックする

[root@server1 wantan]# chage -I 30 testuser

パスワード期限が切れているが、アカウントロックされていない場合。
ログインすると強制でパスワードの変更が求められる

You are required to change your password immediately (password aged)
Last login: Thu Jan 21 23:47:37 2021
WARNING: Your password has expired.
You must change your password now and login again!
ユーザー testuser のパスワードを変更。
testuser 用にパスワードを変更中
現在の UNIX パスワード:

パスワード期限が切れ、アカウントロックされている場合。
以下のようなメッセージが表示され、一般ユーザでのスイッチやログインができない。

[wantan@server1 testuser]$ su testuser
パスワード:
アカウントの有効期限が切れました。システム管理者にお問い合わせください。
su: 認証トークンの有効期限切れです

・対象ユーザのパスワード期限情報を表示する
他のオプションで設定した情報を表示できます。

[root@server1 wantan]# chage -l testuser
最終パスワード変更日                            : 101, 2021
パスワード期限:                                 :  401, 2021
パスワード無効化中                                      :  501, 2021
アカウント期限切れ                                              : なし
パスワードが変更できるまでの最短日数            : 30
パスワードを変更しなくてよい最長日数            : 90
パスワード期限が切れる前に警告される日数                : 20


これまでの設定情報を図にすると以下のような感じですかね。

f:id:wantanBlog:20210124004253p:plain

ログイン制御

ここではログインの禁止などで、Linuxアカウントのログインを制御する方法を確認します。

一般ユーザのログインを禁止するにはいくつかの方法があります。

ファイル作成によるログイン制御

■全一般ユーザのログインを禁止する

全一般ユーザのログインを禁止するには/etc/nologinファイルを作成します。
もちろん作成はrootユーザにて行います。

[root@server1 ~]# touch  /etc/nologin
[root@server1 ~]# ll /etc/nologin
-rw-r--r--. 1 root root 0  124 00:31 /etc/nologin

一般ユーザでログインしようとすると以下のようなメッセージが表示されログインできません。

authentication failed

rootユーザでログイン後にスイッチして切り替えることは可能です。
ログインを許可するにはファイルを消せばOKです。

[root@server1 ~]# rm /etc/nologin
rm: 通常の空ファイル `/etc/nologin' を削除しますか? y
ログインシェルによるログイン制御

■ログインシェルを変更する

特定のユーザのみログインを禁止するにはログインシェルの変更を行います。
シェル自体にも2種類あります。

・/bin/false

[root@server1 ~]# usermod -s /bin/false testuser

・/sbin/nologin

[root@server1 ~]# usermod -s /sbin/nologin wantan

ログインしようとすると以下のようなメッセージが表示されログインすることができません。

wantan@localhost's password:
Last login: Sun Jan 24 00:46:04 2021 from 192.168.142.1
This account is currently not available.
Connection to localhost closed.

補足としてはchsh(チェンジシェル)コマンドでもログインシェルを変更できます。

アカウントロックによるログイン制御

アカウントロックを行うことでも特定のユーザのログインを禁止することができます。

■コマンドによるロック

・usermodコマンド

ユーザのロックは「-L」オプションで実行する。

[root@server1 ~]# usermod -L testuser

以下のようにログインできなくなり、「-U」オプションにより解除できます。

[root@server1 ~]# ssh testuser@localhost
testuser@localhost's password:
Permission denied, please try again.
[root@server1 ~]# usermod -U testuser

・passwdコマンド

ユーザのロックは「-l」オプションで実行する。

[root@server1 ~]# passwd -l testuser
ユーザー testuser 用のパスワードをロック。
passwd: 成功
[root@server1 ~]#
[root@server1 ~]# ssh testuser@localhost
testuser@localhost's password:
Permission denied, please try again
[root@server1 ~]# passwd -u testuser
ユーザー testuser 用のパスワードをロック解除。
passwd: 成功
[root@server1 ~]#

注意点はusermodは大文字、passwdは小文字ということでしょうか。

■ファイル編集によるロック

以下の各ファイルのパスワード部分の先頭に「!」または「*」を追記することによりユーザロックを行います。

・/etc/passwd

[root@server1 ~]# cat /etc/passwd | grep test
testuser:!x:1001:1001:testcomment:/home/testuser:/bin/bash

・/etc/shadow

[root@server1 wantan]# cat /etc/shadow | grep testuser
testuser:!$6$5wSXLZlv$Zwv4Z5v9dZ5lFo4fLJ.7pk5pI/etua.rfO7Q8Ut.hCQxLBfQfGRt7tyK0HEMK9kZ1QMLtHh8l2O0STqKEZRD90:18628:30:90:20:30::

これらのファイルによるロックはコマンドによるロックと連動しています。
試験的には気にしなくてよさそうですが、私が実機で確認したところ以下のような感じでした。あまり確信はないので参考程度に。

f:id:wantanBlog:20210124021244p:plain

rootコマンド権限の管理

ユーザは一部の管理コマンドを一般ユーザ権限では実行できません。
しかし特定のコマンドあるいは全コマンドを一般ユーザに実行させたい場合、実行権限を与え「sudo」コマンドを用いることにより、実行できるようにできます。

・権限がない状態での実行の様子

[wantan@server1 ~]$ passwd -l testuser
root のみが実行できます。
[wantan@server1 ~]$ sudo passwd -l testuser
[sudo] wantan のパスワード:
wantan は sudoers ファイル内にありません。この事象は記録・報告されます。
[wantan@server1 ~]$
visudoコマンド

sudoの設定を行うには「visudo」コマンドを用います。
実態としては「/etc/sudoers」ファイルの編集を行うことになります。

[root@server1 wantan]# visudo


・/etc/sudoersの書式

/etc/sudoers」ファイルは以下のような書式で設定します。

[ユーザ(グループ)]  [ホスト]=[コマンド]

[コマンド]の前に実行ユーザの指定、末尾に「NOPASSWD:」をつけることでパスワード入力なしでの実行を設定することもできます。
[コマンド]は実行パスにより指定するため、通常は「/sbin」配下になると思います。

・グループに特定のコマンド実行権限を与える
以下では「group1」というグループにシャットダウンの実行権限を与えています。

%group1 localhost=/sbin/shutdown -h now

・ユーザに全コマンドの実行権限を与える

wantan ALL=ALL
sudoコマンド

与えた権限をsudoコマンドを用いて実行してみます。
パスワード(本人)の入力を行うとコマンドが実行できるようになっていることが確認できます。

[wantan@server1 ~]$ sudo passwd -l testuser
[sudo] wantan のパスワード:
ユーザー testuser 用のパスワードをロック。
passwd: 成功
[wantan@server1 ~]$

またsudoコマンドは「-l」オプションによりsudoコマンドで実行できるコマンドを確認することができます。

[wantan@server1 ~]$ sudo -l
既定値のエントリと照合中 (ユーザー名 wantan) (ホスト名
    server1):
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

ユーザー wantan は server1 上で コマンドを実行できます
    (root) ALL

システムリソースの制御コマンド

最後にシステムリソースに制御コマンドについて。

ulimitコマンド

システムリソースの制御は「ulimit」コマンドにより実行します。
本格的なサーバの管理などを行ったことがないと使う機会がないコマンドかもしれません、少なくても私は使ったことがない。

試験的には主要オプションがなにを表しているかが分かっていれば十分なレベルだと思います。

■主要オプション一覧

オプション 内容
-a 各制限値を表示する
-c コアファイルのサイズを制限
-f 出力ファイルサイズ(ブロック単位)を制限
-u ユーザ一人の最大プロセス数を制限
-v シェルが使用できる仮想メモリを制限
-n 同時に開けるファイル数を制限


・制限値を確認する

[root@server1 wantan]# ulimit -a wantan
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3796
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3796
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[root@server1 wantan]# ulimit -a wantan
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3796
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3796
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

・前回(第十五回)
www.wantanblog.com

・次回(第十七回)
www.wantanblog.com