書いてる人
プログラミング学習サービスやら、ペットサロン予約サービス、風俗検索サービスなど色々とやっている「かずきち」です。
■運営サービス一部
http://crazy-wp.com/
http://webukatu.com/
新宿のホストから不動産・保険の営業を経て、HTMLって何?という状態から3ヶ月独学でプログラミングやデザインを学び、IT業界で1年間実務経験を積んで年収は1本超え。現在は起業家としてサービス運営やら不動産運営をしています。
Qiita内にそれ系の記事も書いてます。
エンジニアで稼ぐために大切な13のコト
WEBサービスで起業したい人に読んで欲しい18のコト
さくらVPSに新しいユーザーを作成
サーバー契約したばかりだとユーザ名がrootのため、セキュリティ的によろしくないので新規作成する。
# useradd 好きなユーザ名
# passwd 好きなユーザ名
Changing password for user 好きなユーザ名.
New UNIX password:パスワード入力
Retype new UNIX password:パスワード再入力
passwd: all authentication tokens updated successfully.
作ったユーザがrootになるようにwheelグループに設定
wheel は root 権限を得られるユーザー グループ
# usermod -G wheel 好きなユーザ名
wheel グループに属するユーザへ、sudo を許可するよう設定
root になっている状態で visudo コマンドを実行する。
# visudo
vi が起動される。その中には、wheel の実行権限がコメントアウトされているので
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
2行目の「#」を削除して、コメントアウトを解除して保存。
パスを通す
sudo を通して実行するプログラムは、/usr/sbin や /usr/local/sbin に置かれていることが多いが、初期状態の一般ユーザーではこれらのパスが通っていないためコマンドを呼び出すときにいちいちフルパスで指定しないといけないので面倒。
そこで、パスを通してあげる。
「/home/ユーザ名/」の中に「.bash_profile」というファイルがあるのでviで開く。
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
となっているすぐ下に
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin
を追加し保存し、再ログインする。
ポート番号を変更
SSH の接続に使っていたポート 22 番は一般的なポートとして知られているので、そのままにしておくと攻撃対象になる。
攻撃者は 22 番が空いていることがわかると、ユーザーとパスワードを総当たりで侵入を試みるので、対処の1つとしてポート番号を変更しておく。
# vi /etc/ssh/sshd_config
# Port 22
Port 10022
※3行目のポート番号は適当で構わない
変更したら、sshを再起動
# /etc/init.d/sshd restart
2 Stopping sshd: [ OK ]
3 Starting sshd:
CentOS の環境を日本語にする
デフォルトは英語表示になっているので、日本語表示モードに変更する。
$ sudo vi /etc/sysconfig/i18n
LANG="C"
になっているのを
LANG="ja_JP.UTF-8"
に変更する。
iptablesを使ってファイアウォールを設定する
使うポート以外は閉じておく。
iptablesがインストールされてるか確認
$ yum list installed | grep iptables
iptables.x86_64 1.3.5-5.3.el5_4.1 installed
iptables-ipv6.x86_64 1.3.5-5.3.el5_4.1 installed
現在のiptables設定を確認
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
フィルタリングする
今回はSSH、HTTP、FTP、MySQL だけをポート解放し、後は利用しないようにする。
HTTP は 80 番、FTP は 20 と 21 番、MySQL は3306 番を使う。
iptablesファイルを作成する
$ sudo vi /etc/sysconfig/iptables
ファイル内に以下を記述
*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 XXXXX -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を再起動
$ sudo /etc/rc.d/init.d/iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
設定されてるか確認
$ sudo iptables -L
Apacheのインストール
インストールされてるか確認
$ rpm -qa httpd
入ってないので、インストールする。
$ sudo yum -y install httpd
インストールされたか以下のコマンドで確認
$ rpm -qa httpd
$ httpd -v
Apacheの初期設定をする
yum でインストールした場合は自動的に apache というユーザーが作成されている。
$ cat /etc/passwd | grep apache
apache:x:48:48:Apache:/var/www:/sbin/nologin
シェルに /sbin/nologin (稼働専用)となっているので、このユーザをそのまま使用する。
httpd.confのバックアップをとる
$ sudo cp /etc/httpd/conf/httpd.conf $HOME
viでhttpd.confを開き編集する
$ sudo vi /etc/httpd/conf/httpd.conf
1: 44行目のWeb サーバーにアクセスしたクライアントに返す情報を変更する
デフォルトだとhttpレスポンスヘッダにOSの情報が載ることになるので、ハッカーに余計な情報を与えないように
「OS」になっている部分を「Prod」に変える。
これでレスポンスヘッダには Server: Apache しか返らない。
ServerTokens OS
2: 251行目の障害発生時にユーザへ表示する連絡先メアドを適当なアドレスに変更する
ServerAdmin root@localhost
3: 265行目のサーバー名を変更
「#」を外してコメントアウト解除し、サーバーのホスト名を書く。
DNS に登録していないなら IP アドレスを指定。
# ServerName www.example.com:80
4: 320行目のオプション設定を変更
Indexsが設定されていると、もしユーザーがページを開いた時にindex.htmlがなければファイル一覧ページが自動生成されてしまい、ハッカーにファイル構成が知られてしまうので、無効にする。
「Indexes」の前に「-」を加える
Options Indexes FollowSymLinks
5: 524行目のエラーページなどに出力されるサーバー情報を変更
これも情報を与えすぎない様に「Off」にしておく。
ServerSignature On
以上変更したら保存し、設定に問題ないか確認。
$ sudo apachectl configtest
Syntax OK
Apacheを起動する
$ sudo service httpd start
httpd を起動中: [ OK ]
サイトにアクセスしてテストページが表示されればOK。
最後にOS起動時にApacheも自動で起動されるようにする。
$ sudo chkconfig httpd on
$ chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
MySQLをインストールする
$ sudo yum -y install mysql-server
インストールされたか確認する。
$ rpm -qa mysql-server
mysql-server-5.1.71-1.el6.x86_64
文字コードを設定する
UTF-8にする。
my.cnfファイルをHOMEディレクトリにバックアップしてから、
元ファイルを開く。
$ cd $HOME
$ cp /etc/my.cnf .
$ sudo vi /etc/my.cnf
以下のように記述
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# character-set
default-character-set=utf8
skip-character-set-client-handshake
[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
"/etc/my.cnf" 23L, 446C
保存する。
自動起動にする
Apacheと同じくOS起動時に自動起動するように設定する。
$ sudo chkconfig mysqld on
$ chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
MySQLを起動する
$ sudo /etc/rc.d/init.d/mysqld start
rootユーザにパスワードを設定する
データベース操作の全権限を持っているrootユーザにパスワードを設定する
$ sudo mysqladmin -u root password パスワード
rootユーザでログインする
$ mysql -u root -p
パスワード求められるのでさっき設定したパスワードを入れればOK。
「quit」と入力し、ログアウトする。
※実際に運用する時にはrootユーザーのままにせず、新規でユーザー作って権限を制限しないとハッキングされてユーザ権限を奪われた時に被害が大きくなるので注意
PHPをインストールする
画像合成などに使えるgdやpearなどのライブラリもインストールしておく。
sudo yum -y install php php-mbstring php-mcrypt php-mysql php-pear php-gd
php.iniを編集
タイムゾーンを日本時間にする
下記に変える
date.timezone = “Asia/Tokyo”
Subversion(SVN)をインストールする
$ sudo yum -y install subversion
バージョン確認する
$ svn --version --quiet
リポジトリを作成する
全てのリポジトリのルートになるディレクトリを作成
$ sudo mkdir /var/lib/svn
リポジトリを作成する
リポジトリ名は適当に。(今回の場合は、「sample」というリポジトリを作成)
$ sudo svnadmin create /var/lib/svn/sample
所有者を変更する
作成されたレポジトリ内のファイルやフォルダは、初期状態では root 所有となっている。
Apache 経由でリポジトリにアクセスしたい場合、Apache の実行ユーザーから読み書きできるように所有者を変更しておく。
$ sudo chown -R apache:apache /var/lib/svn/owl
確認する。
$ sudo chown -R apache:apache /var/lib/svn/owl
$ ls -l /var/lib/svn/owl
mod_dav_svn のインストールと設定
Apache 経由で Subversion のリポジトリを操作でき、Subversion 専用のポートを開放する必要もない。WebDAV を利用して公開することになるので、ブラウザからもリポジトリを表示できるので便利。
インストール
$ sudo yum -y install mod_dav_svn
専用のconfファイルを追加
$ sudo vi /etc/httpd/conf.d/svn.conf
以下のように編集
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/httpd/conf.d/svn_auth
Require valid-user
</Location>
Location ディレクティブにはリポジトリのルートを指定し、3 行目のリポジトリ指定もルートとしている。この指定の場合、すべてのリポジトリに同じ設定が適用される。リポジトリを追加した場合でも conf ファイルの変更や Apache の再起動が不要なので便利である。
リポジトリごとに設定を分ける場合は、ディレクティブの指定を /svn/リポジトリ名として、SVNParentPath の代りに SVNPath、内容はリポジトリへのパスとする。
4 行目以降は BASIC 認証に関する設定となる。これをおこなっておくことで、ブラウザなどからリポジトリにアクセスしたとき、ユーザーとパスワードによる保護をおこなえる。
パスワードファイルを作成
svn.conf の 6 行目に指定したパスに touch コマンドでファイルを用意し、パスワード設定をおこなう。USERNAME の部分は SVN のリポジトリにアクセスするユーザー。
$ sudo touch /etc/httpd/conf.d/svn_auth
$ sudo htpasswd /etc/httpd/conf.d/svn_auth USERNAME
New password: XXXXXX
Re-type new password: XXXXXX
Adding password for user USERNAME
Apacheの設定確認と再起動
$ sudo apachectl configtest
Syntax OK
$ sudo service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
http://XXX.XXX.XXX.XXX/svn/リポジトリ名 で入れるか確認。
phpMyAdminをインストールする
MySQLをブラウザ上から簡単に管理できるので便利。
$ wget http://www.phpmyadmin.net/home_page/downloads.php/phpMyAdmin-4.1.4-all-languages.tar.gz
・
・
・
続く
WEBプログラミングから起業までを一貫して学べるオンライン動画総合学習サービス『ウェブカツ!!』
様々なプログラミング学習サイトやサービスでは正直な所、自分でWEBサービスを作れるようにはならないため、「自分でWEBサービスを作れるようになる!」をゴールとしたオンライン動画総合学習サービス『ウェブカツ!!』を立ち上げました。興味ある方は登録よろしくお願いいたします。
http://webukatu.com/