Linux セキュリティのコマンド一覧
セキュリティのコースで覚えるコマンドの一覧です。cd・ls などの基本操作(pwd・cd・ls・ll・mkdir・touch・cp・mv・rm・cat・less・head・tail・echo・grep・wc・sort・uniq・awk・cut・vi・vim・exit・stat・date・which・hostname・chmod・chown・chgrp・systemctl・find・ps・kill・ss・journalctl・rpm・dnf・curl・crontab・firewall-cmd・semanage・restorecon)は最初から使えます。
id / groupsユーザーとグループの情報Lv1 で覚える
id [ユーザー] groups [ユーザー]
UID・GID・所属グループを表示します。
whoami今のユーザー名Lv1 で覚える
whoami
今どのユーザーとして操作しているかを表示します。
whoログインしている人Lv2 で覚える
who [-b] [-H] [-u] who am i
今ログインしているユーザーと端末(pts/0 など)・ログインした時刻・接続元を表示します。-b で最後に起動した時刻。
$ who $ who -b
wログインしている人と、していることLv3 で覚える
w [-h] [ユーザー]
1 行目は uptime と同じ(時刻・稼働時間・人数・負荷)。続いてユーザー・端末・接続元(FROM)・ログイン時刻・放置時間(IDLE)・実行中のコマンド(WHAT)。
$ w
chageパスワードの期限Lv4 で覚える
chage -l ユーザー sudo chage -M 最長日数 -m 最短日数 -W 警告日数 ユーザー sudo chage -E 2025-03-31 ユーザー(アカウントの期限。-1 で無期限) sudo chage -d 0 ユーザー(次のログインで変更させる)
/etc/shadow の期限の欄を表示・変更します。-l は自分のものなら一般ユーザーでも見られます。新しいユーザーの既定値は /etc/login.defs の PASS_MAX_DAYS など。
$ chage -l ec2-user $ sudo chage -M 90 -W 14 alice
passwdパスワードを設定Lv6 で覚える
passwd(自分) sudo passwd ユーザー echo 'パスワード' | sudo passwd --stdin ユーザー sudo passwd -l / -u ユーザー(ロック / 解除) sudo passwd -S ユーザー(状態) sudo passwd -e ユーザー(期限切れにする)
-S の 2 番目は PS(設定済み)・LK(ロック中)・NP(パスワードなし)。続いて最後に変えた日・最短・最長・警告・無効までの日数。--stdin は RHEL 系だけのオプションです。
$ sudo passwd -l bob $ sudo passwd -S bob
usermod / gpasswdユーザーの設定を変えるLv7 で覚える
usermod -aG グループ ユーザー usermod -s /sbin/nologin ユーザー(ログインさせない) usermod -L / -U ユーザー(パスワードのロック / 解除) usermod -e 2025-03-31 ユーザー(アカウントの期限) gpasswd -a ユーザー グループ
-a を付けずに -G だけだと、今のグループから外れてしまうので注意。-L はパスワードを止めるだけで、鍵での SSH ログインは止まりません。止めるなら -s /sbin/nologin や -e も使います。
$ sudo usermod -aG wheel bob $ sudo usermod -L -s /sbin/nologin olduser
umask新しいファイルの権限の初期値Lv8 で覚える
umask umask -S umask 077
新しいファイルは 666、ディレクトリは 777 から umask の分を引いた権限になります。022 なら 644/755、077 なら 600/700。シェルの組み込みコマンドで、今のシェルの間だけ有効です。
$ umask 077; touch secret.txt; ls -l secret.txt
ulimit使える資源の上限Lv9 で覚える
ulimit -a ulimit -n(開けるファイルの数) ulimit -u(プロセスの数) ulimit -Sn / -Hn(ソフト / ハード) ulimit -n 数
ソフトの上限はハードまで自分で上げ下げできますが、ハードを上げられるのは root だけ。利用者ごとの上限は /etc/security/limits.conf(と limits.d)に「ドメイン 種類 項目 値」で書き、次のログインから効きます。
$ ulimit -a $ sudo su - alice -c 'ulimit -u'
ssh-keygenSSH の鍵を作る・調べるLv11 で覚える
ssh-keygen -t ed25519 [-C コメント] [-f ファイル] [-N パスフレーズ] ssh-keygen -l -f 鍵のファイル(指紋) ssh-keygen -R ホスト(known_hosts から消す) ssh-keygen -y -f 秘密鍵(公開鍵を取り出す)
~/.ssh/id_ed25519(秘密鍵・600)と id_ed25519.pub(公開鍵)を作ります。秘密鍵は人に渡さず、公開鍵だけをサーバーに登録します。パスフレーズを付けると、鍵が盗まれてもすぐには使えません。
$ ssh-keygen -t ed25519 -C admin@example.com $ ssh-keygen -lf ~/.ssh/id_ed25519.pub
ssh-copy-id公開鍵をサーバーに登録Lv12 で覚える
ssh-copy-id [-i 公開鍵] [-p ポート] ユーザー@ホスト
パスワードで一度ログインして、相手の ~/.ssh/authorized_keys に公開鍵を足します(~/.ssh は 700、authorized_keys は 600 で作られます)。
$ ssh-copy-id alice@web01
ssh別のサーバーにログインLv13 で覚える
ssh [-i 秘密鍵] [-p ポート] ユーザー@ホスト [コマンド] ssh -o BatchMode=yes ユーザー@ホスト コマンド(パスワードを聞かない)
初めての相手ではホスト鍵の指紋を確かめて yes と答えると ~/.ssh/known_hosts に記録されます。サーバー側では ~/.ssh が他人に書ける・authorized_keys のラベルが違うなどの理由で鍵が使われないことがあり、理由は /var/log/secure に出ます。秘密鍵が 600 でないと ssh は鍵を使いません。
$ ssh alice@localhost $ ssh -i ~/.ssh/id_ed25519 -p 2222 admin@web01 hostname
sshd -t / -Tsshd の設定を確認Lv14 で覚える
sudo sshd -t sudo sshd -T sudo sshd -T -C user=ユーザー,addr=アドレス
-t は /etc/ssh/sshd_config と sshd_config.d/*.conf の書き方を確かめ、何も出なければ OK。-T は実際に使われる値を小文字のキーで全部表示します。同じキーは最初に書かれたものが有効なので、先頭で Include される sshd_config.d の値が優先されます。設定は systemctl reload sshd で反映されます。
$ sudo sshd -t && sudo systemctl reload sshd $ sudo sshd -T | grep -i passwordauthentication
fail2ban-clientfail2ban の操作Lv17 で覚える
sudo fail2ban-client status [jail] sudo fail2ban-client set sshd unbanip IP sudo fail2ban-client set sshd banip IP sudo fail2ban-client get sshd maxretry|bantime|findtime sudo fail2ban-client reload
ログインの失敗が多い接続元をファイアウォールで締め出します。設定は jail.conf を直接変えず /etc/fail2ban/jail.local に書きます(maxretry 回数・findtime の間に失敗すると bantime の間締め出す)。
$ sudo fail2ban-client status sshd $ sudo fail2ban-client set sshd unbanip 198.51.100.7
sudo / suroot などの権限で実行Lv26 で覚える
sudo コマンド sudo -i sudo -u ユーザー コマンド sudo -l(自分に許されたコマンド) sudo -l -U ユーザー(他人の権限)
/etc/sudoers と /etc/sudoers.d/ の決まりで許されたコマンドを実行します。許されていなければ「Sorry, user … is not allowed to execute …」、実行の記録は /var/log/secure に残ります。sudo -i で root のシェルへ、exit で戻ります。
$ sudo systemctl restart httpd $ sudo -l $ sudo -i
visudosudoers を安全に編集Lv27 で覚える
sudo visudo sudo visudo -f /etc/sudoers.d/ファイル sudo visudo -c sudo visudo -cf ファイル
保存する前に書き方を確かめるので、書き間違いで sudo が使えなくなるのを防げます。sudoers.d のファイルは 440・root:root で作られます。書き方は「ユーザー ホスト=(実行ユーザー) [NOPASSWD:] フルパスのコマンド」、%グループ で グループ。sudoers.d の中の . を含む名前のファイルは読まれません。
$ sudo visudo -f /etc/sudoers.d/deploy $ sudo visudo -c
chattr / lsattrファイルの属性(変更不可・追記だけ)Lv31 で覚える
sudo chattr +i ファイル(変更・削除できない) sudo chattr -i ファイル(外す) sudo chattr +a ファイル(追記だけ) lsattr ファイル
+i のファイルは root でも書き換え・削除・名前の変更ができません(Operation not permitted)。+a は >> での追記だけ。ログや重要な設定を守るのに使います。
$ sudo chattr +i /etc/resolv.conf $ lsattr /etc/resolv.conf
lsattrファイルの属性を表示Lv32 で覚える
lsattr [-d] [-R] [パス...]
i は変更不可、a は追記だけ。ディレクトリを指定すると中身を、-d でディレクトリ自身を表示します。
sha256sum / sha1sumファイルの指紋(ハッシュ)Lv34 で覚える
sha256sum ファイル... sha256sum ファイル > ファイル.sha256 sha256sum -c ファイル.sha256
中身が 1 文字でも違うと全く違う値になります。配布元が公開しているハッシュと比べて、壊れたり改ざんされたりしていないか確かめます。-c は OK / FAILED で照合結果を表示します。
$ sha256sum app.tar.gz $ sha256sum -c app.tar.gz.sha256
md5sumMD5 のハッシュLv35 で覚える
md5sum ファイル... md5sum -c ファイル.md5
使い方は sha256sum と同じ。MD5 は同じ値になる別のデータを作れてしまうため、改ざんの検知には sha256sum を使います。
openssl暗号・鍵・証明書の道具Lv36 で覚える
openssl rand -base64|-hex バイト数 openssl enc -aes-256-cbc -pbkdf2 -salt -in 元 -out 暗号文 [-pass file:パスワードのファイル] openssl enc -d -aes-256-cbc -pbkdf2 -in 暗号文 -out 元 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out 鍵 openssl pkey -in 鍵 -pubout -out 公開鍵 openssl req -new -key 鍵 -out CSR -subj '/CN=名前' openssl req -x509 -newkey rsa:2048 -nodes -keyout 鍵 -out 証明書 -days 日数 -subj … openssl x509 -in 証明書 -noout -subject -issuer -dates -fingerprint -checkend 秒 openssl s_client -connect ホスト:443 -servername ホスト openssl dgst -sha256 ファイル
-pass pass:… はパスワードがコマンドの履歴や ps に残るので、file: や env: を使います。-pbkdf2 を付けないと古い鍵の作り方の警告が出ます。秘密鍵は 600 で作られます。echo | openssl s_client … 2>/dev/null | openssl x509 -noout -enddate で相手の証明書の期限を調べられます。
$ openssl rand -base64 32 $ openssl x509 -in server.crt -noout -enddate $ echo | openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -subject -dates
getenforce / setenforce / sestatusSELinux のモードLv43 で覚える
getenforce sudo setenforce 0|1 sestatus
Enforcing は拒否する、Permissive は記録だけ。setenforce は今だけで、恒久的な設定は /etc/selinux/config。
sestatusSELinux の詳しい状態Lv44 で覚える
sestatus
SELinux が有効か、今のモード(Current mode)と設定ファイルのモード(Mode from config file)、ポリシーの名前を表示します。
setenforceSELinux のモードを今だけ変えるLv45 で覚える
sudo setenforce 0(Permissive) sudo setenforce 1(Enforcing)
再起動すると /etc/selinux/config の値に戻ります。問題の切り分けに一時的に使い、原因を直したら 1 に戻します。
chconSELinux のラベルを直接変えるLv46 で覚える
sudo chcon -t タイプ パス sudo chcon -R -t タイプ ディレクトリ
今のラベルだけを書き換えます。restorecon や再ラベルで元に戻るので一時的。ずっと使う場所は semanage fcontext で規則を足して restorecon します。
getseboolSELinux のスイッチを見るLv48 で覚える
getsebool 名前 getsebool -a | grep httpd
on / off を表示します。変えるのは setsebool。
getsebool / setseboolSELinux のスイッチ(ブール値)Lv49 で覚える
getsebool -a sudo setsebool -P 名前 on
httpd_can_network_connect など。-P で再起動後も残します。
ausearch監査ログを検索Lv50 で覚える
sudo ausearch -m AVC [-ts recent|today|時刻] [-c コマンド名]
/var/log/audit/audit.log から種類(-m)や時刻(-ts)で記録を探します。AVC は SELinux の拒否。scontext(誰が)・tcontext(何を)・tclass(種類)から原因を読み取ります。
$ sudo ausearch -m AVC -ts recent
lastログインの履歴Lv52 で覚える
last [-n 件数] [ユーザー] last reboot
新しい順に、ユーザー・端末・接続元・ログインした時刻とログアウトした時刻(still logged in はまだログイン中)を表示します。見慣れない接続元がないか確かめます。
$ last -n 10 $ last alice
lastb失敗したログインの履歴Lv53 で覚える
sudo lastb [-n 件数]
パスワードの間違いや存在しないユーザーでのログインの失敗(/var/log/btmp)。root だけが見られます。
$ sudo lastb | head
lastlogアカウントごとの最後のログインLv54 で覚える
lastlog [-u ユーザー] [-t 日数] [-b 日数]
全アカウントの最後のログインを表示します。**Never logged in** は一度もログインしていないもの。-b 90 で 90 日以上使われていないアカウントを探せます。
$ lastlog $ lastlog -b 90
faillockログインの失敗によるロックLv56 で覚える
sudo faillock --user ユーザー sudo faillock --user ユーザー --reset
pam_faillock の記録を表示・解除します。fail_interval 秒の間に deny 回失敗するとロックされ、unlock_time 秒たつか --reset で解除されます。設定は /etc/security/faillock.conf。
$ sudo faillock --user alice $ sudo faillock --user alice --reset