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