CentOS 8
CentOSはRHEL系のLinuxディストリビューションの1つで,商標や商用パッケージ等を除去したものです.
企業等を対象としたOSとの互換性の高さに優れます.
このページでは,CentOS 8のセットアップについて記録しています.
目次
アップデート
OSをインストールして管理者権限のあるrootでパスワードによるログインを行なったら,OSアップデートのため,
dnf update |
とします.
(CentOS 7系では,インストールに使うコマンドはdnf
でなくyum
でした.CentOS 8でyum
を呼ぶとdnf
になります.)
なお,日常的に最小のアップグレードを行うにはdnf upgrade-minimal
です.
rootでのログイン禁止
あらゆる操作を行うことのできるrootは乗っ取られると大変なので,rootでアクセスしなくて済むようにユーザーを作成し,rootでログインすることを直ちに禁止します.
まず,ユーザー作成は次の様式で行います.
adduser USER_NAME |
passwd
コマンドで引数にユーザー名を指定すると,パスワード入力画面となりますので,登録したいパスワードを入力してください.
次に,rootでのログインを禁止するため,/etc/ssh/sshd_config
を編集します.
vi /etc/ssh/sshd_config |
とします.
開かれたコンフィグで,次のように1箇所yes
からno
へ修正します.
PermitRootLogin no |
設定を変更したら,
systemctl restart sshd |
としてその設定を有効化します.
以降はssh USER_NAME@IP_ADDRESS
でログインします.
ユーザーの切替え
ログイン後にrootになる
rootでないユーザーでログインした場合,
su - |
でrootに切替えることができます.
(ちなみに,特定のユーザーに切替えたいならsu - ユーザー名
とします.)
sudoコマンド
rootの権限はあまりに強すぎるので,rootでないユーザーがrootを擬制することのできるsudo
コマンドを使用すべきです.
ユーザーをsudo
できるようにするために,rootで
visudo |
というコマンドを使用します.
これは/etc/sudoers
を編集するコマンドで,
root ALL=(ALL) ALL |
とあるところを
ユーザー名 ALL=(ALL) ALL |
のように加筆または変更することで,ユーザーがsudo
できるようになります.
もしsudo
の都度パスワードを入力するのが面倒であるなら,安全性に欠けますが,
ユーザー名 ALL=(ALL) NOPASSWD: ALL |
とすることで,パスワードが省略可能になります.
chown・chmodコマンド
さて,通常のユーザーに戻ったとしましょう.
ファイルの所有者を変更する場合だと,
sudo chown ユーザ名 ファイル |
とします.
パーミッションを変更するには,
sudo chmod パーミッション ファイル |
です.
chown -R
やchmod -R
のようにオプションを付けて実行することで,ディレクトリの所有者やパーミッションを再起的に変更することができます.
上の例はrootで
chown ユーザ名 ファイル |
とするのと変わりません.
以下,sudo
は省略して記述します.
パスワード認証から鍵認証に変更
現在,ユーザーはパスワードログインとなっていますので,パスワードより強度の高いログイン方法に変更します.
鍵の生成
ローカルで
ssh-keygen |
とすると,以下が表示されますので,エンターで先に進めます.
Enter file in which to save the key (鍵の保存場所): #問題なければエンター |
これで秘密鍵id_rsa
と公開鍵id_rsa.pub
ができました.
鍵の配送
(デフォルトのまま公開鍵がid_rsa.pubと名付けられているなら)サーバに鍵を渡すため,
ssh-copy-id -i ~/.ssh/id_rsa.pub USER_NAME@IP_ADDRESS:~ |
あるいは
scp ~/.ssh/id_rsa.pub USER_NAME@IP_ADDRESS:~ |
とします.
これでサーバーのユーザーアカウントのトップ(~
)に公開鍵が配送されました.
パーミッションの設定
この鍵にパーミッションを設定します.
cd ~ |
もし別のユーザーを経由して鍵を受け取っていた場合には,
cd ~ |
で.ssh
以下のディレクトリ・ファイルを自分のものにしておきます.
ログインのテスト
ssh
コマンドのオプション’i’を使い,鍵によるログインを実際に行なってみます.
ssh -i ~/.ssh/id_rsa USER_NAME@IP_ADDRESS #DNSサーバの設定が済んでいるなら,IP_ADDRESSに代えてexample.comでよい. |
コンフィグ
鍵でログインできることを確認したら,パスワードによるログインを無効にします.
rootから
vi /etc/ssh/sshd_config |
として,
PasswordAuthentication no |
と設定を変更し,
systemctl restart sshd |
でSSHのデーモンを再起動します.
以上で,鍵でログインする方式へ変更されました.
日本語環境
ヘルプを読むときのため,日本語の環境にします.
dnf -y install langpacks-ja |
エイリアスを作成
よく使うコマンドのエイリアスを作成します.
シェルとしてbashを使っているなら,ユーザーのホームディレクトリ~
にある.bashrc
ファイルを編集(または作成)します.
.bashrc
は対話型シェルが開かれるたびに読み込まれるファイルです.
vi ~/.bashrc |
そして,このファイルに次を追記します.
alias エイリアス名="実行コマンド" |
例えば,ls -al
にll
という省略名を与えたいのであれば,
alias ll="ls -al" |
です.
サーバーの利用
以下,サーバーを利用する若干の例です.
Apache
Apacheによりwebサーバーを立てる例です.
DNSサーバの設定は済ませておくものとします.
http使用のため,
dnf install httpd |
ファイアウォールのため,
dnf install firewalld |
とします.
(ファイアウォールを除去するときは--remove-service
,確認は--list-services
です.)
コンテンツを置く場所を,デフォルトの/var/www/html
ディレクトリにするなら
cd /var/www |
として,コンテンツを配備します.
これでhttpの設定ができました.
次に,httpsによるセキュアな通信を行うため,
dnf install mod_ssl |
とします.
Let’s Encryptを利用するとすれば,dnf install wget
しておいた上で,
cd /tmp |
として,証明書とコンテンツの紐付けのために/etc/httpd/conf.d/example.com.conf
に次を書き込みます.
<VirtualHost *:80> |
また,コンテンツ中でindex.html
が見当たらなかったときに開かれるwelcome.conf
を,(再生成されうるファイルの削除ではなく)コメントアウトによって停止しておくとよいでしょう.
設定が済んだら,
systemctl restart httpd |
によりhttpdを再起動します.
Let’s Encryptは有効期限がありますが,
certbot renew |
のcronを設定しておくと手間がかかりません.
なお,CentOS 7ではdnf
でなくyum
でした.
Let’s Encryptを利用するとき,CentOS 7ではcertbot
コマンドがすぐインストールできて,
yum install certbot python2-certbot-apache |
とできました.
nginx
webサーバーとしてnginxを利用する場合の手順です.
公式に従いnginxをインストールするため,
yum install yum-utils |
とした上で,/etc/yum.repos.d/nginx.repo
を次のように作成します.
[nginx-stable] |
そして,nginxのインストールを行います.
yum-config-manager --enable nginx-mainline |
インストールした後は,
systemctl start nginx |
でnginxを有効化します.
(当方の環境では直ちには有効化できず,
Problem 1: conflicting requests |
というエラーメッセージが出ましたが,インストールしていたperlバージョン5.26を
yum module enable perl:5.26 |
で適用することによって解決できたことを記録しておきます.)
nginxはデフォルトで/etc/nginx/conf.d
内にある拡張子conf
のファイルをinclude
で読み込んでいるかと思います.
そこで,/etc/nginx/conf.d/サイト名.conf
ファイルを次のように作ります.(例ではhttps化しています.)
server { |
NginxはApacheとDeny
, Allow
の順が逆になるので注意してください.
ホワイトリストやブラックリストを作る場合には,allow
やdeny
を列挙した部分を外部ファイルとし,include ファイルパス
とする方が簡単です.
ファイルが用意できたら,
systemctl nginx restart |
で再起動します.
Apacheで80ポートや443ポートを既に使っていたらエラーが出ますので,そちらをsystemctl disable httpd
で停止するなどします.
FTP
SFTP専用ユーザーの作り方です.
まず,ユーザーの作成とグループの設定を行います.
ここではユーザー名をUSER
,グループ名をsftponly
としました.
groupadd sftponly |
次に,/etc/ssh/sshd_config
の末尾に次を追記します.
sftponly
グループのログインに関する設定で,このグループのユーザーがログインしたときに上の階層のディレクトリを隠すことを意図しています.
Match group sftponly |
さて,/home/USER
以下ですが,これはrootのものであると定めます.
ただし,読み書き実行が可能としましょう.
実行可能にするのは,次に設置するディレクトリを開くなどの操作を可能とするためです.
usermod -d /home/USER USER |
ここで行ったことの狙いは,/home/USER/
にはUSER
がログインしたときに使われるファイルが存在するので,処分されないようにrootのものとしたことにあります.
USER
が実際にファイルをアップロード/ダウンロードできるようにするには,rootでなくUSER
が管理者であるようなフォルダを別途設置しなければなりません.
USER
にディレクトリを作成し,その管理者をUSER
にします.
ここでは,DIR
という名前にしました.
mkdir /home/USER/DIR |
最後に,sshdを再起動して以上の設定を有効化します.
systemctl restart sshd |
複数サイトで鍵認証を使い分ける
/home/USER_NAME/.ssh/config
を作成し,次の形式で列挙します.
Host DOMAIN_NAME |
ログインは
ssh DOMAIN_NAME |
のみでよく,/home/USER_NAME/.ssh/config
で記載した上からの順で認証が行われます.
参考文献
CentOS 7の基礎的な内容を網羅的に扱ったガイドブックです.
- 大竹ら(2017)「標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド」,SBクリエイティブ.