Linux各種設定
コマンド操作やら設定やら
- Linux初期設定(サーバ利用を前提)
- Ubuntu 20.04/22.04インストール後に行うこと。
- Ubuntu Linuxでのcronのログを有効化
- vpsでサーバのswap領域を作成する。
- Ubuntu系サーバで役立つNW管理コマンドのインストール。
- Ubuntuサーバで履歴を追いやすくする。
- コマンドラインでのパスワード入力時にアスタリスクを表示する。
- cdコマンドの後にpwdを付与する。
- Ubuntuで特定のディレクトリに移動した際にカスタムメッセージを表示する。
- Linux-外部システムとの連携-
- Linux -コマンドTIPS-
Linux初期設定(サーバ利用を前提)
Ubuntu 20.04/22.04インストール後に行うこと。
以下、コマンドラインでサーバとして設定するため筆者が行っている最低限の設定です。
SSH設定
Ubuntu系OSをメディアからインストールした場合、SSHがインストールされていないことがほとんどです。
sudo apt install ssh
SSH鍵ペア作成
鍵認証でログインできるようにします。
ssh-keygen -t ed25519
- 鍵の格納場所は空Enter。(/home/hoge/.ssh/
- パスワードを設定します。
SSH鍵ペア作成確認
-
秘密鍵の管理は慎重に行ってください。
-
パスワードも可能な限り設定して安全性を保ってください。
-
鍵格納ディレクトリに移動
cd .ssh
- ファイルの内容確認
ls -l
以下のファイルを確認します。
- id_ed25519
- id_ed25519.pub
※これらのファイルはscp等で自分のクライアントにコピーします。
鍵の設定変更
- ファイル名変更
mv id_ed25519.pub authorized_keys
- パーミッション設定
chmod 600 authorized_keys
接続確認
この後、ローカルにコピーしたid_ed25519をSSHターミナルクライアントに保存して設定し、接続確認を行います。
SSHのパスワード認証を禁止
- SSH設定ファイルバックアップ
sudo cp -pi /etc/ssh/sshd_config /path/to/backup/directory/sshd_config.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
- バックアップ確認
diff -u /etc/ssh/sshd_config /path/to/backup/directory/sshd_config.$(date +%Y%m%d)
エラーがない(差分がない)ことでバックアップを確認します。
- ファイル書き換え
sudo sed -i -e 's/^#PasswordAuthentication yes/PasswordAuthentication no/' -e 's/^#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config
- 差分確認
diff -u /etc/old/sshd_config.$(date +%Y%m%d) /etc/ssh/sshd_config
- 差分
-#PasswordAuthentication yes
-#PermitEmptyPasswords no
+PasswordAuthentication no
+PermitEmptyPasswords no
- SSH再起動
※この作業の前に、必ず、SSH接続は別に開けておいてください。※
sudo systemctl restart ssh.service
SSH設定反映確認
- 新しくターミナルを起動します。
- パスワードでSSHログインできないことを確認します。
- 事前に転送しておいた秘密鍵でログインできることを確認します。
最初のアップデートとアップグレード
パッケージ全体のアップグレードを行います。
sudo apt update && sudo apt upgrade
アップグレード後、再起動を行います。
sudo reboot
ホスト名をドメインつきにする
Ubuntu系OSはインストール時にhoge.example.com
と設定しても、
uname -n
とホスト名だけになるパターンが多いです。そこで、
sudo hostnamectl set-hostname hoge.example.com
として、(ホスト名やドメインや設定に合わせます)
設定後、
uname -n
hoge.example.comを確認します。
プロンプト設定
最初期のプロンプトは
hoge@hoge$
になっているので、好みに沿って設定していきます。
- 一般ユーザの.bashrc設定
cat << ___EOF___ | tee -a ~/.bashrc
PS1="[\u@\H \W]\\$ "
# 一般ユーザ向けのプロンプト設定
if [ "\$PS1" ]; then
if [ "\$(id -u)" -eq 0 ]; then # rootユーザの場合
PS1='\[\e[0;31m\][\u@\H \W]#\[\e[0m\] '
else # 一般ユーザの場合
PS1='\[\e[0;32m\][\u@\H \W]\$\[\e[0m\] '
fi
fi
___EOF___
- root
Ubuntu系は.bashrcが統一されないので、やむなくこの方法をとります。
sudo su -
cat << ___EOF___ | tee -a ~/.bashrc
PS1="[\u@\H \W]\\$ "
# 一般ユーザ向けのプロンプト設定
if [ "\$PS1" ]; then
if [ "\$(id -u)" -eq 0 ]; then # rootユーザの場合
PS1='\[\e[0;31m\][\u@\H \W]#\[\e[0m\] '
else # 一般ユーザの場合
PS1='\[\e[0;32m\][\u@\H \W]\$\[\e[0m\] '
fi
fi
___EOF___
設定後、SSHセッションを開き直します。以下を確認します。
- 緑文字で
[hoge@hoge.example.com~]$
のように表示される。(一般ユーザー) - 赤文字で
[root@hoge.example.com~]#
のように表示される。(root)
aptitudeインストール
これは完全に筆者の好みです。パッケージ管理をaptではなくaptitudeに変えます。
sudo apt install aptitude
Ubuntu Linuxでのcronのログを有効化
概要
Ubuntu系Linusは自動実行(cron)のログがデフォルトでは出ませんので、設定を変更します。
rsyslogdでCronログの有効化
- 設定ファイルのバックアップ取得
sudo cp -pi /etc/rsyslog.d/50-default.conf /path/to/backup/directory/50-default.conf.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
- バックアップ取得確認
diff -u /etc/rsyslog.d/50-default.conf /path/to/backup/directory/50-default.conf.$(date +%Y%m%d)
差分が無いことでバックアップが取れていることを確認します。
設定ファイルの書き換え
- Sedによるファイル書き換え
sudo sed -i 's/^#cron.*/cron.* \/var\/log\/cron.log/' /etc/rsyslog.d/50-default.conf
- 差分確認
diff -u /path/to/backup/directory/50-default.conf.$(date +%Y%m%d) /etc/rsyslog.d/50-default.conf
- 差分
-#cron.* /var/log/cron.log
+cron.* /var/log/cron.log
rsyslogd反映
- 設定反映前のrsylogdステータス確認
systemctl status rsyslog.service
active (running)を確認します
- rsyslog再起動
sudo systemctl restart rsyslog.service
- 設定反映後のrsylogdステータス確認
systemctl status rsyslog.service
vpsでサーバのswap領域を作成する。
概要
vpsはSwap領域が作られていないケースがあります。Swap領域を確保して、メモリの枯渇に備えます。
環境
- Ubuntu 24.04
- 4GBメモリ/80GBディスクのインスタンスを利用
さっくりとした手順
- 現在のメモリとディスク容量を確認します。
- Swap領域を確保します。
- 確保したSwap領域を有効化します。
- Swap領域が増えたことを確認します。
- fstabを修正します。
- fstab修正後にシステムを再起動し、Swap領域有効化を確認します。
作業の前に
ディスク起動時のオプションなど、特に重要なシステム領域の設定ファイルを修正する作業です。 失敗時に復旧できるようシステム全体のバックアップを取ることを強く推奨します。
現在のメモリ情報を確認
- メモリ情報を確認
free -h
-hオプションは(human readable)の略だそうです
- 実行結果
total used free shared buff/cache available
Mem: 3.8Gi 450Mi 2.9Gi 2.5Mi 688Mi 3.4Gi
Swap: 0B 0B 0B
Swapが全く作成されていません。
現在のディスク容量の確認
- 要領確認
df -h
- ○実行結果
Filesystem Size Used Avail Use% Mounted on
/dev/root 78G 5.0G 73G 7% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 784M 980K 783M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda15 105M 6.1M 99M 6% /boot/efi
tmpfs 392M 12K 392M 1% /run/user/1001
容量は問題ありません。実メモリと同じ4GBの領域を作ります。
Swap領域の確保
- Swap領域作成
sudo fallocate -l 4G /swap
- ファイル作成確認
ls -ldh /swap
指定ディレクトリに4GBのファイルがあることを確認します。
Swapの有効化
- /swapのパーミッション変更
sudo chmod 600 /swap
- パーミッション変更確認
ls -ldh /swap
rootのみが読み書き可能なことを確認します\
/swapの設定
- Swap領域作成
sudo mkswap /swap
- 実行結果
スワップ空間バージョン 1 を設定します。サイズ = 4 GiB (4294963200 バイト)
ラベルはありません, UUID=08cf06da-757e-4ab4-b049-e7da8ee73341
★/swapの有効化
sudo swapon /swap
Swap有効化確認
- メモリ情報確認
free -h
- ○実行結果
total used free shared buff/cache available
Mem: 3.8Gi 446Mi 2.9Gi 2.5Mi 689Mi 3.4Gi
Swap: 4.0Gi 0B 4.0Gi
4GBのSwap領域が確保されました。
fstab設定
- /etc/fstabのバックアップ
sudo cp -pi /etc/fstab /path/to/backup/directory/fstab.$(date +%Y%m%d)
- バックアップ作成確認
diff -u /path/to/backup/directory/fstab.$(date +%Y%m%d) /etc/fstab
差分が無いことでバックアップが取れていることを確認します。
- /etc/fstab追記
cat <<- __EOF__ | sudo tee -a /etc/fstab
/swap none swap sw 0 0
__EOF__
- 差分確認
diff -u /path/to/backup/directory/fstab.$(date +%Y%m%d) /etc/fstab
- 差分
+/swap none swap sw 0 0
再起動後の修正確認
- システム再起動
sudo reboot
- 再起動後の確認
以下が確認できれば作業完了です。
- サーバにログインできること
- Webサービスなど既存システムが設定前と同様に稼働すること
- free -h を実行し、Swap領域が確保されていること
Ubuntu系サーバで役立つNW管理コマンドのインストール。
サーバ管理の際に役立つコマンドを最初のうちに入れておきます。
net-tools
ネットワーク管理に必要なツール(ifconfig/netstat等)を導入します。
sudo aptitude install net-tools
ifconfigのオプション
オプション | 意味 | 備考 |
---|---|---|
-a | すべてのネットワークインターフェースを表示 | アクティブでないインターフェースも含む |
-s | 簡潔なリスト形式で表示 | インターフェースの概要を確認するのに便利 |
up | インターフェースを有効化 | ネットワーク接続を開始する |
down | インターフェースを無効化 | ネットワーク接続を停止する |
inet | IPアドレスを設定 | 特定のインターフェースにIPを割り当てる |
netmask | ネットマスクを設定 | サブネットマスクを変更する |
broadcast | ブロードキャストアドレスを設定 | ブロードキャストアドレスを変更する |
mtu | 最大転送単位(MTU)を設定 | パケットサイズの最大値を設定する |
promisc | プロミスキャスモードを有効化 | すべてのパケットを受信する |
-promisc | プロミスキャスモードを無効化 | 通常モードに戻す |
arp | ARPプロトコルを有効化 | アドレス解決プロトコルを使用する |
-arp | ARPプロトコルを無効化 | ARPを無効にする |
allmulti | 全マルチキャストモードを有効化 | すべてのマルチキャストパケットを受信する |
-allmulti | 全マルチキャストモードを無効化 | 通常モードに戻す |
netstatのオプション
オプション | 意味 | 備考 |
---|---|---|
-a | すべての接続とリスニングポートを表示 | 現在の接続状況を確認するのに便利 |
-t | TCP接続のみを表示 | TCPプロトコルの接続を確認 |
-u | UDP接続のみを表示 | UDPプロトコルの接続を確認 |
-l | リスニングポートのみを表示 | サーバが待機しているポートを確認 |
-p | プロセスIDとプログラム名を表示 | どのプログラムがどのポートを使用しているかを確認 |
-n | 数値形式でアドレスとポートを表示 | 名前解決を行わずに表示 |
-r | ルーティングテーブルを表示 | ネットワークのルーティング情報を確認 |
-s | 各プロトコルの統計情報を表示 | ネットワークのトラフィック統計を確認 |
-c | 指定した間隔で情報を更新 | リアルタイムでネットワーク状況を監視 |
Ubuntuサーバで履歴を追いやすくする。
「いつ、どのような操作をしたか」を追いやすくするために以下の設定を行います。
sudo tee -a /etc/profile.d/history.sh > /dev/null << 'EOF'
export HISTSIZE=50000
export HISTFILESIZE=50000
export HISTTIMEFORMAT='%Y/%m/%d %H:%M:%S '
EOF
- 全ユーザーでhistoryコマンドの履歴を5万行に引き上げます。
- コマンド実行した日付を記載します。
設定後、新しいシェルセッションを開始するか、
source /etc/profile.d/history.sh
を実行することで上記が反映されます。
コマンドラインでのパスワード入力時にアスタリスクを表示する。
運用の好みの問題です。
sudo su -
環境
- Ubuntu 20.04 / 22.04 / 24.04
等でrootに昇格する際、入力されたかを確かめる*
を表示するようにして視認性を高めます。
既存ファイルのバックアップ
- 設定ファイルバックアップ
sudo cp -pi /etc/sudoers /path/to/backup/directory/sudoers.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
- バックアップ確認
sudo diff -u /path/to/backup/directory/sudoers.$(date +%Y%m%d) /etc/sudoers
差分が無ければバックアップは成功です。
ファイル書き換え
- sedによるファイル書き換え
sudo sed -i 's/^Defaults\s\+env_reset$/Defaults env_reset,pwfeedback/' /etc/sudoers
- 差分確認
sudo diff -u /path/to/backup/directory/sudoers.$(date +%Y%m%d) /etc/sudoers
-Defaults env_reset
+Defaults env_reset,pwfeedback
設定反映確認
設定を行ったサーバに対して、新しくSSHセッションを作成します。
sudo su -
でパスワードを入力時に*
が表示されれば設定は反映されています。
cdコマンドの後にpwdを付与する。
Linuxサーバで、どのディレクトリで作業をしたかは「どのコマンドを実行したか」と同等以上に重要です。
そのため、Linuxサーバでの作業において、どのディレクトリで作業をしているかを考えるため、
cd /hoge
を実行したら
pwd
が自動的に実行される設定を施します。
コマンド
- 設定追加
sudo tee -a /etc/profile.d/pwd.sh > /dev/null << 'EOF'
cd() {
builtin cd "$@" && pwd
}
EOF
- 設定反映
source /etc/profile.d/pwd.sh
これで、
cd /hoge
が
cd /hoge && pwd
と同じ結果を持つようになります。
Ubuntuで特定のディレクトリに移動した際にカスタムメッセージを表示する。
概要
Ubuntuで、特定のディレクトリに移動した際にカスタムメッセージを表示するTIPSです。
例えば、cd /etc/apache2/sites-available
としたときに「.confファイルのバックアップを取ること」といった確認メッセージを表示させることができます。
環境
- Ubuntu 22.04 /24.04
- BashまたはZshシェル
手順
1. スクリプトを作成
まず、/etc/profile.d/cd.sh
にカスタムcd
関数を追加します。
sudo tee -a /etc/profile.d/cd.sh > /dev/null << 'EOF'
# カスタムcd関数を定義
cd() {
# ディレクトリに移動
builtin cd "$@"
# 特定のディレクトリに移動したときのメッセージ
case "$PWD" in
"/etc/apache2/sites-available")
echo "注意: .confファイルのバックアップを取ること"
;;
"/var/log")
echo "注意: ログファイルを定期的にチェックすること"
;;
*)
# 他のディレクトリの場合は何もしない
;;
esac
}
EOF
2. スクリプトに実行権限を付与します。
sudo chmod +x /etc/profile.d/cd.sh
3. スクリプトを反映
source /etc/profile.d/cd.sh
動作確認
設定が正しく反映されているか確認するために、特定のディレクトリに移動してみます。
cd /etc/apache2/sites-available
注意: .confファイルのバックアップを取ること
と表示されることを確認します。
cd /var/log
注意: ログファイルを定期的にチェックすること
と表示されることを確認します。
スクリプト修正ポイント
ディレクトリの追加:
新しいディレクトリに対してメッセージを表示させたい場合は、case文に新しい条件を追加します。
メッセージの変更:
各ディレクトリに対するメッセージを変更する場合は、echoコマンドの内容を編集します。
case "$PWD" in
"/new/directory/path")
echo "新しいディレクトリに移動しました"
;;
# 他のディレクトリの条件を追加
esac
これで、特定のディレクトリに移動したときにカスタムメッセージを表示する方法が設定できました。
Linux-外部システムとの連携-
S3ストレージと接続する。(wasabi)
クラウドストレージとして広く使われているS3(Amazon Simple Storage Service)。
システムのバックアップやデータ領域を確保するため、サーバと接続していきます。
環境
- Ubuntu 20.04 / 24.04
前提
- S3または互換ストレージ(ここではWasabiクラウドストレージを利用)の
- バケットが作られている
- アクセス権を持っている
- アクセスキーを保持している
手順
Linuxサーバに必要なパッケージをインストールします。
sudo aptitude install s3fs
任意のディレクトリにパスワードファイルを作成します。
※このアクセスキーは、クラウドストレージのバケットに対してフルアクセスがあります。扱いは慎重にしてください。
- ファイル名:
.passwd-s3fs
こちらを任意の方法で作成します。書式は以下の通りです。
アクセスキー:秘密鍵
- 保存確認
cat .passwd-s3fs
内容に問題が無いかを確認します。
パスワードファイルのアクセス権を変更します。
- アクセス権変更
sudo chmod 600 .passwd-s3fs
- アクセス権確認
ls -l .passwd-s3fs
アクセス権が600を確認します
マウントポイントを作成します。
- マウントポイント作成
sudo mkdir /mnt/wasabi
任意のディレクトリを指定します。
- 作成確認
ls -ld /mnt/wasabi
マウントできることを確認します。
sudo s3fs 【wasabiで作成したバケット名】 /mnt/wasabi -o passwd_file/【上記作成したパスワードファイルのパス】/.passwd-s3fs -o url=https://【バケットのリージョン名】.wasabisys.com -o use_path_request_style -o endpoint=【バケットのリージョン名】 -o allow_other
URL等は自分が使っているサービスに合わせます。
サーバ起動時に自動マウントできるようにします。
- fstabバックアップ作成
sudo cp -pi /etc/fstab /path/to/directory/fstab.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
- バックアップ作成確認
diff -u /path/to/directory/fstab.$(date +%Y%m%d) /etc/fstab
エラーがなければバックアップ成功です。
- fstab追記
教義・信仰に沿ったエディタで、以下の内容を/etc/fstab
の末尾に追記します。
s3fs#【wasabiバケット名】 /mnt/wasabi fuse _netdev,allow_other,passwd_file=/【パスワードファイルのパス】/.passwd-s3fs,url=https://s3.バケットのリージョン名wasabisys.com,use_path_request_style,endpoint=バケットのリージョン名 0 0
※パスワードファイルのパスは絶対パスであることに注意してください。
- 追記確認
diff -u /path/to/directory/fstab.$(date +%Y%m%d) /etc/fstab
+ s3fs#【wasabiバケット名】 /mnt/wasabi fuse _netdev,allow_other,passwd_file=/【パスワードファイルのパス】/.passwd-s3fs,url=https://s3.バケットのリージョン名wasabisys.com,use_path_request_style,endpoint=バケットのリージョン名 0 0
- システム再起動
sudo reboot
確認
- マウント確認
df -h
s3fs
と作成したマウントポイントが表示されることを確認します。
- アクセス確認
cd /mnt/wasabi
ディレクトリ移動できるかを確認します。
- ファイル作成確認
sudo touch test.txt
ls -l test.txt
ファイルが作成されるかを確認します。
クラウドの管理コンソールで、作成されたファイルがあるかを確認できれば設定完了です。
Linux -コマンドTIPS-
設定ファイルの一括バックアップ
概要
同一サーバに複数のバーチャルホストを運用している場合、個別のconfファイルの一括バックアップを取る必要があります。
その際、
sudo cp -pi /path/to/src/directory/*.conf /path/to/backup/directory/
としたのでは、オリジナルのファイルがファイル名そのままコピーされます。そういうときに、
- 特定のファイルを一括でコピーしつつ
-
.bk.yyyy-mm-dd
などの識別子を付与
するTIPSです。
コマンド
for file in /path/to/src/directory/*.conf; do sudo cp "$file" "/path/to/backup/directory/$(basename "$file").bk.$(date +%Y%m%d)"; done
これで、コピー元にある.conf
ファイル全てが、バックアップ先に元のファイル名に.conf.bk.yyyy-mm-dd
が付与された状態で保存されます。
/var/log/auth.logの視認性を良くするワンライナー
セキュリティ対策がきちんと働いているかを確認するため、以下のようなワンライナーで確認しました。
不正アクセスの試行を調べる
/var/auth.log
から、失敗したアクセス(認証に失敗したユーザー)を確認するためのワンライナーです。
- コマンド
sudo awk '/Disconnected from invalid user/ {print $(NF-4)}' /var/log/auth.log | sort | uniq -c | sort -nr
- 実行結果
43 root
36 ubuntu
24 user
20 test
13 admin
8 deploy
6 guest
6 ftpuser
5 oracle
5 hadoop
5 dev
5 debian
4 user1
4 sysadmin
4 samba
3 test1
3 mysql
3 max
3 kafka
と、アカウントごとに失敗したユーザーを表示してくれます。
成功したログインを日付時刻を付与した上で表示する
/var/auth.log
から、ログインに成功したユーザーを調べます。
- コマンド
sudo awk '/Accepted/ {split($1, date, "T"); split(date[2], time, "."); gsub("-", "/", date[1]); print date[1] " " substr(time[1], 1, 5) " " $7}' /var/log/auth.log | sort | uniq -c | sort -nr
日付は2024-11-25T16:21:14.772402+09:00
のような形式から2024/11/25 14:38
に修正しています。
- 実行結果
1 2024/11/25 14:38 hoge
これで、ログの視認性が高まりました。