Linuxサーバーを立ち上げた後の一般的な設定
最終更新日: 2024/05/03
サーバーへのログイン
コントロールパネルで作成されたサーバーのIPアドレスを確認。
そのIPアドレスをコピー&貼り付けできるようにしておく。
サーバーへの接続はssh(secure shell)というコマンドを通じて行う。
ssh接続キーの作成
sshが使えるターミナルを立ち上げます。
Macの場合
Finder > アプリケーション > ユーティリティ > ターミナル
でターミナル起動
Windowsの場合には10からLinux環境の立ち上げが容易になったのでそれをググってインストールして下さい。
ssh-keygen
と打って、何か聞かれても只管リターン連打。
そうすると
cat ~/.ssh/id_rsa.pub
で表示される中身が、sshキーの中身として、VPSのインスタンスを作成する時に、保存しておくべき接続キー情報になる
(sshキー接続できるような状態から始まるVPSの場合 / 「インスタンスを作る前に登録」しておかないといけない)
sshで接続
sshがターミナルから利用可能な場合は
sshキーの登録をしてある場合は、
ssh -l root $IPアドレス
または
ssh -l root $IPアドレス -i $キーファイルの場所(...pemまたはid_rsa.pub等)
とターミナルから打つ事でログイン。
なお
・sshキー事前登録型のVPSでない場合には、そこからパスワードの入力をして接続する事になる(さくらVPS等)
・WebArenaはユーザーがrootではなくUbuntuならubuntu、CentOSの場合は従来のWebArenaならrootだがIndigoはcentos、という違いがあるので注意
SSHログインについては
https://www.conoha.jp/guide/guide.php?g=6などを参照。
因みに
Permissions 0644 for '/Users/hajimekurita/keys/md/20190224164923.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/Users/hajimekurita/keys/md/20190224164923.pem": bad permissions root@118.27.3.113: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
みたいなエラーが返ってきたら
chmod 600 ~/keys/md/20190224164923.pem
と打って、自分だけが読めるファイルの権限にsshキーのファイル権限を変更する。
サーバーにログインした時表示されるホスト名を適切なものに修正
そのサーバーの用途に応じた名前を付ける。
この時、
vpshikaku.com
の様に、外部からアクセスするURLと同じ名前にしない事。
そうすると、httpsアクセスした時に、証明書エラーの原因になりかねないので。
HOSTNAME=ホスト名; hostnamectl set-hostname $HOSTNAME;
一回ログアウトして、またログインして、ホストネームが変わっている事を確認する。
Swap領域の設定
Swap領域が無ければ(自分の見た環境ではなかった)、Swap領域を作りましょう。
top
と打った時に、
KiB Swap: 0 total, 0 free, 0 used...
となっていれば、SWAP領域が無いという事になります。
SWAP領域がないと、メモリーを使い切るとプログラムが落ちます。
2019/01時点ではDigital Ocean、Amazon Lightsail等がデフォルト状態だとSWAP領域が用意されていません。
サーバーが落ちる多い原因はメモリ不足からのスワップ不足なので、十分な量をとっておくとより安定します。
なので、仮にswapfileがあったとしても、その量が少なければ、別途より多い容量のswapファイルを作って、そちらにマウントし直す、ということも考えられるでしょう。
swapファイルの作り方は以下の通り。
例えばrootアカウントで
dd if=/dev/zero of=/swapfile bs=1M count=4096 chmod 600 /swapfile; mkswap /swapfile; swapon /swapfile;
とすると、4GB分、スワップ領域を作ることができます。
top
コマンドを打って確認して下さい。
ただ、これだけだと、サーバーを再起動した時にSWAP領域がマウントされないので
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab;
と打って、スワップ領域が再起動時に自動的にマウントされるようにします。
それから
mount -a;
でswapをマウント。
なお、先にすでにswapfileをマウントしている場合には、サーバーの再起動が必要です。
再起動した後、以前使っていたswapfileは使わなくなるので、削除しておきます。
top
と打って、swap領域が稼働している事を確認します。
ソフトウェアのアップデート
AlmaLinux / CentOS8以降 / Redhat Linux8以降 / RockyLinuxの場合
dnf update;
CentOS7以下系の場合
yum update;
Ubuntu系の場合
apt-get update;
もしもこのアップデートリストにkernelがあったら、OSのリブートが反映には必要なので
shutdown -r now;
で再起動して反映。
サーバーの時間がずれないように調整する
CentOS 8からはntpではなくchronyを使います
dnf -y install chrony; systemctl enable chronyd.service; systemctl start chronyd.service;
時間を日本時間に合わせる
timedatectl set-timezone Asia/Tokyo; date;
作業ユーザーの用意
rootのユーザーを使うのは、セキュリティ上の問題があるので、root権限を持てるユーザーを作る。
ユーザー名を仮に example とした場合
USER=example; useradd $USER; passwd $USER;
usermod -aG wheel $USER
で、wheelのグループにユーザーを追加
記述例
wheel:x:10:$USERID1,$USERID2
パスワード無しでsudoコマンド(root権限)の実行を可能にするには
visudo
して
# %wheel ALL=(ALL) NOPASSWD: ALL
の行の#を削ってコメントアウト。
あと、このユーザーにssh loginできるように、まずそのユーザーにsudoでなり
sudo - $USER
それからsshでリモートログインできるようにauthorized_keysを編集する
mkdir ~/.ssh/ chmod 700 ~/.ssh/; touch ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys;
それから
vi ~/.ssh/authorized_keys;
で、接続するPC・サーバののid_rsa.pubの中身をコピーする。
要注意作業
この後、別のターミナルを立ち上げて、新たに追加したユーザーでサーバーにsshログインして、sudo su – でrootユーザーになれる事を確認する。
その確認をせずに、以下のrootでの外部からのsshログインを遮断してしまうと、入れなくなる悲劇が発生するので注意。
それが出来たら、セキュリティ対策として、rootではsshログインは出来ないようにする。
vi /etc/ssh/sshd_config
して
PermitRootLogin no
の行を#無しで作る
configの内容のテスト
/usr/sbin/sshd -t
をして、問題なければSSHサーバーを再起動
service sshd restart
Firewallによるセキュリティ制御
状態の確認
firewall-cmd --list-all --permanent;
そうすると、例えば
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
と表示される。
上記の内
cockpit
は要らないので、
firewall-cmd --remove-service=cockpit --zone=public --permanent; firewall-cmd --reload; firewall-cmd --list-all --permanent;
cockpitが消えた事を上記の結果で確認できる。
public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Webサーバーの場合、HTTPポートとHTTPSのポートを全てに公開
firewall-cmd --zone=public --add-service=http --permanent; firewall-cmd --zone=public --add-service=https --permanent;
特定のIPからのアクセスを全て拒絶
firewall-cmd --zone=drop --permanent --add-source=154.54.249.205; firewall-cmd --zone=drop --permanent --add-source=153.120.128.197/24 firewall-cmd --zone=drop --permanent --add-source=157.90.0.0/16;
特定のIPからのアクセスに絞れるのなら、一旦全てのSSHアクセスを禁止して、特定のIPアドレスからのアクセスのみ許可する
下の許可してるIPアドレスは例なので、自分のIPアドレスを指定して下さい。
# 全てのsshアクセスを禁止 firewall-cmd --remove-service=ssh --zone=public --permanent; # 特定のIPアドレスからのsshアクセスのみ禁止 firewall-cmd --zone=public --remove-service=ssh --add-rich-rule='rule family="ipv4" source address="54.89.84.247" --permanent; # 例: 特定のIPアドレス(94.237.68.74)からのsshアクセスのみ許可 firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="94.237.68.74" service name="ssh" accept'; # 全てのポートを許可するのなら # 自分用のIP例 # lsearch1 firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="172.105.193.5" accept'; # lcrawler1; firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="172.105.237.55" accept'; # new-anayzer1 firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="108.61.180.88" accept';
firewall-cmd --list-all --permanent;
と打って確認して問題なければ
firewall-cmd --reload
と打って反映
最後にまた
firewall-cmd --list-all --permanent; firewall-cmd --list-all-zones;
と打って問題がない事を確認
(オプション) 別サーバーを踏み台としてsshログイン
sshはsshの鍵が一致しないとログインされる事はないとはいえ、出来ればssh接続を試みれるIPアドレスを制限したい。
その場合、自分が管理するサーバー群では、上記firewall-cmdで許可しあったりするが、不特定のリモート環境で仕事をする場合、自分のIPアドレスが定まらないので、一台(念の為には2台)は、外部からのssh接続のIPについては、どこからでもログイン出来る環境を用意しておきたい。
その場合、いちいち、入り口サーバーにsshログインしてから、その先のサーバーにsshログインするのは面倒。
そこを
~/.ssh/config
に
Host new-analyzer
HostName 踏み台サーバー名
User ログインユーザー名
Host stg
HostName 最終ログインサーバー名
User ログインユーザー名
ProxyCommand ssh -W %h:%p 踏み台サーバー名
と書く事で、
ssh -l ログインユーザー名 最終ログインサーバー名
に一発のコマンドでログインが可能になる。
なお、踏み台サーバーの/etc/hostsにも最終ログインサーバー名とIPの定義を書いておく必要がある。
踏み台サーバーが落ちてしまった場合や、誤ってfirewall設定をしてしまった場合の事が気になるかもしれないが、業者の方がWebコンソールによるログインを提供していれば、実質その場でサーバーにログインしているのと同じ状況になるので、リカバリーはできる。
ターミナルによるコマンド操作で最低限知っておくべきコマンド
いるディレクトリの変更
cd $ディレクトリ名
そのディレクトリのファイルの表示
ls;
そのディレクトリ以下にあるファイルを表示
find
そのファイルの中身を表示
cat $ファイル名
ターミナルからの脱出
exit
ソフトのインストール (CentOS8系)
dnf install $ソフト名
ソフトのインストール (CentOS7以下系)
yum install $ソフト名
ソフトのインストール (Ubuntu系)
apt-get install $ソフト名