今まで共用サーバーしか使ったことがありませんでしたが多くのサービスを作る上で専有サーバーを使ったりさくらのVPS を使ったりできるようになれば行けないと思ったので、丸1日かけて勉強しました。CUI でのサーバー管理は初めてなので、間違っているところがあったら教えてください。
今回メインで参考にさせて頂いた記事は以下です。
追記: この記事に書いてある通りの設定で良ければVPSの設定代行など承ります。その後の調整等や維持管理はご自分でできる方に限ります。料金についてや詳しいお話についてはお問い合わせください。
root 権限では危ないのでユーザーを作成する
ここでは hoge というユーザーを作成します。
1 2 | adduser hoge
passwd hoge |
以下のように2回パスワードを求められます。
Changing password for user hoge.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
以下のサイトが参考になりました。
Linuxのお勉強(CentOSとApache):CentOSでユーザーを追加・削除する(LINUX) – livedoor Blog(ブログ)
.bashrc を設定する
以下のように作業がしやすいように .bashrc を設定しておきます。エイリアスの設定などありましたらここで設定しておきます。
1 | vi ~/.bashrc |
.bashrc の変更が終われば以下のようにして再読込をします。
1 | source .bashrc |
以下のページが参考になりました。
.bashrc が反映されない件 – たつこの部屋
vim をインストールする
SSH で作業をする際に個人的にはカラフルな方が楽しいです。ヘテムルなどは vi で作業をすると最初からいろが付いていましたが、実は vim をインストールしてくれて vi にエイリアスをかけてくれていたからみたいです。なのでカラフルで作業したいなら自分で vim をインストールします。
1 | yum -y install vim-enhanced |
終わったら .bashrc などに以下のようにしてエイリアスを設定しておきます。
1 | alias vi='vim' |
その次に自分で作った .vimrc などを ~/.vimrc などに置きます。
1 | scp -P 22 ~/.vimrc hoge@example.com:~/.vimrc |
以下のサイトが参考になりました。
SSH のポート番号を変更する
以下のコマンドで SSH の設定ファイルを編集します。
1 2 | su vim /etc/ssh/sshd_config |
#Port 22 というところがありますので、そこのコメントアウトを外して Port 10022 などに変更します。
1 2 | #Port 22 Port 10022 |
その後以下のようにして SSH を再起動し反映します。
1 | /etc/init.d/sshd restart |
以下のツイートが参考になりました。
Twitter / @樋口 彰久: $ /etc/init.d/sshd restart …
公開認証鍵で SSH 接続できるようにする
自分のパソコンのターミナルで ssh-keygen を実行する。
1 2 3 4 5 | ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/hoge/.ssh/id_rsa): // ファイル作成場所 Enter passphrase (empty for no passphrase): // パスフレーズを入力する Enter same passphrase again: // パスフレーズをもう一度入力する |
~/.ssh ディレクトリに以下のようにファイルが生成されます。
1 2 3 | -rw------- 1 hoge staff 1743 5 14 16:29 id_rsa -rw-r--r-- 1 hoge staff 402 5 14 16:29 id_rsa.pub -rw-r--r--@ 1 hoge staff 3911 5 11 02:28 known_hosts |
id_rsa.pub をサーバのユーザーディレクトリの .ssh/ フォルダの中に authorized_keys という名前で保存する。フォルダがなければ、まずは以下のようにサーバー側に必要なディレクトリの作成から始めます。
1 2 | cd ~ mkdir .ssh |
次にローカルから .ssh フォルダの中に対して以下のようにしてファイルを転送します。
1 | scp -P 10022 ~/.ssh/id_rsa.pub hoge@example.com:~/.ssh/authorized_keys |
転送が終わったらサーバー側でパーミッションを調整します。
1 2 | chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys |
この段階で公開認証鍵を使ったログインができる状態になります。
これを公開認証鍵のみでのログインできる状態に変更します。
以下のファイルを編集します。ついでにいろいろ設定しましょう。
1 2 | su vim /etc/ssh/sshd_config |
PermitRootLogin を no にすることで root によるログインを禁止することができます。without-password を設定すればパスワードによるログインを禁止することができます。
1 | PermitRootLogin no |
PasswordAuthentication を no にすることで root のみならず全てのユーザーでパスワードによるログインを禁止することができます。これで認証鍵を持っていなければログインすることができなくなります。
1 | PasswordAuthentication no |
PermitEmptyPasswords を no に設定することで空のパスワードでのログインを禁止することができます。
1 | PermitEmptyPasswords no |
設定が完了したら SSH の設定を反映させましょう。
1 | /etc/init.d/sshd restart |
認証鍵の設定ですが、きちんと設定が反映されているかをチェックする際はこの段階でログアウトせずに別のウィンドウでログインできるかを試すべきです。万が一設定に問題があった場合、一度ログアウトしてしまうと二度とログインできなくなります。私はこれで1度サーバーを初期化しなければいけなくなりました。
以下のサイトが少し参考になりました。
Mac,SSH,Terminal,ssh-keygen,publickey,gssapi-with- || memblog
ファイアーウォールを構築する
まず以下のファイルを作成します。
1 | vi /etc/sysconfig/iptables |
詳しくない場合は以下のコードを使うと良さそうです。主にカスタマイズするとしたら18行目から23行目を変更します。SSH と HTTP のみを使う、MySQL は localhost で使うし FTP は使わないならば、それに応じて塞ぎます。
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 | *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH, HTTP, FTP1, FTP2, MySQL -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT |
コピーする場合に改行のところにスペースがあるとエラーになります。無駄なスペースが入っていないか調べるようにしましょう。問題がなさそうでしたら、以下のコマンドで iptables を再起動します。
1 | /etc/rc.d/init.d/iptables restart |
以下のサイトがひと通り探したサイトの中で最も参考になりました。
さくらのVPS を使いはじめる 3 – iptables を設定する | アカベコマイリ
利用されていないデーモンを終了する
bluetooth など通常は使わないサービスが起動しているので、それを終了します。
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 | /sbin/chkconfig auditd off /sbin/chkconfig autofs off /sbin/chkconfig avahi-daemon off /sbin/chkconfig bluetooth off /sbin/chkconfig cups off /sbin/chkconfig firstboot off /sbin/chkconfig gpm off /sbin/chkconfig haldaemon off /sbin/chkconfig hidd off /sbin/chkconfig isdn off /sbin/chkconfig kudzu off /sbin/chkconfig lvm2-monitor off /sbin/chkconfig mcstrans off /sbin/chkconfig mdmonitor off /sbin/chkconfig messagebus off /sbin/chkconfig netfs off /sbin/chkconfig nfslock off /sbin/chkconfig pcscd off /sbin/chkconfig portmap off /sbin/chkconfig rawdevices off /sbin/chkconfig restorecond off /sbin/chkconfig rpcgssd off /sbin/chkconfig rpcidmapd off /sbin/chkconfig smartd off /sbin/chkconfig xfs off /sbin/chkconfig yum-updatesd off |
各サービスについては以下のページが参考になります。
CentOSをサーバーとして活用するための基本的な設定 – さくらインターネット創業日記
要らないコンソールを無効にする
参考記事に /etc/inittab から無効にするとありましたが既に無効になっていました。
1 2 3 4 5 | #2:2345:respawn:/sbin/mingetty tty2 #3:2345:respawn:/sbin/mingetty tty3 #4:2345:respawn:/sbin/mingetty tty4 #5:2345:respawn:/sbin/mingetty tty5 #6:2345:respawn:/sbin/mingetty tty6 |
selinuxを無効にする
参考記事に /etc/sysconfig/selinux から無効にするとありましたが既に無効になっていました。
1 | SELINUX=disabled |
サーバーの設定変更を反映させる
全ての設定が完了したらサーバーを再起動させます。
1 | reboot |
再起動する前には free コマンドで現在のメモリ使用量などを確認しておきます。
1 | free |
私の環境ではメモリ使用量が235MBから160MBまで減らすことができました。
これでセキュリティとパフォーマンスの最低限の設定は完了しました。
これから細かい設定などを進めていきます。
sudo コマンドにユーザーを追加する
Mac や Ubuntu には su で root にならなくても sudo でその都度管理者権限でコマンドを実行することができます。まず visudo コマンドを実行して /etc/sudoers を編集します。
1 | /usr/sbin/visudo |
開いたファイル内の一番下で良いので以下のように記述します。
1 | hoge ALL=(ALL) ALL |
以下のページが参考になりました。
CentOS:sudo を設定する – 日々のメモ
CentOS の環境を日本語に設定する
日本語にするメリットはあまり無いですが試しに設定します。
1 | sudo vi /etc/sysconfig/i18n |
LANG を以下のように変更します。
1 2 | LANG="ja_JP.UTF-8" SYSFONT="latarcyrheb-sun16" |
以下のページが参考になりました。
さくらのVPS を使いはじめる 5 – MySQL のインストールと初期設定 | アカベコマイリ
yum をアップデートする
以下のようにして yum をアップデートします。
1 | sudo yum update |
Apache をインストール・設定する
以下のコマンドで Apache をインストールする。
1 | sudo yum install httpd |
Apache を起動する。
1 | sudo /etc/rc.d/init.d/httpd start |
Apache を自動起動に設定する。
1 | sudo /sbin/chkconfig httpd on |
以下の記事が参考になります。
さくらVPSでPHPを動かすまで – web探検隊
PHP をインストール・設定する
PHP の5.3系をインストールします。yum でインストールできるようにリポジトリを追加します。
1 2 3 | wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm wget http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm sudo rpm -Uvh remi-release-5-8.el5.remi.noarch.rpm epel-release-5-4.noarch.rpm |
remi を有効にするそうです。enabled=1 にするそうです。
1 | sudo vi /etc/yum.repos.d/remi.repo |
PHP のインストールを実行します。
1 | yum install php-devel php-mbstring php-mysql php-gd php-mcrypt php-pear |
Apache を再起動して PHP を使えるようにします。
1 | sudo /etc/rc.d/init.d/httpd restart |
以下の記事が参考になります。
さくらVPSに lighttpd + PHP 5.3 + MySQL 5.1 をインストール : dogmap.jp
eAccelerator をインストール・設定する
アクセラレータはスクリプトを解析した結果を中間コード(バイトコード)の状態で共有メモリ上にキャッシュします。スクリプトの2回目以降の実行は構文解析を行わずに, キャッシュされた中間コードをダイレクトに読み込むことで処理を高速化しています。巨大なソースファイルや多数のファイルをインクルードしているケースでは, アクセラレータは絶大な威力を発揮します。
PHP:eAccelerator で PHP 高速化 – Y-110's Wiki
参考にしていたページで導入していたので私も入れてみることにしました。
1 2 3 4 5 6 7 | wget http://sourceforge.net/projects/eaccelerator/files/eaccelerator/eAccelerator%200.9.6.1/eaccelerator-0.9.6.1.zip/download unzip eaccelerator-0.9.6.1.zip cd eaccelerator-0.9.6.1 phpize ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config make sudo make install |
php.ini を編集します。
1 | sudo vi /etc/php.ini |
以下を末尾に追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [eaccelerator] zend_extension="/usr/lib64/php/modules/eaccelerator.so" eaccelerator.shm_size = "32" eaccelerator.cache_dir = "/var/cache/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "0" eaccelerator.shm_ttl = "0" eaccelerator.shm_prune_period = "0" eaccelerator.shm_only = "0" eaccelerator.compress = "1" eaccelerator.compress_level = "9" eaccelerator.keys = "shm_and_disk" eaccelerator.sessions = "shm_and_disk" eaccelerator.content = "shm_and_disk" |
他にも APC などがありますが、これは導入が少しだけ面倒なので別記事で紹介させて頂きます。
以下のページがとても詳しく説明していて参考になりました。
さくらVPSに lighttpd + PHP 5.3 + MySQL 5.1 をインストール : dogmap.jp
MySQL をインストール・設定する
MySQL がインストールされているのかチェックをして、もしインストールされていなければ以下のようにしてインストールをします。
1 | sudo yum -y install mysql-server |
次に MySQL の設定ファイルを編集します。
1 | sudo vi /etc/my.cnf |
以下のように設定ファイルを編集します。
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 | [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 # character-set default-character-set=utf8 skip-character-set-client-handshake # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: # symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8 |
追記: MySQL5.5なら [mysqld] のところは default-character-set の代わりに character-set-server を使います。
以下のコマンドで MySQL を自動起動するように設定します。
1 | sudo /sbin/chkconfig mysqld on |
MySQL を起動します。初回は初期化が始まります。
1 | sudo /etc/rc.d/init.d/mysqld start |
root ユーザのパスワードを設定する。
1 | sudo mysqladmin -u root password 'パスワード' |
以下のページが物凄く詳しく説明しています。本当に参考になります。
さくらのVPS を使いはじめる 5 – MySQL のインストールと初期設定 | アカベコマイリ
バーチャルホストを設定して Web サイトを公開する
最後に Web サイトを公開するためにバーチャルホストを設定します。Web サイトの公開ディレクトリの場所は個人的には /var/www/example.com/web がカッコイイと思います。
バーチャルホストの細かい設定についてはローカルで開発環境を作るのとそんなに変わりませんので、ぜひ以下の記事を参考にしてみてください。
Mac でバーチャルホストを XAMPP や MAMP に頼らず設定する方法 | ウェブル
面白いアプリケーションなど
Prompt, nice SSH for iOS
あのパニックが SSH のクライアントを作ってくれたみたいで、今まで変なソフトでやっていた人はこれに変えると良さそうです。
パニック・ジャパン – Prompt, nice SSH for iOS – サポート
GNU Screen
1台の端末や接続したリモートの端末から、全く別々の複数の端末へと同時に接続する事が出来る。コマンドライン上で複数のプログラムを実行したり、シェル上でプログラムを実行させたまま接続を解除したりする時等に非常に役に立つソフトウェアらしい。
コメント