CentOS8は初期設定でSSHを繋げるようになっていますが、セキュリティが脆弱な状態です。
なので、サーバの公開(インターネット上から繋げるようにする)前に設定をしておかないと悪意を持った人々の餌食となってしまいます。
そうならないようにするためにもしっかりとSSH周りの設定をしておきましょう。
もしSSHを使わない場合はしっかりとSSHを停止しておきましょう。
この記事で行うこと
- SSHの起動・停止
- rootへの直接ログインの禁止
CentOS8は初期設定でSSHを繋げるようになっていますが、セキュリティが脆弱な状態です。
なので、サーバの公開(インターネット上から繋げるようにする)前に設定をしておかないと悪意を持った人々の餌食となってしまいます。
そうならないようにするためにもしっかりとSSH周りの設定をしておきましょう。
もしSSHを使わない場合はしっかりとSSHを停止しておきましょう。
ファイアウォールは直訳すると防火壁となり、外部からの不正なアクセスを遮断するための機能です。
外から降りかかる火の粉(不正アクセス)を防ぐ防火壁ということですね。
ここではファイアーウォールの解説と、よく使うコマンドについて扱います。
前述の通り、ファイアウォールは防火壁として不正なアクセスを防いでくれるものです。
ただ、実際にはファイアウォールは事前に通すように設定された通信以外は全て遮断するようになっています。
アクセスが不正か否かは判断できないため「疑わしきは通さない」となるわけです。
このため、アクセスさせたい場所には事前に穴を開けておく必要があります。
ファイアウォールではポートの単位で穴を開ける事ができます。
ポートというのは簡単に言うとサーバとネットワークを繋ぐ出入り口です。
このポートは65536個存在し番号で表現されていて、各アプリケーションに割り振られています。
有名なところでいうと、SSH接続は22番ポート、HTTPは80番ポートといった具合です。
実際に割り振られているのはごく一部で、残りは空きポートとして必要に応じて使うことができます。
具体的にいうと0番から1023番までのポートは既に割り振られているので使えませんが、それ以上の番号のポートはそのポートを使うと言っているアプリケーションをインストールしていない限りは自由に使えます。
例えば、「SSH接続を使う予定がなかったので初期設定のままで放置をしていたら、そこに付け込まれて不正なアクセスを受けてしまった」ということが起きえます。
当然、使わないのであればSSHを停止しておくべきでしたが、ファイアウォールで22番ポートを閉じていたとしたらSSHが起動したままでも上記のような事は起きません。
このように転ばぬ先の杖となるのがファイアウォールとなります。
ファイアウォールは firewall-cmd
というコマンドで操作します。
これは Firewall Daemon Command の略で、 Firewall Daemon が firewalld と略され、更に firewalld Command が firewall-cmd と略された物と思われます。
このコマンドに何をさせたいかをオプションのような形で与えることで操作をします。
現在のファイアウォールの設定を全て表示させるコマンドです。
以下のような表示が出ると思います。(実際にはsourcesとportsは空欄になっていますが、今回は説明のために記入しています)
[root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp3s0 sources: 192.168.10.0/24 services: cockpit dhcpv6-client ssh ports: 22/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
ここでは以下に注目してください。
許可ルールを追加します。
xxxxxxの部分には許可したいルールの種類を入れ、zzzzzzの部分には許可したいルールの内容を入れます。
例えば、servicesにHTTPを追加したい場合は以下のようになります。
[root@localhost ~]# firewall-cmd --add-service=http
こうして設定したルールはすぐに有効になりますが、サーバやファイアーウォールを再起動したり、ファイアウォールを再読込(–reload)すると消えてしまいます。
上記のコマンドに --permanent
のオプションを設定すると、逆にすぐには有効にならず、サーバやファイアーウォールを再起動したり、ファイアウォールを再読込(–reload)するとずっと有効になります。
[root@localhost ~]# firewall-cmd --add-service=http --permanent
先に一度ルールを追加して試して問題がなかった場合に --permanent
を付けて再度設定すると良いです。
--add-xxxxxx=zzzzzz
とは逆に許可ルールを削除します。
使い方は --add-xxxxxx=zzzzzz
と同様に、xxxxxxの部分には削除したいルールの種類を入れ、zzzzzzの部分には削除したいルールの内容を入れます。
例えば、portsから22/tcpを削除したい場合は以下のようになります。
[root@localhost ~]# firewall-cmd --remove-port=22/tcp
また --permanent
のオプションを設定するとすぐには有効にならず、再起動や再読込で有効になるという点も同じです。
[root@localhost ~]# firewall-cmd --remove-port=22/tcp --permanent
ちなみに、初期設定で「cockpit」と「dhcpv6-client」というサービスを通すルールが有効になっていますが、これは当面使わないので削除してみましょう。
ファイアウォールの設定を再読み込みします。
--permanent
オプションを付けた設定を有効にしたり、逆に --permanent
オプションを付けずに色々と試してみた設定をなかったことにするときに使います。
使い方は以下の通りです。
[root@localhost ~]# firewall-cmd --reload
再読み込みを行った後は必ず --list-all
で想定したとおりの設定になっているか確認するようにしましょう。
今回はファイアウォールの基本的な設定について説明しました。
理論上は、全てのアプリに脆弱性がなく設定にも穴がない状態が常に維持されていればファイアウォールは不要ということになります。
ただ、人間いつミスを犯すか分からないですし、最新のアプリでも脆弱性が見つかることもあります。
リスクを軽減するためにもファイアウォールは常に確認して、不要なポートは必ず閉めるようにしましょう。
この記事ではLinuxでのファイルの権限設定について触れたいと思います。
アプリをインストールして使う場合、権限設定不要で動くことも多いです。
しかし、設定ファイルを自分で作ったときなどにそのファイルの権限設定が合わないためにアプリが動かないといったことが起きます。
このような際に対応するためにも権限設定については知っておいて損はありません。
Linuxではユーザーとグループという概念があります。
ユーザは特定の個人を指します。
とはいえ実際の人でなくても、例えばアプリケーションなんかもユーザを持っていたりします(システムアカウントといいます)。
ユーザはコマンドを実行できる主体と考えることができます。
つまり、ユーザでなければコマンドを実行できません。
これだとアプリケーションが何かしらのコマンドを実行したいときに困ってしまいます。
なので、アプリケーションもシステムアカウントを持っているのです。
グループはユーザをひとまとめにした物を指します。
代表的な例だと、rootになれる管理者ユーザを集めたwheelグループがあります。
またユーザを作ると、同時にユーザ名と同じ名前のグループができます。(例えばyutoといユーザを作ると、同時にyutoというグループができます)
グループは複数のユーザを一纏めにしますし、ユーザは複数のグループに属せます。
グループとユーザはいわゆる多対多の関係です。
各ファイルは「所有者」と「グループ」と「パーミッション」を持っています。
「所有者」と「グループ」はそれぞれファイルを所有するユーザ、グループを表しています。
「パーミッション」はそのファイルへのアクセスをどこまで許すかという物を「所有者」「グループ」「その他ユーザ」毎に設定することになります。
どこまで許すかという部分は以下の組み合わせで設定できます。
1 | 実行権限 (eXecute) | x |
2 | 書き込み権限 (Write) | w |
4 | 読み取り権限 (Read) | r |
例えば、このファイルは誰でも読み取れるけど、書き込むのはグループに所属している人だけで、実行は自分だけといった設定ができます。
さて、こうやって毎回「このファイルは誰でも読み取れるけど、書き込むのはグループに所属している人だけで、実行は自分だけ」と書くのは面倒です。
なので、左から順に所有者に許可されたこと、グループに許可されたこと、その他ユーザに許可されたことを並べてみましょう。
また、より短縮するために許可されたことの内容をアルファベット一文字で表してみましょう。(上表の右にあるアルファベット)
rwxrw-r--
ファイルのあるディレクトリで ls -l
を実行すると、各ファイル名の左側に同じような表記があると思います。
これはそのファイルのパーミッションを表していたのです。
また、もっと短縮することができます。
上記の表の左側にある数字を足し合わせて権限を表すのです。
実行、書き込み、読み取りが全てできる場合は1+2+4=7、書き込みと読み取りができる場合は2+4=6、実行と書き込みのみできる場合は1+2=3といった具合です。
これで表すと、上記の表示は764と表せます。
これはパーミッションの設定時に使うので覚えておいてください。
権限設定は以下の2つのコマンドで行うことができます。
2つだけなので、ぜひ覚えてください。
ファイルの所有者とグループを変えられます。(本来はグループを変えるための chgrp
というコマンドがありますが chown
で両方変えられるのでこっちだけ覚えていれば大丈夫です)
CHange OWNerの略です。
使い方は以下となります。
# chown [オプション] [変更後の所有者]:[変更後のグループ] [ファイル名]
またよく使われるオプションは -R
があります。
これはディレクトリを chown
で指定したときに、中身も全て同じように所有者変更を行うという物です。
なお、小文字の -r
ではオプションとして扱われずにエラーになるので必ず大文字で入力してください。
ファイルのパーミッション設定を変えられます。
CHange MODeの略です。
使い方は以下となります。
# chmod [オプション] [変更後のパーミッション] [ファイル名]
変更後のパーミッションは3桁の数字で表すようにしてください。(1-3の最後で扱ったアレです)
またよく使われるオプションは -R
があります。
これはディレクトリを chmod
で指定したときに、中身も全て同じように所有者変更を行うという物です。
なお、小文字の -r
ではオプションとして扱われずにエラーになるので必ず大文字で入力してください。
chmodを使った権限設定方法には「○○の権限を外す」「○○の権限を付ける」のように設定できる他の書き方もあるのですが、ここでは触れません。気になる方は調べてみてください。
今回はLinuxの権限の基本とファイルへの権限設定について説明しました。
他にも権限設定だと「新たにグループを作成する」「ユーザをグループに追加する」などグループ周りのことがあるのですが、基本的に全てを一人で管理する自宅サーバではあまり必要とならないので割愛します。
興味のある方はぜひ調べてみてください。
アプリが動かないとなった時、設定ファイルの中身が間違っていなければ次に疑うべきは権限設定です。お気を付けを。