Linux各種設定

コマンド操作やら設定やら

Linux初期設定(サーバ利用を前提)

Linux初期設定(サーバ利用を前提)

Ubuntu 20.04/22.04インストール後に行うこと。

以下、コマンドラインでサーバとして設定するため筆者が行っている最低限の設定です。

SSH設定

Ubuntu系OSをメディアからインストールした場合、SSHがインストールされていないことがほとんどです。

sudo apt install ssh

SSH鍵ペア作成

鍵認証でログインできるようにします。

ssh-keygen -t ed25519

SSH鍵ペア作成確認

cd .ssh
ls -l

以下のファイルを確認します。

  1. id_ed25519
  2. id_ed25519.pub

※これらのファイルはscp等で自分のクライアントにコピーします。

鍵の設定変更

公開鍵をauthorized_keysに変更し、パーミッションを厳密にします。

mv id_ed25519.pub authorized_keys
chmod 600 authorized_keys

接続確認

この後、ローカルにコピーしたid_ed25519を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接続は別に開けておいてください。※

sudo systemctl restart ssh.service 

SSH設定反映確認

  1. 新しくターミナルを起動します。
  2. パスワードでSSHログインできないことを確認します。
  3. 事前に転送しておいた秘密鍵でログインできることを確認します。

最初のアップデートとアップグレード

パッケージ全体のアップグレードを行います。

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$

になっているので、好みに沿って設定していきます。

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___

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セッションを開き直します。以下を確認します。

  1. 緑文字で[hoge@hoge.example.com~]$のように表示される。(一般ユーザー)
  2. 赤文字で[root@hoge.example.com~]#のように表示される。(root)

aptitudeインストール

これは完全に筆者の好みです。パッケージ管理をaptではなくaptitudeに変えます。

sudo apt install aptitude
Linux初期設定(サーバ利用を前提)

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)

差分が無いことでバックアップが取れていることを確認します。

設定ファイルの書き換え

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反映

systemctl status rsyslog.service

active (running)を確認します

sudo systemctl restart rsyslog.service
systemctl status rsyslog.service
Linux初期設定(サーバ利用を前提)

vpsでサーバのswap領域を作成する。

概要

vpsはSwap領域が作られていないケースがあります。Swap領域を確保して、メモリの枯渇に備えます。

環境

さっくりとした手順

  1. 現在のメモリとディスク容量を確認します。
  2. Swap領域を確保します。
  3. 確保したSwap領域を有効化します。
  4. Swap領域が増えたことを確認します。
  5. fstabを修正します。
  6. 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領域の確保

sudo fallocate -l 4G /swap
ls -ldh /swap

指定ディレクトリに4GBのファイルがあることを確認します。

Swapの有効化

sudo chmod 600 /swap
ls -ldh /swap

rootのみが読み書き可能なことを確認します\

/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設定

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 

差分が無いことでバックアップが取れていることを確認します。

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

以下が確認できれば作業完了です。

  1. サーバにログインできること
  2. Webサービスなど既存システムが設定前と同様に稼働すること
  3. free -h を実行し、Swap領域が確保されていること
Linux初期設定(サーバ利用を前提)

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 指定した間隔で情報を更新 リアルタイムでネットワーク状況を監視
Linux初期設定(サーバ利用を前提)

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

設定後、新しいシェルセッションを開始するか、

source /etc/profile.d/history.sh

を実行することで上記が反映されます。

Linux初期設定(サーバ利用を前提)

コマンドラインでのパスワード入力時にアスタリスクを表示する。

運用の好みの問題です。

sudo su -

環境

等で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

差分が無ければバックアップは成功です。

ファイル書き換え

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 -

でパスワードを入力時に*が表示されれば設定は反映されています。

Linux初期設定(サーバ利用を前提)

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

と同じ結果を持つようになります。

Linux初期設定(サーバ利用を前提)

Ubuntuで特定のディレクトリに移動した際にカスタムメッセージを表示する。

概要

Ubuntuで、特定のディレクトリに移動した際にカスタムメッセージを表示するTIPSです。

例えば、cd /etc/apache2/sites-availableとしたときに「.confファイルのバックアップを取ること」といった確認メッセージを表示させることができます。

環境

手順

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-外部システムとの連携-

Linux-外部システムとの連携-

S3ストレージと接続する。(wasabi)

クラウドストレージとして広く使われているS3(Amazon Simple Storage Service)。

システムのバックアップやデータ領域を確保するため、サーバと接続していきます。

環境

前提

手順

Linuxサーバに必要なパッケージをインストールします。

sudo aptitude install 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等は自分が使っているサービスに合わせます。

サーバ起動時に自動マウントできるようにします。

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

エラーがなければバックアップ成功です。

教義・信仰に沿ったエディタで、以下の内容を/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-

Linux -コマンドTIPS-

設定ファイルの一括バックアップ

概要

同一サーバに複数のバーチャルホストを運用している場合、個別のconfファイルの一括バックアップを取る必要があります。

その際、

sudo cp -pi /path/to/src/directory/*.conf /path/to/backup/directory/

としたのでは、オリジナルのファイルがファイル名そのままコピーされます。そういうときに、

する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が付与された状態で保存されます。

Linux -コマンドTIPS-

/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

これで、ログの視認性が高まりました。