最近AWS環境での仕事があり久しぶりにUBUNTOを触ったのですが色々忘れていことが多かったのでここに新たに環境構築してみました。
すっかり centOS apache にハマっていたのでいい刺激になりました。
Debian系といえば昨年ですが、raspberyPi を何台か試しました。
【関連記事】
- ubuntu nginx SSL Webサーバー構築 (この記事)
- ubuntu 20.04 nginx php mysql Webサーバー環境整備
- ubuntu 20.04 nginx php postgreSQL 12.5 Webサーバー環境整備
目 次
ubuntu 初期設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// ubuntu 最新化 $ sudo apt update $ sudo apt upgrade // ホスト名変更 hostnamectl set-hostname [sakura3.契約中のドメイン名] // 環境確認 $ sudo hostnamectl [sudo] password for ubuntu: Static hostname: sakura3.契約中のドメイン名 Icon name: computer-vm Chassis: vm Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Boot ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Virtualization: kvm Operating System: Ubuntu 20.04.1 LTS Kernel: Linux 5.4.0-64-generic Architecture: x86-64 // システム再起動 $sudo reboot |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 現在ログインしているユーザー確認 $ whoami ubuntu # ユーザー追加 (要 root権限) ubuntu@sakura3:~$ sudo adduser [new user] [sudo] password for ubuntu: Adding user `[new user]' ... Adding new group `[new user]' (1002) ... Adding new user `[new user]' (1002) with group `[new user]' ... Creating home directory `/home/[new user]' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for [new user] Enter the new value, or press ENTER for the default Full Name [ ]: Kenji [new user]wara Room Number [ ]: Work Phone [ ]: Home Phone [ ]: Other [ ]: Is the information correct? [Y/n] Y ・ ・ # 作成したユーザーのSudo権限付与 # sudoグループを追加 ubuntu@sakura3:~$ sudo gpasswd -a [new user] sudo [sudo] password for ubuntu: Adding user [new user] to group sudo |
ubuntu SSH 鍵ペア認証 公開キーと秘密キー
リモートサーバーに接続するにはターミナル(コマンドプロンプト)でSSHで接続します。
ここではパスワード認証を不可ににしてセキュアな環境を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// ログインユーザーの確認 ubuntu@sakura3:~$ whoami ubuntu // ペアキーの作成 $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): Created directory '/home/ubuntu/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_rsa Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub The key fingerprint is: SHA256:RZmh0ohMOCrntpl8rCJWWjncuzvCyXCTFE1wqAvs1hg ubuntu@sakura3.fal.jp The key's randomart image is: +---[RSA 3072]----+ | o*o o+ | | o=.o o oo | |....+ o o . | |+E.. . . | |+oB + S | | *o@ . | |.oO=+ . | |oo==oo | |o..o.o+ | +----[SHA256]-----+ // 作成されたペアキーを確認 ubuntu@sakura3:~$ ls -al ~/.ssh total 16 drwx------ 2 ubuntu ubuntu 4096 Jan 24 06:18 . drwxr-xr-x 4 ubuntu ubuntu 4096 Jan 24 06:18 .. -rw------- 1 ubuntu ubuntu 2610 Jan 24 06:18 id_rsa -rw-r--r-- 1 ubuntu ubuntu 575 Jan 24 06:18 id_rsa.pub // 公開キーを authorizedkeyにレネーム // これにより秘密キー(rd_rsa)ファイルをローカルな環境からリモートホストに接続をする。 $ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys $ ls -al ~/.ssh total 16 drwx------ 2 ubuntu ubuntu 4096 Jan 24 06:22 . drwxr-xr-x 4 ubuntu ubuntu 4096 Jan 24 06:18 .. -rw-r--r-- 1 ubuntu ubuntu 575 Jan 24 06:18 authorized_keys -rw------- 1 ubuntu ubuntu 2610 Jan 24 06:18 id_rsa |
ここからはローカルPCのターミナル(コマンドプロンプト)での作業です。
リモートホスト間でファイルを転送するのに、scpコマンドでリモートの秘密キーを取得します。
1 2 3 4 5 6 7 8 |
// リモートホストの接続はパスワード認証を利用してコピー(ダウンロード)します。 $ scp [オプション] ubuntu@[リモードホスト名]:/home/ubuntu/.ssh/id_rsa ~/.ssh // ダウンロードした秘密キーでログインできることを確認します。 // ダウンロードした秘密キーのファイル属性 600 とする。 $ ssh -i ~/.ssh/id_rsa ubuntu@xxxxxxxxxxxx |
1 2 3 4 5 6 7 8 9 10 11 12 |
// 再度リモートホストにログインした状態で作業 // SSH サーバーへのパスワード認証を禁止し 鍵ペア認証のみにする。 // コメント解除し、パスワード認証不可に変更 ubuntu@sakura3:~$ sudo vi /etc/ssh/sshd_config PasswordAuthentication no // sshを再起動 ubuntu@sakura3:~$ sudo systemctl restart sshd [sudo] password for ubuntu: |
sshでログインする時ユーザーフォルダー内に~/.ssh/config ファイルに
ログインするユーザー名、サーバーアドレスや秘密キーやパスワードを書いておくとリモートログイnの簡略化ができる。
ssh [ホストの通称] でリモートホストにログインする
1 2 3 4 5 6 7 8 9 10 11 |
// ~/.ssh/config ・ ・ HOST [ホストの通称] HostName [有効なホスト名またはグローバルアドレス] Port 22 User [ユーザー名] IdentityFile [秘密キーの保存場所] ・ ・ |
Nginxのインストール
1 2 3 4 5 6 7 |
$ sudo apt install nginx // nginx バージョン確認 ubuntu@sakura3:~$ nginx -v nginx version: nginx/1.18.0 (Ubuntu) |
ufwの設定
さくらネットのVPSには「パッケットフィルタ」という通信制御をする昨日がありますが、こちらで管理した方が楽だとは思いますが、とりあえず、ここでは「ufw」を利用します。 さくらネットの「パッケットフィルタ」は無効にしました。 https://manual.sakura.ad.jp/vps/network/packetfilter.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// SSH(22)とHTTP(80)、HTTPS(443)のNginxへの接続 及び SSHの許可 ubuntu@sakura3:~$ sudo ufw allow 'Nginx HTTP' ubuntu@sakura3:~$ sudo ufw allow 'Nginx HTTPS' ubuntu@sakura3:~$ sudo ufw allow 22 ubuntu@sakura3:~$ sudo ufw enable // 状態確認 ubuntu@sakura3:~$ sudo ufw status Status: active To Action From -- ------ ---- Nginx HTTP ALLOW Anywhere Nginx HTTPS ALLOW Anywhere 22 ALLOW Anywhere Nginx HTTP (v6) ALLOW Anywhere (v6) Nginx HTTPS (v6) ALLOW Anywhere (v6) 22 (v6) ALLOW Anywhere (v6) // IPV6を無効にする // /etc/default/ufwファイルの編集 ubuntu@sakura3:~$ sudo cat /etc/default/ufw [sudo] password for ubuntu: # /etc/default/ufw # # Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback # accepted). You will need to 'disable' and then 'enable' the firewall for # the changes to take affect. IPV6=# ・ ・ // IPV6=noに変更後再起動 ubuntu@sakura3:~$ sudo systemctl restart ufw ubuntu@sakura3:~$ sudo ufw status Status: active To Action From -- ------ ---- Nginx HTTP ALLOW Anywhere Nginx HTTPS ALLOW Anywhere 22 ALLOW Anywhere |
Nginx : Basic 認証の設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 設置するそれぞれのサイトのserver セクション内に追記 ・ ・ server { ・ ・ location /basic_authentication_folder { auth_basic "Basic Auth"; auth_basic_user_file "/etc/nginx/.htpasswd"; } ・ ・ |
1 2 3 4 5 6 7 8 9 10 |
// Debian系のアドオンプログラム追加 ubuntu@sakura3:~$ sudo apt -y install apache2-utils // Basic 認証用ユーザー登録 root@www:~# htpasswd -c /etc/nginx/.htpasswd one-user New password: // 希望パスワード入力 Re-type new password: Adding password for user one-user |
userdir の設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// userdir を利用する // /etc/nginx/sites-available/default // server セクション内に追記 ・ ・ location ~ ^/~(.+?)(/.*)?$ { ・ ・ alias /home/$1/public_html$2; index index.html index.htm; autoindex on; } ・ ・ |
バーチャルホストの設定
例: /etc/nginx/sites-available内に にバーチャルホストのコンフィグファイルを作成し、
/etc/nginx/sites-enabled内に シンボリックリンク
ln -s /etc/nginx/sites-available/[コンフィグファイル] /etc/nginx/sites-enabled/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Nginx : バーチャルホストの設定 // /etc/nginx/sites-available/docs.codingsock.jp.conf server { listen 80; server_name docs.codingsock.jp; root /var/www/docs.codingsock.jp; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location /basic_authentication_folder auth_basic "Basic Auth"; auth_basic_user_file "/etc/nginx/.htpasswd"; } # location ~ \.php$ { # include snippets/fastcgi-php.conf; # fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// /etc/nginx/sites-enabled にシンボリックリンクを貼る khagiwara@sakura3:~$ ln -s /etc/nginx/sites-available/[コンフィグファイル] /etc/nginx/sites-enabled/ khagiwara@sakura3:~$ ls -al /etc/nginx/sites-enabled total 8 drwxr-xr-x 2 root root 4096 Jan 25 13:21 . drwxr-xr-x 8 root root 4096 Jan 25 06:14 .. lrwxrwxrwx 1 root root 34 Jan 23 17:26 default -> /etc/nginx/sites-available/default lrwxrwxrwx 1 root root 50 Jan 25 13:21 docs.codingsock.jp.conf -> /etc/nginx/sites-available/docs.codingsock.jp.conf // 対象となるフォルダーにコンテンツを作成する。 khagiwara@sakura3:~$ ls -al /var/www total 16 drwxr-xr-x 4 root root 4096 Jan 25 13:11 . drwxr-xr-x 13 root root 4096 Jan 23 17:26 .. drwxr-xr-x 2 root root 4096 Jan 25 13:22 docs.codingstock.jp drwxr-xr-x 2 root root 4096 Jan 23 21:13 html |
ubuntu nginx Let’sEncrypt にて SSL化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// Let's Encrypt のインストール khagiwara@sakura3:~$ sudo apt install certbot python3-certbot-nginx // Let’sEncrypt にて SSL化 khagiwara@sakura3:~$ sudo certbot --nginx -d docs.codingstock.jp ・ ・ // 途中でメールアドレスの確認 任意のアドレス入力 Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): khagiwara@codingstock.jp ・ ・ // 利用規約の同意を促される。 https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A ・ ・ // 情報共有やニュース等々のメールを送ることの確認が促される encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: y ・ ・ // 非SSLのアクセスからリダイレクトするか選択 // 1 リダイレクトしない 2 リダイレクトする Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 ・ ・ <以後略> |
更新タイマーステータス及び更新テスト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// certbot.timer の確認 khagiwara@sakura3:~$ sudo systemctl status certbot.timer ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2021-01-25 16:24:39 JST; 21min ago Trigger: Tue 2021-01-26 10:48:54 JST; 18h left Triggers: ● certbot.service Jan 25 16:24:39 sakura3.fal.jp systemd[1]: Started Run certbot twice daily. // 更新を --dry-run でテスト khagiwara@sakura3:/etc/nginx/sites-available$ sudo certbot renew --dry-run ・ ・ Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/xxxxxxxxxxxx/fullchain.pem (success) ・ ・ |