以前の記事で取り上げたユーザ管理コマンドやパーティション管理でもセキュリティの一部をになってはいますが、今回はとくにユーザパスワードの管理やログイン、管理者権限の管理について扱います。
ユーザパスワード管理
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 最終パスワード変更日 : 1月 01, 2021 パスワード期限: : 4月 01, 2021 パスワード無効化中 : 5月 01, 2021 アカウント期限切れ : なし パスワードが変更できるまでの最短日数 : 30 パスワードを変更しなくてよい最長日数 : 90 パスワード期限が切れる前に警告される日数 : 20
これまでの設定情報を図にすると以下のような感じですかね。
ログイン制御
ここではログインの禁止などで、Linuxアカウントのログインを制御する方法を確認します。
一般ユーザのログインを禁止するにはいくつかの方法があります。
ファイル作成によるログイン制御
■全一般ユーザのログインを禁止する
全一般ユーザのログインを禁止するには/etc/nologinファイルを作成します。
もちろん作成はrootユーザにて行います。
[root@server1 ~]# touch /etc/nologin [root@server1 ~]# ll /etc/nologin -rw-r--r--. 1 root root 0 1月 24 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::
これらのファイルによるロックはコマンドによるロックと連動しています。
試験的には気にしなくてよさそうですが、私が実機で確認したところ以下のような感じでした。あまり確信はないので参考程度に。
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