Linux サーバー構築のコマンド一覧(LinuC レベル2 の範囲)

LinuC レベル 2 のコースで新しく覚えるコマンドの一覧です。Linux レベル1で覚えたコマンドは最初から使えます。

firewall-cmdファイアウォール(firewalld)の設定Lv1 で覚える

firewall-cmd --state / --get-active-zones / --get-default-zone
firewall-cmd [--zone=ゾーン] --list-all
firewall-cmd --add-service=http|--remove-service=… [--permanent]
firewall-cmd --add-port=8080/tcp [--permanent]
firewall-cmd --zone=trusted --add-source=10.0.0.0/24
firewall-cmd --add-rich-rule='rule family=ipv4 source address=… service name=ssh accept'
firewall-cmd --reload / --runtime-to-permanent

--permanent は設定ファイルにだけ書き、--reload で反映します。--permanent なしは今だけ(--runtime-to-permanent で保存)。送信元(source)を結び付けたゾーンは、その送信元の通信に優先して使われます。

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload

getenforce / setenforce / sestatusSELinux のモードLv3 で覚える

getenforce
sudo setenforce 0|1
sestatus

Enforcing は拒否する、Permissive は記録だけ。setenforce は今だけで、恒久的な設定は /etc/selinux/config。

setenforceSELinux のモードを今だけ変えるLv4 で覚える

sudo setenforce 0(Permissive)
sudo setenforce 1(Enforcing)

再起動すると /etc/selinux/config の値に戻ります。問題の切り分けに一時的に使い、原因を直したら 1 に戻します。

sestatusSELinux の詳しい状態Lv5 で覚える

sestatus

SELinux が有効か、今のモード(Current mode)と設定ファイルのモード(Mode from config file)、ポリシーの名前を表示します。

restorecon / chconSELinux のラベルを直すLv6 で覚える

sudo restorecon -Rv パス
sudo chcon -t タイプ パス

restorecon は場所に応じた正しいラベルに戻します。mv で持ってきたファイルによく使います。

$ sudo restorecon -Rv /var/www/html

chconSELinux のラベルを直接変えるLv7 で覚える

sudo chcon -t タイプ パス
sudo chcon -R -t タイプ ディレクトリ

今のラベルだけを書き換えます。restorecon や再ラベルで元に戻るので一時的。ずっと使う場所は semanage fcontext で規則を足して restorecon します。

semanageSELinux のポリシー設定Lv8 で覚える

sudo semanage port -a -t http_port_t -p tcp 番号
sudo semanage fcontext -a -t タイプ 'パス(/.*)?'
semanage port -l

Web サーバーに標準以外のポートを使わせるときや、独自の場所にラベルの規則を足すときに使います。

ausearch監査ログを検索Lv9 で覚える

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

getseboolSELinux のスイッチを見るLv10 で覚える

getsebool 名前
getsebool -a | grep httpd

on / off を表示します。変えるのは setsebool。

getsebool / setseboolSELinux のスイッチ(ブール値)Lv11 で覚える

getsebool -a
sudo setsebool -P 名前 on

httpd_can_network_connect など。-P で再起動後も残します。

lsblkディスクとパーティションを木の形で見るLv12 で覚える

lsblk [-f] [-p] [デバイス]
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

ディスク(disk)・パーティション(part)・LVM(lvm)・RAID(raid1 など)の親子と大きさ・マウント先を出します。-f でファイルシステムの種類・ラベル・UUID、-p でフルパス。

$ lsblk
$ lsblk -f

blkidUUID・ラベル・種類を調べるLv13 で覚える

blkid [デバイス]
blkid -s UUID -o value デバイス(値だけ)
blkid -L ラベル / -U UUID(デバイスを探す)

ファイルシステムの UUID・LABEL・TYPE(xfs・ext4・swap・LVM2_member など)を出します。fstab に書く UUID はここで調べます。

$ sudo blkid /dev/sdb1
$ blkid -s UUID -o value /dev/sdb1

fdiskパーティションを作る(対話)Lv14 で覚える

sudo fdisk -l [ディスク](見るだけ)
sudo fdisk ディスク(対話)

対話では 1 文字のコマンドを打ちます:g は新しい GPT、o は新しい DOS(MBR)、n は作る、d は消す、t は種類(linux・swap・lvm・raid)、p は表示、w は書いて終わる、q は書かずに終わる。w するまでディスクは変わりません。

$ sudo fdisk -l /dev/sdb
$ sudo fdisk /dev/sdb

parted / partprobeパーティションを作る(1 行で)Lv15 で覚える

sudo parted -s ディスク mklabel gpt
sudo parted -s ディスク mkpart 名前 [種類] 始まり 終わり
sudo parted ディスク print
sudo parted -s ディスク rm 番号
sudo parted -s ディスク set 番号 lvm on

-s を付けると聞き返さずに実行します。位置は 1MiB・2GiB・100% のように書きます(単位を書かないと MB)。mkpart の種類(xfs など)は目印で、ファイルシステムは作りません。fdisk と違い、打ったその場でディスクに書きます。

$ sudo parted -s /dev/sdc mklabel gpt mkpart data xfs 1MiB 100%
$ sudo parted /dev/sdc print

mkfs / mkfs.xfs / mkfs.ext4ファイルシステムを作るLv16 で覚える

sudo mkfs.xfs [-f] [-L ラベル] デバイス
sudo mkfs.ext4 [-L ラベル] [-m 予約%] デバイス
sudo mkfs -t 種類 デバイス

デバイスに床(ファイルシステム)を張ります。前の中身は消えます。古いファイルシステムがあると mkfs.xfs は -f が要り、mkfs.ext4 は Proceed anyway? と聞きます。マウント中のものには作れません。

$ sudo mkfs.xfs -L data /dev/sdb1
$ sudo mkfs.ext4 -L backup /dev/sdb2

mountファイルシステムをつなぐLv17 で覚える

sudo mount デバイス マウントポイント
sudo mount -t 種類 -o オプション デバイス マウントポイント
sudo mount UUID=… / LABEL=… マウントポイント
sudo mount マウントポイント(fstab から)
sudo mount -a(fstab のものを全部)
sudo mount -o remount,rw マウントポイント
mount -t xfs(一覧)

マウントポイント(空のディレクトリ)にファイルシステムをつなぎます。つないでいる間、元のディレクトリの中身は隠れます。fstab を書き換えたら systemctl daemon-reload を。XFS のスナップショットは -o nouuid が要ります。

$ sudo mount /dev/sdb1 /data
$ sudo mount -a

umountファイルシステムを外すLv18 で覚える

sudo umount マウントポイント|デバイス

使っている人(そこにいるシェル・開いているプロセス)がいると target is busy で外せません。fuser -vm で探します。

$ sudo umount /data

findmntマウントの一覧・fstab の点検Lv19 で覚える

findmnt [マウントポイント|デバイス]
findmnt -t xfs
findmnt -s(fstab の中身)
sudo findmnt --verify(fstab の誤りを探す)

マウントを木の形で出します。--verify は fstab の書き間違い(無いデバイス・種類の違い・無いマウントポイント)を [E]・[W] で教えてくれます。再起動の前に必ず。

$ findmnt /data
$ sudo findmnt --verify

fuser使っているプロセスを探すLv20 で覚える

fuser -vm マウントポイント
sudo fuser -km マウントポイント(止める)

-m はそのファイルシステムを使っているもの全部、-v は詳しく。ACCESS の c はそこにいる(カレントディレクトリ)、F はファイルを開いている。

$ sudo fuser -vm /data

mkswapスワップ領域を作るLv22 で覚える

sudo mkswap [-L ラベル] デバイス|ファイル

パーティションかファイルをスワップにします。ファイルは先に dd で作り、chmod 600 にします。

$ sudo mkswap /dev/sdb2
$ sudo mkswap /swapfile

swapon / swapoffスワップを使う・やめるLv23 で覚える

swapon --show(一覧)
sudo swapon デバイス|ファイル
sudo swapon -a(fstab のものを全部)
sudo swapoff デバイス|ファイル

fstab には「UUID=… none swap defaults 0 0」と書きます。free -h の Swap: の行でも確かめられます。

$ sudo swapon /swapfile
$ swapon --show

dd / wipefs決まった大きさのファイルを作る・中身を写すLv24 で覚える

dd if=/dev/zero of=ファイル bs=1M count=回数

if(読む元)から bs の大きさで count 回読んで of(書く先)へ書きます。/dev/zero から読むと 0 で埋まったファイルになり、スワップファイル作りに使います。of にディスクを書くと中身が消えるので注意。印(ファイルシステム・PV・区切り表など)だけを消すなら wipefs -a デバイス(-a なしなら印を見るだけ)。

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=512
$ sudo wipefs /dev/sdb1

fsck / e2fsckファイルシステムを調べて直す(ext 系)Lv25 で覚える

sudo fsck [-y] デバイス
sudo e2fsck -n デバイス(調べるだけ)
sudo e2fsck -f デバイス(きれいでも調べる)

必ずアンマウントしてから使います。-y はすべて直す、-n は何も変えない。xfs には効かない(xfs_repair を使う)。

$ sudo umount /backup && sudo fsck -y /dev/sdb1

xfs_repairXFS を調べて直すLv26 で覚える

sudo xfs_repair デバイス
sudo xfs_repair -n デバイス(調べるだけ)

XFS は fsck ではなくこちらで直します。マウント中は使えません。mount が Structure needs cleaning で失敗したときに使います。

$ sudo xfs_repair /dev/sdb1

tune2fs / e2labelext 系の設定を見る・変えるLv27 で覚える

sudo tune2fs -l デバイス(一覧)
sudo tune2fs -L ラベル デバイス
sudo tune2fs -m 予約% デバイス
sudo tune2fs -c 回数 デバイス(最大マウント回数)
sudo e2label デバイス [ラベル]

予約ブロック(root のための取り置き。既定 5%)を減らすと、大きなデータ用のディスクで空きが増えます。マウント中でも変えられます。

$ sudo tune2fs -l /dev/sdb1
$ sudo tune2fs -m 1 /dev/sdb1

dumpe2fsext 系の中身を詳しく出すLv28 で覚える

sudo dumpe2fs -h デバイス(見出しだけ)

-h でスーパーブロックの情報(Inode count・Block count など)。-h なしではブロックグループごとの細かい情報も出ます。

$ sudo dumpe2fs -h /dev/sdb1 | grep -i 'inode count'

xfs_infoXFS の作りを見るLv29 で覚える

xfs_info マウントポイント|デバイス

ブロックの大きさ(bsize)・数(blocks)・ログの大きさなど、mkfs.xfs のときと同じ形で出します。

$ xfs_info /data

xfs_adminXFS のラベル・UUID を変えるLv30 で覚える

sudo xfs_admin -l デバイス(ラベルを見る)
sudo xfs_admin -L ラベル デバイス
sudo xfs_admin -U generate デバイス(新しい UUID)

ラベル(-L)はマウントしたままでも変えられます(中で xfs_io を使う)。UUID(-U)を変えるときはアンマウントが要ります。

$ sudo xfs_admin -L data /dev/sdc1

pvcreate / pvremovePV(LVM の材料)を作るLv32 で覚える

sudo pvcreate デバイス...
sudo pvremove デバイス

ディスクやパーティションを LVM で使えるようにします。古いファイルシステムがあると Wipe it? と聞きます(-y で聞かずに消す)。

$ sudo pvcreate /dev/sdb /dev/sdc1

pvsPV の一覧Lv33 で覚える

sudo pvs

PV・入っている VG・大きさ(PSize)・空き(PFree)を 1 行ずつ出します。< は「少し小さい」の印です。

$ sudo pvs

pvdisplayPV の詳しい情報Lv34 で覚える

sudo pvdisplay [PV]

PE Size(エクステントの大きさ)・Total PE・Free PE などを出します。

$ sudo pvdisplay /dev/sdb

vgcreate / vgremoveVG を作るLv35 で覚える

sudo vgcreate [-s エクステントの大きさ] VG名 PV...
sudo vgremove VG名

PV を束ねて 1 つの大きな土台(VG)にします。PV でないデバイスを書くと、pvcreate もしてくれます。エクステントの既定は 4 MiB。

$ sudo vgcreate vgdata /dev/sdb /dev/sdc

vgextend / vgreduceVG に PV を足す・外すLv36 で覚える

sudo vgextend VG名 PV...
sudo vgreduce VG名 PV

空きが足りなくなったら、新しいディスクを足して VG を大きくします。使っている PV は外せません。

$ sudo vgextend vgdata /dev/sdd

vgsVG の一覧Lv37 で覚える

sudo vgs

#PV(PV の数)・#LV・#SN(スナップショット)・VSize・VFree(空き)を出します。

$ sudo vgs

vgdisplayVG の詳しい情報Lv38 で覚える

sudo vgdisplay [VG名]

PE Size・Total PE・Alloc PE / Size(使っている)・Free PE / Size(空き)を出します。

$ sudo vgdisplay vgdata

lvcreateLV を作る・スナップショットを撮るLv39 で覚える

sudo lvcreate -L 大きさ -n LV名 VG名
sudo lvcreate -l 100%FREE -n LV名 VG名
sudo lvcreate -s -L 大きさ -n 名前 VG名/LV名(スナップショット)

VG から部屋(LV)を切り出します。-L は 2G・500M のような大きさ、-l はエクステントの数か %FREE・%VG。できた LV は /dev/VG名/LV名(/dev/mapper/VG名-LV名)。

$ sudo lvcreate -L 1G -n lvweb vgdata

lvsLV の一覧Lv40 で覚える

sudo lvs

Attr の 5 文字目 a は使える、6 文字目 o はマウントなどで使用中。1 文字目 s はスナップショット、o はスナップショットの元。Origin・Data%(スナップショットの使用率)も出ます。

$ sudo lvs

lvdisplayLV の詳しい情報Lv41 で覚える

sudo lvdisplay [VG名/LV名]

LV Path・LV Size・Current LE(エクステントの数)・# open(使用中の数)を出します。

$ sudo lvdisplay vgdata/lvweb

lvextendLV を広げるLv42 で覚える

sudo lvextend -L +大きさ [-r] LV
sudo lvextend -l +100%FREE [-r] LV

-r(--resizefs)を付けると、中のファイルシステム(xfs・ext4)も一緒に広げます。付け忘れたら xfs_growfs か resize2fs。VG に空きが無ければ先に vgextend。

$ sudo lvextend -r -L +1G /dev/vgdata/lvdata

xfs_growfsXFS を広げるLv43 で覚える

sudo xfs_growfs マウントポイント

LV などを広げた後、ファイルシステムをデバイスいっぱいまで広げます。マウントしたまま使います。XFS は縮められません。

$ sudo xfs_growfs /data

resize2fsext 系を広げる・縮めるLv44 で覚える

sudo resize2fs デバイス [大きさ]

大きさを書かないとデバイスいっぱいまで広げます。広げるのはマウントしたままでよく、縮めるのはアンマウントして e2fsck -f をしてから。

$ sudo resize2fs /dev/vgdata/lvbackup

lvreduceLV を縮める(ext4 だけ)Lv45 で覚える

sudo lvreduce -r -L 大きさ LV

-r でファイルシステムを先に縮めます(いったんアンマウントし、e2fsck・resize2fs をしてから戻します)。XFS は縮められません。-r なしで縮めるとデータが壊れます。

$ sudo lvreduce -r -L 1G /dev/vgdata/lvarchive

lvremoveLV を消すLv46 で覚える

sudo lvremove [-y] LV

中身ごと消えます。マウント中は消せません。消してよいか聞かれるので y と答えるか -y を付けます。

$ sudo lvremove -y /dev/vgdata/snap

lvconvert / lvchangeスナップショットを元に戻すLv47 で覚える

sudo lvconvert --merge VG名/スナップショット
sudo lvchange -an / -ay LV(止める・使えるようにする)

--merge で元の LV をスナップショットを撮った時点に戻します(スナップショットは消えます)。元の LV をアンマウントしてからにすると、その場で戻ります。

$ sudo umount /data && sudo lvconvert --merge vgdata/snap

mdadmソフトウェア RAID を作る・直すLv48 で覚える

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 デバイス...
sudo mdadm --detail /dev/md0
sudo mdadm --detail --scan(mdadm.conf の行)
sudo mdadm /dev/md0 --fail デバイス / --remove デバイス / --add デバイス
sudo mdadm --stop /dev/md0
sudo mdadm --assemble /dev/md0 デバイス... / --assemble --scan
sudo mdadm --examine デバイス

RAID 0 は速いが 1 台壊れると全部失う、RAID 1 は 2 台に同じものを書く、RAID 5 は 3 台以上でパリティを持つ。状態は cat /proc/mdstat([UU] は全部元気、[U_] は 1 台欠け)。起動のときは /etc/mdadm.conf に書いた名前で組み立て、書いていなければ md127 になります。mdadm パッケージが要ります。

$ sudo mdadm --detail /dev/md0
$ cat /proc/mdstat

tracepath宛先までの通り道(root 不要)Lv52 で覚える

tracepath 宛先

traceroute と同じく、通るルーターを順に出します。reached で宛先に届いたこと、no reply はその先から返事が無いことを表します。

$ tracepath 10.0.3.20

traceroute宛先までの通り道を表示Lv52 で覚える

traceroute ホスト

パケットが通るルーターを順に表示します。* * * はその先から返事がないことを表します。traceroute パッケージに入っています。

$ traceroute 10.0.2.10

arping同じ線の相手に ARP で問いかけるLv58 で覚える

arping -c 回数 -I 装置 IP アドレス
arping -D -I 装置 IP アドレス(重複の確かめ)

返事の [ ] の中が相手の MAC アドレス。-D は「この番地を使っている人がいないか」を確かめ、返事があれば重複しています。

$ arping -c 2 -I ens5 10.0.2.1
$ arping -D -I ens5 10.0.2.60

tcpdump流れているパケットを見るLv59 で覚える

sudo tcpdump -i 装置 -nn [-c 数] [条件]
sudo tcpdump -i ens5 -w ファイル
tcpdump -r ファイル

条件は host・port・src・dst・net・icmp・tcp・udp・arp と and・or・not。-n は IP を、-nn はポートも数字のまま出します。Flags [S] は接続の始まり(SYN)、[S.] はその返事、[R.] は断り(RST)。動き出してから流れたパケットだけが見えます。止めるまで待ち続けるので、-c で数を決めるか Ctrl+C で止めます。後ろで動かすなら & を付け、kill %1 で止めます。

$ sudo tcpdump -i ens5 -nn -c 4 icmp
$ sudo tcpdump -i ens5 -nn -w /tmp/x.pcap port 80 &

nc(ncat)ポートにつないで確かめるLv60 で覚える

nc -zv ホスト ポート(開いているか)
nc -l ポート(待ち受ける)
echo 文字 | nc ホスト ポート(話しかける)

Connected なら開いている、Connection refused は待ち受けていない、TIMEOUT は途中で止められている(ファイアウォール)ことが多い。nc -l はつないでくる相手を待ち続け、届いた文字を出して終わります(-k なら続ける。Ctrl+C で止める)。nmap-ncat パッケージに入っています。

$ nc -zv 10.0.3.20 80
$ nc -l 9000 > /tmp/got.txt &

namedDNS サーバー(BIND)Lv62 で覚える

sudo dnf install -y bind bind-utils
sudo systemctl enable --now named
named -v(版)

設定は /etc/named.conf、ゾーンファイルは /var/named。起動のときに named-checkconf -z で確かめ、誤りがあると起動しません。書き換えたら rndc reload か systemctl reload named で読み込みます。外から問い合わせるには firewalld で dns を許可します。

$ sudo systemctl enable --now named
$ dig @127.0.0.1 example.com

named-checkconfnamed.conf の書き方を確かめるLv66 で覚える

sudo named-checkconf
sudo named-checkconf -z(ゾーンも読む)

何も出なければ OK。「missing ';' before …」はその前の行の ; 忘れ、「unknown option」は綴りの誤りです。-z を付けるとゾーンファイルも読んで loaded serial を出します。

$ sudo named-checkconf -z

named-checkzoneゾーンファイルを確かめるLv67 で覚える

named-checkzone ゾーン名 ファイル

OK と loaded serial が出れば読めます。bad dotted quad は A の番地の誤り、has no address records は NS や MX の名前の誤り(最後のドット忘れ)、CNAME and other data は CNAME と同じ名前にほかのレコードがあることを表します。

$ sudo named-checkzone guild.lan /var/named/guild.lan.zone

rndc動いている named を操るLv68 で覚える

sudo rndc status
sudo rndc reload [ゾーン]
sudo rndc zonestatus ゾーン
sudo rndc notify ゾーン
sudo rndc retransfer ゾーン(セカンダリ)
sudo rndc flush
sudo rndc flushname 名前

reload は設定とゾーンを読み直します(reload ゾーン名 は named.conf を読まず、そのゾーンだけ)。flush・flushname はキャッシュを捨てます。ゾーンを書き換えたら SOA のシリアルを増やしてから reload。シリアルが増えないと、セカンダリは写しを取り直しません。

$ sudo rndc reload
$ sudo rndc zonestatus guild.lan

htpasswdBasic 認証のパスワードのファイルを作るLv72 で覚える

htpasswd -c ファイル 利用者(作る・上書き)
htpasswd ファイル 利用者(足す・変える)
htpasswd -b ファイル 利用者 パスワード
htpasswd -D ファイル 利用者(消す)
htpasswd -v ファイル 利用者(確かめる)

Apache の AuthUserFile に書くファイルを作ります。-c は新しく作るので、2 人目からは付けません(付けると 1 人目が消えます)。-B で bcrypt。httpd-tools パッケージに入っています。

$ sudo htpasswd -c /etc/httpd/.htpasswd alice
$ sudo htpasswd /etc/httpd/.htpasswd bob

openssl暗号・鍵・証明書の道具Lv73 で覚える

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

nginx -tnginx の設定を確認Lv74 で覚える

nginx -t

設定ファイルの文法をチェックします。

testparmsmb.conf を確かめるLv75 で覚える

testparm [-s] [ファイル]

/etc/samba/smb.conf の書き方を確かめ、整えた中身を出します。知らないパラメーター(つづりの誤り)は Unknown parameter と出ます。-s は Enter を待たずに出します。

$ testparm -s

smbclientSamba の共有に入るLv76 で覚える

smbclient -L //ホスト -U 利用者%パスワード(共有の一覧)
smbclient //ホスト/共有 -U 利用者%パスワード -c 'ls'
smbclient //ホスト/共有 -U 利用者 -c 'put ファイル'

Windows のファイル共有(SMB)につなぐ道具です。-c に ls・put・get・mkdir を ; で並べます。-N はパスワードなし(ゲスト)。samba-client パッケージに入っています。

$ smbclient -L //localhost -U alice%Secret1
$ smbclient //localhost/guild -U alice%Secret1 -c 'ls'

smbpasswdSamba の利用者を登録するLv77 で覚える

sudo smbpasswd -a 利用者(足す)
sudo smbpasswd -x 利用者(消す)
sudo smbpasswd -d / -e 利用者(止める・戻す)

Samba は Linux とは別のパスワードを持ちます。同じ名前の Linux のユーザーがいないと足せません。

$ sudo smbpasswd -a alice

pdbeditSamba の利用者の一覧Lv78 で覚える

sudo pdbedit -L [-v]
sudo pdbedit -x 利用者

smbpasswd で登録した利用者(passdb.tdb)を一覧します。-v で詳しく。

$ sudo pdbedit -L

exportfsNFS の公開を反映するLv79 で覚える

sudo exportfs -arv(/etc/exports を読み直す)
sudo exportfs -v(今の公開と設定)
sudo exportfs -u 相手:パス(外す)

/etc/exports の「パス 相手(設定)」を公開します。相手と ( の間に空白を入れると別の意味(誰にでも公開)になるので注意。設定は rw・ro・sync・root_squash(root を nobody 扱い)など。nfs-utils パッケージ。

$ sudo exportfs -arv
$ sudo exportfs -v

showmountNFS サーバーの公開を見るLv80 で覚える

showmount -e [サーバー]

サーバーが公開しているディレクトリと、許している相手を出します。

$ showmount -e fileserver

dhcpdDHCP サーバーLv83 で覚える

dhcpd -t -cf /etc/dhcp/dhcpd.conf(書き方の確認)
sudo systemctl start dhcpd

/etc/dhcp/dhcpd.conf の subnet { range・option routers・option domain-name-servers } で配る番地を決め、host { hardware ethernet・fixed-address } で決まった機器に決まった番地を配ります。貸した記録は /var/lib/dhcpd/dhcpd.leases。設定を変えたら restart します。

$ dhcpd -t -cf /etc/dhcp/dhcpd.conf
$ cat /var/lib/dhcpd/dhcpd.leases

mail / sendmailメールを送るLv84 で覚える

echo 本文 | mail -s 件名 宛先
sendmail 宛先 < 手紙のファイル
mail(自分の受信箱の一覧)

mail は s-nail パッケージ。送った手紙は Postfix のキューに入り、宛先に配られます。記録は /var/log/maillog。

$ echo 'hello' | mail -s 'test' alice
$ sudo tail /var/log/maillog

postconf / postfixPostfix の設定を見る・変えるLv85 で覚える

postconf -n(書いた設定)
postconf 名前(今の値)
sudo postconf -e '名前 = 値'(変える)
sudo postfix reload / check

設定は /etc/postfix/main.cf。myhostname・mydomain・inet_interfaces・mydestination・relayhost・home_mailbox などがあります。変えたら postfix reload(inet_interfaces は restart)。

$ postconf -n
$ sudo postconf -e 'inet_interfaces = all'
$ sudo postfix reload

mailqメールのキューを見るLv86 で覚える

mailq
postqueue -p

届けられずに待っている手紙(deferred)と、その理由を出します。* は配っている最中、! は止めたもの。

$ mailq

postqueueキューの手紙を送り直すLv86 で覚える

postqueue -f(全部)
postqueue -i ID(1 通)
postqueue -p(一覧)

設定を直したあと、待っている手紙を今すぐ送り直します。

$ sudo postqueue -f

postsuperキューの手紙を消す・止めるLv87 で覚える

sudo postsuper -d ID
sudo postsuper -d ALL [deferred]
mailq の ID を | で渡すときは -d -
sudo postsuper -h ID / -H ID(止める・戻す)

要らない手紙をキューから消します。ALL は全部なので、消してよいか mailq で確かめてから。

$ sudo postsuper -d 4F2A81C0B2
$ sudo postsuper -d ALL deferred

newaliasesメールの別名を反映するLv88 で覚える

sudo newaliases

/etc/aliases(別名: 宛先, 宛先)を書き換えたら、newaliases で /etc/aliases.db を作り直すまで効きません。

$ echo 'support: alice, bob' | sudo tee -a /etc/aliases
$ sudo newaliases

doveconfDovecot の設定を見るLv89 で覚える

doveconf -n(既定と違う設定)
doveconf 名前(値)

設定は /etc/dovecot/dovecot.conf と conf.d/*.conf。protocols(imap・pop3)・mail_location(maildir:~/Maildir など)・ssl。変えたら systemctl restart dovecot。

$ doveconf -n
$ doveconf mail_location

faillockログインの失敗によるロックLv90 で覚える

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

ldapsearchLDAP の名簿を引くLv91 で覚える

ldapsearch -x -H ldap://ホスト -b ベースDN '(uid=名前)' [属性...]
ldapsearch -x -LLL …(コメントなし)
ldapsearch -x -D 管理者DN -W …

-x はパスワードで入る単純な認証(付けないと Kerberos を試して失敗します)。-b はどこから下を探すか、フィルターは (属性=値)、(&(…)(…)) で「かつ」。/etc/openldap/ldap.conf の BASE と URI に書けば -H と -b を省けます。

$ ldapsearch -x -H ldap://ldap.guild.example -b dc=guild,dc=example '(uid=alice)'
$ ldapsearch -x -LLL '(objectClass=posixGroup)' cn memberUid

ldapadd / ldapmodifyLDAP に項目を足す・変えるLv92 で覚える

ldapadd -x -D 管理者DN -W -f ファイル.ldif
ldapmodify -x -D 管理者DN -W -f ファイル.ldif

LDIF(dn: から始まり、属性: 値 を並べたもの)で項目を足します。変更は changetype: modify と add:・replace:・delete:。管理者で入らないと Strong(er) authentication required になります。

$ ldapadd -x -D cn=admin,dc=guild,dc=example -W -f carol.ldif

authselectログインの名簿と認証の組み合わせを選ぶLv93 で覚える

authselect current
sudo authselect select sssd [with-mkhomedir] --force
sudo authselect enable-feature with-faillock

/etc/nsswitch.conf と /etc/pam.d/system-auth・password-auth をまとめて書き換えます。sssd を選ぶと LDAP の利用者も getent・id・ログインで使えます。with-mkhomedir は初めてのログインでホームを作ります(oddjobd が要る)。

$ authselect current
$ sudo authselect select sssd with-mkhomedir --force

sss_cachesssd が覚えている利用者を消すLv94 で覚える

sudo sss_cache -E(すべて)
sudo sss_cache -u 利用者

sssd は LDAP から引いた利用者・グループをしばらく(entry_cache_timeout、既定 5400 秒)覚えています。LDAP を書き換えたのに getent・id が古いままなら、sss_cache -E で覚えている値を捨てます。

$ sudo sss_cache -E
$ getent passwd alice

sshd -t / -Tsshd の設定を確認Lv98 で覚える

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