広告

WordPress環境構築まとめ「Vol-01」WindowsからSSH接続まで。

AI

ひと昔以上前のノートに、「ubuntu」入れてみたのが、2年前

会社でもローカル環境にwordpressでのコミュニティサイトを検討しているので、wordpress環境構築作業に戸惑わないよう、コピペできるよう、まとめました。
せっかくなので、RockyLinux10で試してみましたが、筆者の10数年前のノートPCではインストーラさえ起動しませんでした
RockyLinux9.7であれば起動したので、クリーンインストールして再構築しました

広告

RockyLinux9.7 ダウンロード・インストール

ダウンロード・インストールの詳細はこちらを確認してください

インストール後の初期設定・まとめ

ホームディレクトリの日本語表記を英語表記に変更

linux

LANG=C xdg-user-dirs-gtk-update

特定のユーザーにsudo を可能にする

linux

su
visudo

visudo で、コメント行になっている、下記の「#」を外し有効にします
%wheel ALL=(ALL) NOPASSWD: ALL

linux

・
・
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

・
## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

その後、特定ユーザーを、「wheel」グループに追加すればそのユーザーはパスワードなしで「sudo」実行が可能になります

linux

usermod -aG wheel hogehoge

SSH利用状況の確認

RockyLinux9では、ほとんどの選択でsshは自動起動している状態になっています。
動作は、「ssh」コマンドで確認できます

linux

ssh

usage: ssh [・・・・」のような
コマンドの使い方を示すヘルプメッセージが表示されれば動作しています
また、sshサービスはファイヤーウォールでの制限対象ですが、こちらも標準では許可されていますが、確認しておきます
詳細は、下記記事を参照してください

ここでは、sshの許可状態だけ確認します

firewalldでのsshの確認

まず、「firewalld」の起動状態を確認してみます

linux

systemctl status firewalld

これで、active (running)になっていれば、起動しています


ファイヤーウォールのアクセスルール対象となるのはアクティブゾーンになります
まずは、アクティブゾーンを確認します

linux

 sudo firewall-cmd --get-active-zones
public
interfaces: wlp8s0

アクティブゾーンは「public」のみと言うのがわかりました
今回は「ssh」の許可状態は「public」の設定で確認すればわかります

linux

sudo firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: wlp8s0
sources:
services: cockpit dhcpv6-client ssh
ports:

「services」に、「ssh」があるので、許可されています

SSHでリモート操作

上で確かめたように、RockyLinux9では、デフォルトでsshサービスもファイヤーウォールでの許可も利用可能な状態になっています。
「ssh」コマンドでアクセスしてみましょう。
windowslinux

ssh hogehoge@192.168.*.* -p 22

ssh 「Linux側のユーザー@IPアドレス」 でパスワード入力で接続できます
「-p 22」は、ポート番号指定です。sshはデフォルトでは22番ポートです。
デフォルトであれば、省略できます。
「-p 22」はオプションですが、違うポート番号の場合は、その番号を指定します。
また以前ポート番号などを変更していたなどで接続できない事もあります
その場合には、標準ポート番号「22」を指定する事で接続できるようになります
windowsターミナルでも同じコマンドです
接続ができれば、windowsから、Linuxマシンを殆どリモートで設定できます 
ローカル内だけでの運用であれば、この設定でもいいかもしれませんが、後ほどポート番号変更と鍵認証方式に変更しようと思います

まずは、パッケージのアップデート

sshアクセスができれば、windowsターミナルからでも操作できまます
インストール初期のアップデートで、依存関係の競合とかでエラーが表示される事があります
エラーメッセージでは、「--skip-broken」の付加のアドバイスが出ますが、ついでに「–allowerasing」オプションも追加したほうがいいようです

linux

sudo dnf update --skip-broken --allowerasing
sudo reboot

SELinuxに強制させない設定

SELinuxはセキュリティをより強固にする機能で、RockyLinuxなどRedHat系では標準で有効になっていますが、思うように動作しないトラブルも多いようです。
ポリシーを読み込まず、無効的な状態にする方法もありますが、警告のみでポリシーを強制しない「Permissiveモード」に設定にしようと思います

linux

su
vi /etc/selinux/config

editor

・
・
#SELINUX=enforcing
SELINUX=permissive
・
・

linux

reboot

再起動後、確認

linux

sudo getenforce

「Permissive」が返ってくれば、設定されています

設定中に本体のGUIがクラッシュした

外部PCからsshで操作していて、たまに戻ると、画面がクラッシュしている場合があります
これはGUIのディスプレイマネージャー(gdm)がロックやスリープ状態になっているか、セッションがクラッシュしている場合に起こるようです

復旧方法:キーボードショートカットで復旧

私の状況は、マウスカーソルだけが動く状態だったので、その画面で:

  • Ctrl + Alt + F2(または F3〜F6)を押す → テキストコンソールに切り替え
  • ログイン後、以下を実行:

linux

systemctl restart gdm

Ctrl + Alt + F1(または F7)でGUI画面に戻る

恒久対策として:スリープ・省電力設定を無効化する

linux

# GNOMEのスクリーンセーバー・自動サスペンドを無効化
sudo -u ユーザー名 gsettings set org.gnome.desktop.screensaver lock-enabled false
sudo -u ユーザー名 gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

このコマンドは、私の環境でSSH経由では、X11のDISPLAY環境変数がないとのエラーになりました
ssh経由の場合には、DISPLAY変数を指定して実行します

ssh

sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings set org.gnome.desktop.screensaver lock-enabled false
sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

確認方法

linux

sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings get org.gnome.desktop.screensaver lock-enabled
sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type

下記の結果がでれば、正常に反映されている

false
'nothing'

CUIモードをデフォルトにする

SSH経由でのリモートがほとんどになれば、CUIモードのほうがトラブルは少なそうなので、CUIモードに設定します

linux

sudo systemctl set-default multi-user.target

これで、再起動後はGUIなしで起動します。
もし、GUIが必要になったら、

linux

sudo systemctl start gdm

SSHのセキュリティ向上対策

SSHを鍵認証方式で運用

「鍵認証方式」は、「秘密鍵」と「公開鍵」のペアの鍵を作成し、アクセスする側は「秘密鍵」が必要になり、アクセスされる(サーバー)側には、「公開鍵」を登録します
一般的には、アクセス側で鍵を生成し、「公開鍵」の登録をサーバーへお願いします
鍵生成は、windowsでもLinuxでも、「ssh-keygen」コマンドで生成できます
今回は、windowsターミナルで生成します

windowslinux

ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\hogehoge/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again
Your identification has been saved in C:\Users\hogehoge/.ssh/id_ed25519
Your public key has been saved in C:\Users\hogehoge/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:o2ojnUu7UflR12VZq2yOcTY/Ky-VzibafGh/PJbPe6C hogehoge@hoge-Pc
The key's randomart image is:
+--[ED25519 256]--+
| .+.o|
| Oo|
| o + o . . |
| . Z . . o..|
| . o . *AC|
+----[SHA256]-----+

秘密鍵のアクセス権限を厳しく設定

下記のアクセス権の設定は、windowsターミナルでの操作コマンドです。
Linuxでの操作は、こららを参考にしてください

継承の無効化と権限のクリア

windows

icacls "$HOME\.ssh\id_ed25519" /inheritance:r

ユーザーにのみ読み取り権限を付与

windows

icacls "$HOME\.ssh\id_ed25519" /grant:r "$($env:USERNAME):R"

「自分自身」以外のユーザー権限を削除

windows

icacls "$HOME\.ssh\id_ed25519" /remove "SYSTEM"
icacls "$HOME\.ssh\id_ed25519" /remove "Administrators"
icacls "$HOME\.ssh\id_ed25519"

エクスプローラの「プロパティ」⇒「セキュリティ」でも確認できます

公開鍵をサーバー側へコピー

作成した、「id_ed25519.pub」をサーバー側ユーザーの「.ssh」ディレクトリへコピー
・windowsの自分自身のホームの「.ssh」に移動
・scp コマンドへ、サーバー側ユーザーの「.ssh」へコピー

windows

cd $HOME\.ssh
scp .\id_ed25519.pub hogehoge@192.168.*.*:.ssh

サーバー側へsshでログインし操作

windows側から、sshログインし、「.ssh」ディレクトリへ移動し確認

windows

ssh hogehoge@192.168.*.*

ログイン後、コピーされているか、確認

sshlinux

cd ./.ssh
ls -la

公開鍵を保存ファイル(authorized_keys)へ登録

コピーされた公開鍵を、保存用のファイルへ登録し、そのファイルのアクセス権は厳しくします
持ってきて、公開鍵は削除しておきます

sshlinux

cd ~/.ssh 
cat id_ed25519.pub >> authorized_keys 
chmod 600 authorized_keys
rm id_ed25519.pub
exit

再度、鍵を使って、SSHログイン

ssh に「i」オプションで鍵指定

windows

ssh -i .ssh/id_ed25519 hogehoge@192.168.*.*

ログイン時、鍵生成時登録したパスフレーズを入力し、ログイン

鍵認証以外ではログイン拒否

鍵を使ってのログインが確認できたら、鍵以外でのログインは拒否する設定をしておきます
設定は、「/etc/ssh/sshd_config」ファイルの”PasswordAuthentication”を”no”に設定します
まずは、ファイルをバックアップして、編集します

ssh linux

sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
sudo vi /etc/ssh/sshd_config

editor



#PasswordAuthentication yes
PasswordAuthentication no


ついでにリモートからのROOTログインも拒否設定します

「/etc/ssh/sshd_config」ファイルの”PermitRootLogin”も”no”に設定

editor



#PermitRootLogin prohibit-password
PermitRootLogin no

さらに、ポート番号を変更

「ssh」のポートは「22番」が標準なので、自動スキャンなどのアタックが増えるので、違う番号に変更しておきます。
ポート番号も「/etc/ssh/sshd_config」ファイルの”Port”で設定します
ポート番号は登録済み番号などもあるので、49152–65535の範囲に設定します

editor



#Port 22
Port 55522

「22番」は「ssh」サービスのデフォルトなので、firewalldの設定でsshは「22番」になります
firewalld設定は、ポート番号を直接設定する事もできますが、やはりsshのポート番号を変更する方法がfirewalldは再起動だけで、設定は不要なのでスマートだと思います
デフォルト設定は、「 /usr/lib/firewalld/services/ ssh.xml 」に保存されているので、
そのファイルを「 /etc/firewalld/services /」にコピーして編集します。

ssh linux

sudo cp -p /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
sudo cd /etc/firewalld/services/
sudo ls /etc/firewalld/services/
sudo vi /etc/firewalld/services/ssh.xml

editor



<port protocol="tcp" port="22"/>

<port protocol="tcp" port="55522"/>

sshとfirewall サービスを再起動して、アクセスにはポート番号を明示します

ssh linux

sudo systemctl reload sshd.service
sudo firewall-cmd --reload
ssh  -p 55522 hogehoge@192.168.*.*

ここまでで、RockyLinux9.7のインストールと、初期設定
「ssh」の設定も完了したので、次の設定は、windowsターミナルからでも実行できます

コメント

タイトルとURLをコピーしました