CentOS7 初期設定

Twitterでシェア FaceBookでシェア はてなブックマークでシェア

Linux - CentOS7
2018年11月22日21:35に更新(約21日前)
2018年10月8日21:22に作成(約66日前)

旧ブログ移行記事です。

概要

CentOS7でDjangoを動かすシリーズシリーズの一つです。

アップデート

まず、アップデートしましょう。これは必須です。

yum update

一般ユーザーの追加

次に、一般ユーザーを追加します。rootユーザーでの直接操作はあまりよろしくなく、後でこのユーザーで操作できるようにしていきます。

adduser spam
passwd spam

SSHのポート変更とrootログインの禁止

rootユーザーで第三者にログインされてしまうと、それはサーバーが乗っ取られたことと同義です。初期状態だと、SSHでのログインに必要なのはユーザー名とパスワード、ポートです。このうちユーザー名がrootでポートが22のままだと、パスワード総当たりで突破されます。

まず設定ファイルを開きます。

vi /etc/ssh/sshd_config

ポートは1024以降で、他のアプリケーションが割り当てられていない数字にしましょう、#Portの#を外して、数字を書き換えましょう。

#Port 22
↓
Port 任意の数字。5桁とかでも良し

そして、rootユーザーでログインをできなくします。

#PermitRootLogin yes
↓
PermitRootLogin no

SSHサーバを再起動し設定を反映させます。

systemctl restart sshd.service

SSH ポート開放

先ほど設定したSSHのポートを開放します。方法はいくつかありますが、よくやるのは以下の方法です。

cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
vi /etc/firewalld/services/ssh.xml

portの22を、先ほど変更したポートにする

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

設定が終われば反映しときます。

firewall-cmd --reload

ポート開放の仕方① サービス名を指定する

ポートを空けるには、大まかに2つの方法があります。 1つめは、サービス名を指定する方法です。今回行ったのもこれです(sshは、既に--add-serviceされた状態でした)。

firewall-cmd --add-service=http --permanent --zone=public
firewall-cmd --add-service=https --permanent --zone=public

もしポートを閉じたいならば、remove-serviceとします。

firewall-cmd --remove-service=http --permanent --zone=public

このservice=に指定できるものは、予めいくつか作られています。/usr/lib/firewalld/services/ の中に、設定用のxmlファイルがあります。

ls /usr/lib/firewalld/services/

以下のように、たくさん表示されます。

RH-Satellite-6.xml       docker-registry.xml      iscsi-target.xml  nfs.xml                   pulseaudio.xml         squid.xml
amanda-client.xml        dropbox-lansync.xml      kadmin.xml        nfs3.xml                  puppetmaster.xml       ssh.xml
amanda-k5-client.xml     elasticsearch.xml        kerberos.xml      nrpe.xml                  quassel.xml            synergy.xml
bacula-client.xml        freeipa-ldap.xml         kibana.xml        ntp.xml                   radius.xml             syslog-tls.xml
bacula.xml               freeipa-ldaps.xml        klogin.xml        openvpn.xml               rpc-bind.xml           syslog.xml
bitcoin-rpc.xml          freeipa-replication.xml  kpasswd.xml       ovirt-imageio.xml         rsh.xml                telnet.xml
bitcoin-testnet-rpc.xml  freeipa-trust.xml        kshell.xml        ovirt-storageconsole.xml  rsyncd.xml             tftp-client.xml
bitcoin-testnet.xml      ftp.xml                  ldap.xml          ovirt-vmconsole.xml       samba-client.xml       tftp.xml
bitcoin.xml              ganglia-client.xml       ldaps.xml         pmcd.xml                  samba.xml              tinc.xml
ceph-mon.xml             ganglia-master.xml       libvirt-tls.xml   pmproxy.xml               sane.xml               tor-socks.xml
ceph.xml                 high-availability.xml    libvirt.xml       pmwebapi.xml              sip.xml                transmission-client.xml
cfengine.xml             http.xml                 managesieve.xml   pmwebapis.xml             sips.xml               vdsm.xml
condor-collector.xml     https.xml                mdns.xml          pop3.xml                  smtp-submission.xml    vnc-server.xml
ctdb.xml                 imap.xml                 mosh.xml          pop3s.xml                 smtp.xml               wbem-https.xml
dhcp.xml                 imaps.xml                mountd.xml        postgresql.xml            smtps.xml              xmpp-bosh.xml
dhcpv6-client.xml        ipp-client.xml           ms-wbt.xml        privoxy.xml               snmp.xml               xmpp-client.xml
dhcpv6.xml               ipp.xml                  mssql.xml         proxy-dhcp.xml            snmptrap.xml           xmpp-local.xml
dns.xml                  ipsec.xml                mysql.xml         ptp.xml                   spideroak-lansync.xml  xmpp-server.xml

試しに、ポスグレのxmlファイルを見てみましょう。

cat /usr/lib/firewalld/services/postgresql.xml

説明やポート番号が定義されていますね。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>PostgreSQL</short>
  <description>PostgreSQL Database Server</description>
  <port protocol="tcp" port="5432"/>
</service>

add-service=httpのようにすると、http.xmlの中身を見ながら、ポートの開放をしてくれるという訳です。

しかし、今回のように既にあるサービス...sshのポート番号を変更したい、という場合もあります。又は、自分で独自のxmlを作り、ポートを開放したくなるかもしれません。そのような場合は、今回行ったように/etc/firewalld/services/ にxmlファイルを置きます。/usr/lib...よりも、こちらの内容が優先されるのです。

一からxmlファイルを作るとミスをすることもあるので、 cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ のようにコピーして、/usr/lib...の中のxmlファイルを雛形として使うのが確実です。 /usr/lib...の中のxmlファイルは変更しないようにしましょう。変更や追加をしたくなったら/etc...で管理します。

/usr/lib..が見づらかったり/etc...にも沢山xmlファイルを置いちゃって、どんなサービスが定義されてるかの確認が面倒になった場合は、以下のようにするとadd-serviceとして指定できるサービス名が一覧表示されます。上記の2つのディレクトリを見ながら生成してくれます。

firewall-cmd  --get-services

こんな感じで表示されます。

RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

また、以下のようにすると現在登録した(add-serviceした)一覧も表示できます。

firewall-cmd --list-all

servicesの部分に注目してください。sshやhttpとありますね。

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh http
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

ポート開放の仕方① 番号を直接指定する

もう一つの方法として、直接ポート番号を指定することもできます。一時的にポート開放したいなんてときは、こちらの方が簡単ですね。

firewall-cmd --add-port=8000/tcp --permanent --zone=public
firewall-cmd --remove-port=8000/tcp --permanent --zone=public

ログウォッチ

やってもやらなくても自由ですが、毎日サーバーの状態をメールしてくれるログウォッチは便利です。導入も簡単です。

yum install logwatch

自分のメールアドレスを設定しときましょう。

vi /etc/logwatch/conf/logwatch.conf

MailTo = toritoritorina@gmail.com

OSの自動アップデート設定

OSの自動アップデートの設定もしときましょう。

yum install yum-cron

ファイルを編集する必要があります。

vi /etc/yum/yum-cron.conf

yesに書き換えます。

apply_updates = yes

yum-cronサービスの起動と、自動起動の有効

systemctl start yum-cron.service
systemctl enable yum-cron.service

SELinuxの無効

何かと衝突することが多いので、今回はSELinuxの無効化もしときます。

setenforce 0

sudoを使えるように

rootで直接操作するよりもsudoコマンドでの実行の方が安心です。以下のコマンドでsudo設定用ファイルを編集できます。

visudo

そして以下のように追加。以降はrootユーザをあまり使わないようにします。また、管理者権限が必要なコマンドには頭にsudoとつけます。

あなたのユーザー名 ALL=(ALL) ALL

一般ユーザーでログインできるかを試す

一般ユーザでログインできるか試しましょう。設定ミスがあった場合に備え既存の画面は消さず、ターミナルやテラターム等をもう一つ開いてログインできるか試すことをお勧めします。無事ログインできたら、rootでログインしている方は消しましょう。

サーバー側での以降の操作は一般ユーザーで行っていきます。

公開鍵認証

公開鍵を作成し、自分のPCからのみsshで接続できるようにします。 テラタームの場合は、設定メニューからssh鍵生成をクリックし、生成ボタン パスフレーズの入力し、公開鍵(id_rsa.pub)の保存、秘密鍵(id_rsa)の保存を押します。

MacやLinuxでは、以下のコマンドを入力します。これはサーバー側ではなく、ターミナルや端末を新しく開いて行います。

ssh-keygen -t rsa -f 鍵の名前

-f 鍵の名前とオプションをつけて実行すると、カレントに秘密鍵と公開鍵(.pubのほう)が生成されます。-fをつけなければ、ホームディレクトリの.sshにid_rsaとid_rsa.pub として作成されます。

公開鍵をサーバーに転送します。テラタームの方は単純にドラッグアンドドロップで、ホームディレクトリに送信します。 Mac、Linuxの方ならば以下のようにします(これもサーバー側で行わないよ)。scpコマンドでは、ポートの指定を-Pと大文字になることに注意です。

scp -P ポート番号 -i 公開鍵 送信したいファイルパス ユーザー名@サーバーのドメインorIP:

サーバー側で、ディレクトリの作成と公開鍵の登録をしましょう。chmodでの権限を777とかにすると動かなくなるので注意しましょう(ここのコマンドは、sudoをつけなくても大丈夫です)。

mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

環境によりますが、今回はパスワード認証を無効化します。秘密鍵を持ったPCからでないと接続できない、ということですね。

sudo vi /etc/ssh/sshd_config

noにします。

PasswordAuthentication yes
↓
PasswordAuthentication no

再起動して反映させます。

sudo systemctl reload sshd

秘密鍵でログインできるかを試す

秘密鍵でログインできるかまた試したいのですが、設定を間違えたら入れなくなりますので、新しいターミナルやテラタームを開いて確認します。 テラタームならば、ユーザ名入力画面でRSA...鍵を使う、を押し、あとは流れで設定してください。

ターミナル等の場合は以下のコマンドでいけます。

ssh -p ポート -i 秘密鍵(pubのついていないほう) ユーザー名@IP or ドメイン

ロケールの変更

ロケールの変更もしときましょう。 以下のコマンドで、現在のロケールが表示されます。

localectl status

さくらVPSのCentOS7だと、こんな感じでした。

   System Locale: LANG=C
       VC Keymap: jp106
      X11 Layout: jp

ロケールの変更と、反映を行います。

sudo localectl set-locale LANG=ja_JP.utf-8
source /etc/locale.conf

さくらVPSの公式サイトにも親切なマニュアルが載っているので、こちらもオススメです。

Twitterでシェア FaceBookでシェア はてなブックマークでシェア

記事にコメントする