まずはじめにボクはCUIを延々避け続けてきた人間で、
今回の手順を事細かに勉強しながらメモって行ったおかげで、くっそ長いです。ごめんなさい。
経緯
3年前にサーバを借りたんですが(安さと簡単そうって理由だけでlolipopだった気がする)、
今のサーバではできない、どうしてもやりたいことがいくつか出て来てしまったので
今回CUIやサーバ周りの勉強も兼ねて、さくらのVPSに乗り換えてみました。
ちなみにCUIどころかviも何それうまいの?っていうレベルですのであしからず..
また、これはマズいっていう間違いあったら教えて頂けると泣いて喜びます(´;ω;`) ブワッ
とりあえず環境は Mac OSX 10.6.8 で、さくらのVPS 512で行います!
すたーと!
1.さくらVPS コントロールパネル リモートコンソールからroot権限でログインする。
https://secure.sakura.ad.jp/vpscontrol/main/vnc
2.ますはUser/Passを設定
adduser yourUserName
passwd yourUserName
でpassword何にするん?って聞かれるので2回答える。
そすれば、passwd: all authentication tokens updated successfully.
で設定完了。実際のやり取りは以下。
[root@localhost ~]# adduser hogehoge [root@localhost ~]# passwd hogehoge Changing password for user hogehoge. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
このついでにrootのpasswdもデフォルトでもらったものから変更しておく。
[root@localhost ~]# passwd
sudoの実行権限をwheelグループに追加することで得るようにする。
rootってのは基本使わずに、ユーザを追加してそいつで操作するらしい。
なのでその為にそいつに権限渡してあげるって感じかね。?
su - とか、sudo コマンドを使う!
$ su - ←root権限での実行が必要なのでsuコマンドでrootに変身! Password: # usermod -G wheel XXXX (CentOSでは-aオプションつけなくても大丈夫!) # id XXXX uid=500(XXXX) gid=500(XXXX) groups=500(XXXX),10(wheel) ←追加されてるのを確認 # visudo /usr/sbin/visudo 実行
ここでviエディタなるものを使って編集する。
なるほど、はじめてFFFFOUND!とかのh,j,k,l の意味が分かったよ。。汗
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL ←コメントアウトを外す
これ以降 sudo でroot権限になれる(Passwordはuserのもの)
su – でrootに変身する場合はPasswordはrootのものを使用する。
後から理解したんだけどこの方法にしておけばユーザを追加する時にも
wheelグループに追加するだけでおkってことなんね!(・∀・)
3.セキュリティのためSSHのデフォルト接続ポートを変更する
SSHはデフォルトでは22番ポートで接続を待っているらしいので、これを通常使用されない
1024以上の番号に変更しておく。(入口を分かりにくくする。1024~65535の値で。)
でもずっと後で、結局簡単に調べるコマンドあるらしいから気休め程度ってどこかで見た。。orz
$ sudo vi /etc/ssh/sshd_config #Port 22 ここの下に追加 Port 1024~65535
4.公開認証鍵で SSH 接続できるようにする
基本Passでログインするのではなく、公開認証鍵使ってログインするように変更する。
さっき作った作業用IDでログイン
cd ~/ ← (ユーザーディレクトリに移動) mkdir ~/.ssh ← (.sshディレクトリを作成) chmod 700 ~/.ssh ← (.sshディレクトリの権限を所有者だけに限定) chown -R sakura:sakura .ssh ← (所有者をrootからユーザに変更) vi ~/.ssh/authorized_keys ← (公開鍵ファイルを作成、編集)
ちなみに別PCからも鍵認証でログインしたい時は、
別途そのPCで鍵ファイル作って、
cat id_rsa.pub >> .ssh/authorized_keys
みたいな感じで、鍵追記すればおk。
ちなみにこの公開鍵をGUIとかで選択しようとすると不可視ファイルで
探せないのだけれど、選択ウィンドウで
「Command」+「Shift」+「 . 」で表示できるようになる。(知らなかった!)
5.その他諸々セッティング
sudo vi /etc/ssh/sshd_config #PermitRootLogin yes PermitRootLogin no ← rootのログイン禁止(=rootは狙われやすいので) #RSAAuthentication yes RSAAuthentication yes ← RSA鍵方式のログインOK(=秘密鍵を持ってる人のみOK) #PubkeyAuthentication yes PubkeyAuthentication yes ← 公開鍵方式のログインOK(=秘密鍵を持ってる人のみOK) #AuthorizedKeysFile .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys ← 公開鍵の置き場 #RhostsRSAAuthentication no RhostsRSAAuthentication no ← リモートホスト(信頼できるホスト名とユーザー名のリスト)によるログイン禁止 #PasswordAuthentication yes PasswordAuthentication no ← パスワード方式のログイン禁止(=総当りの阻止) #PermitEmptyPasswords no PermitEmptyPasswords no ← 空のパスワード禁止 #UsePAM yes UsePAM no ← PAM(一括認証)の禁止
で保存してからssh再起動。
sudo /etc/init.d/sshd restart
ここでログアウトする前に、別のターミナルウィンドウ立ち上げてそこからログインなしで入れるか試しておく。(そこミスってるとコンパネから入らないといけない or OS再インストールからやらないといけないらしいよ。。激汗)
さくら VPS(CentOS)でシステムの文字コードを日本語にしておく(ただし、error文言とかをググっても引っかかる率が格段に下がるので自己判断でいいよ!)
sudo vi /etc/sysconfig/i18n で、 LANG="ja_JP.UTF-8" にする。
6.システムアップデートして一旦休憩!
sudo yum update で、だーっと文字が流れて、しばらくすると Install ** Package(s) Upgrade ** Package(s) Total download size: 999 M Is this ok [y/N]: y
みたいな感じでこんだけあったぜみたいに聞かれるので、
yes,yesと答えていればいつの間にかダウンロード初めてインスコ完了。
7.SSH接続する時のログイン方法を記録しておく。
ローカルファイルにある、/Users/***/.ssh/config に以下を書いておけば、これまでのようにいちいち
ssh -p 99999 user@host.name みたいに書かなくて済む!!!
Host sakura HostName **.***.***.*** User user Port 9999 IdentityFile ~/.ssh/id_rsa
これで、ssh sakura でログインできるようになった!素敵!(・∀・)
ちなみにhostがいろいろ出てくるようになると以下みたいな対応で複数持たせれるらしい!!
test.orgの場合、「id_rsa.test.org」
hoge.inの場合、「id_rsa.hoge.in」とかで保存して、configは
Host test HostName test.org IdentityFile ~/.ssh/id_rsa.test.org User test_user Host hoge HostName hoge.in IdentityFile ~/.ssh/id_rsa.hoge.in User hoge_user
とか。
まーこの辺りは自分のローカル環境にバーチャルホスト切る感じと同じやね。
公開鍵の名前って別になんでもいいんね。へー(・∀・)
で、この辺りからGUIでSFTP接続試してみた。
今回はTransmit使って、SFTP接続で、ユーザ名は作業用ユーザ名入れて、
パスワードなしで、横の鍵マークから公開鍵ファイル(id_rsa)の置き場指定して、
ポートをssh用の任意で決めたやつに変更して、接続!
初回だけパスワード聞かれて、公開鍵作った時のパスワード答えて、とーった!!
これでパス使わない(使えない)&このPCからしかssh接続できない!!(`・ω・´)キリッ
8.ファイアーウォール(iptablesでパケットフィルタリング)の設定
sudo iptables -L
で現在のiptablesの設定を確認。何も設定されてないのを確認。うす。
まずiptablesがないのでつくる。
sudo vi /etc/sysconfig/iptables
で、中身は以下。
未設定の状態からSSH、HTTP、FTP、MySQLだけにポート解放する。
SSHは任意の変更したポート、
HTTP → 80、
FTP → 20,21、
MySQL → 3306 を使用。
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :SERVICE – [0:0] -A INPUT -j SERVICE -A FORWARD -j SERVICE -A SERVICE -i lo -j ACCEPT -A SERVICE -p icmp –icmp-type any -j ACCEPT -A SERVICE -p 50 -j ACCEPT -A SERVICE -p 51 -j ACCEPT -A SERVICE -p udp –dport 5353 -d 224.0.0.251 -j ACCEPT -A SERVICE -p udp -m udp –dport 631 -j ACCEPT -A SERVICE -p tcp -m tcp –dport 631 -j ACCEPT -A SERVICE -m state –state ESTABLISHED,RELATED -j ACCEPT # SSH, HTTP, FTP1, FTP2, MySQL -A SERVICE -m state --state NEW -m tcp -p tcp --dport **** -j ACCEPT -A SERVICE -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A SERVICE -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT -A SERVICE -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A SERVICE -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A SERVICE -j REJECT --reject-with icmp-host-prohibited COMMIT
で、
sudo /etc/rc.d/init.d/iptables restart
でiptablesを再起動。
再度iptablesを確認してみる。
sudo iptables -L
できてるぽい。(・∀・)
9.デーモン止めてパフォーマンスあっぷ。
もうこのレベルのことは初回でやる必要ないんじゃないかと思いつつ
記事を見つけてしまったので、とりあえずやっておこうか。(オイ
/sbin/chkconfig --list | grep ":on"
で、起動してるデーモンの状態を確認できるみたい。
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off irqbalance 0:off 1:off 2:on 3:on 4:on 5:on 6:off iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off lvm2-monitor 0:off 1:on 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off readahead_early 0:off 1:off 2:on 3:on 4:on 5:on 6:off readahead_later 0:off 1:off 2:off 3:off 4:off 5:on 6:off sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
で、さくらVPS 512 での仮想ドライブは1台なのでlvm2-monitorって監視するやつがいらない?
みたいなのでoffっとくことに。
/sbin/chkconfig --level 0123456 lvm2-monitor off
こうやってランレベルを明示的に指定してoffってやらないと生き返ってくるみたい。
ちなみにランレベルってのはシステムの動作モードを表す言葉らしくて
0 : シャットダウン ( システム停止中 )
1 : シングル ユーザー モード ( root のみ )
2 : マルチ ユーザー モード ( ネットワークなし )
3 : マルチ ユーザー モード ( テキスト )
4 : 未使用
5 : マルチ ユーザー モード ( グラフィカル )
6 : システム再起動
なんだって。ランレベル3ではCUIでサーバの設定が、ランレベル5ではGUIを使ったデスクトップマシンとして使える(!)。
このあたりでほんの少しだけサーバーに近づけた気がしたお(・∀・)
10.Apache(httpd)インストール
remiリポジトリの設定
cd /etc/yum.repos.d sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm sudo wget http://rpms.famillecollet.com/remi-enterprise.repo
Apache・PHP・MySQLをインストール
sudo yum --enablerepo=remi install httpd httpd-devel sudo yum --enablerepo=remi install mysql-server sudo yum --enablerepo=remi install php php-devel php-mbstring php-mysql php-pdo php-mcrypt php-pear php-xml php-gd pcre-devel
Apache,MySQLを起動する。
sudo service httpd start sudo service mysqld start
自動起動ONにする。
sudo chkconfig mysqld on sudo chkconfig httpd on
MySQLのrootパスワードを変更する
mysql -u root UPDATE mysql.user SET Password = PASSWORD('設定するパスワード') WHERE User = 'root'; FLUSH PRIVILEGES; quit ← quitでByeって言われてmysql抜けられる。かわいい。(・∀・) sudo /etc/init.d/mysqld restart ← んでリスタート!
11.MySQLの設定もろもろ
MySQLの文字コードを修正。 /etc/my.cnf に以下を追記。
ただし、MySQL5.5からMySQLサーバの文字コードの指定方法が変わってるみたいで、
default-character-set=utf8 → character-set-server=utf8
に変更しないと(再)起動で引っかかる。エラーログにそんなんねーよって怒られる。
(エラーログの見方 sudo tail /var/log/mysqld.log)
で、MySQLのクライアント側での指定はそのまま。これかなりハマった。。
# character-set character-set-server=utf8 skip-character-set-client-handshake [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8
sudo /etc/rc.d/init.d/mysqld restart mysqld を停止中: [ OK ] mysqld を起動中: [ OK ]
さっきrootのパスワードかけたけど、
一応ちゃんと有効になってるかを確認。
mysql -u root -p
でパスを聞かれるのでそのままEnter!
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
怒られたのでおk。で、パス入れたら入れた。おk。
次に不要なユーザ消す。まず以下でユーザ確認。
$ mysql -u root -p mysql mysql> SELECT user, password, host FROM user;
なんか同じようなやついっぱいいるけど、
一番上のrootでパスワード持ってて、localhostのやつだけでいいみたいなので、以下で消去!
DELETE FROM user WHERE user = '' OR ( user = 'root' AND host != 'localhost' );
で、も1回確認。
SELECT user, password, host FROM user;
1匹になってる。おk。
12.phpMyAdmin入れる。
以下のverは古いので最新のものを使って、コード内も適宜修正してね。
めんどくさいのでsu -で。(この辺りになったらさすがにちょっと慣れてきてる)
su - cd /var/lib wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/2.11.11.1/phpMyAdmin-2.11.11.1-all-languages.tar.gz tar zxvf phpMyAdmin-2.11.11.1-all-languages.tar.gz rm -rf phpMyAdmin-2.11.11.1-all-languages.tar.gz mv phpMyAdmin-2.11.11.1-all-languages /var/lib/phpmyadmin
セットアップ!
cd /var/lib/phpmyadmin cp config.sample.inc.php config.inc.php vi config.inc.php
13.ようやくhttpdアクセスでブラウザ確認!
httpd.confの設定
/etc/httpd/conf/httpd.conf
ServerNameの設定したり、DocumentRoot設定したり。
この辺りは各々自由にどうぞ。(無責任w)
いや、ここを端折ってる理由は実は、公開ディレクトリ持つ場所について
運用のしやすさとセキュリティ面でめちゃくちゃ悩んだんだけど、
この辺りはちょっと経験値がなさすぎて、まずは自分一人しか触らないので
運用のしやすさを取りますた。あと、ディレクトリのpermission問題でまた
めちゃめちゃ引っかかった。この辺りもどの程度までセキュリティ的におkとされてるのか
みたいなさじ加減がいまいちよく分からない。。むー。。
で、まー、リスタート!
service httpd restart
14.DNSの設定してー、mailサーバgoogleAppsにしてー、
wordpress引っ越ししてー、とかもろもろ。
この辺りは本当に人それぞれなので省略w
やったのはドメインとDNS紐づけて、メールサーバを全部googleAppsでGMailに任せちゃって(MXレコードの登録)とか、blogデータをMySQLとWordPress使って引っ越しさせてとか、
いろいろごにょごにょ。
このあたりでDNSの設定とか、IPアドレスのこととか、
ネームサーバのゾーン編集とかとかMXレコードやらサブドメインの解釈とか、
.htaccessでの細かいファイル指定とか、いろいろ分かってスッキリしたよ。:-)
これで一旦サーバ移行は終しまいー!!
あとはやりながら少しずつ慣れて行きますよっと。:-)
おし、ということでこれで好き勝手に自分のサーバいじれるようになったので
このサーバ用にサイト作り直したりとか、(今何も上げてないからリンク切ればっかりw)
lab作ったりとか、ネットワーク使ったアイデアに進めたりとか、
DB使ったアイデアとか枠組み広がってwktkしてきたよ!!(・∀・)
あとlolipopさんこれまでどうもありがとうございました!!!!泣
卒業だー(・∀・)ワーイ
以下 CUIとかvi の 使い方コマンドメモ。w
cd (カレントディレクトリを移動) ls (ファイルリストを表示) ls -la (所有権確認) cp (ファイルをコピー) mv (ファイルを移動、名前の変更) rm (ファイルを削除) mkdir (ディレクトリを作成) chmod (パーミッションを変更)-Rでそのディレクトリ以下全部! chown (所有者を変更) whoami = ユーザー名を確認 /Users/<ユーザー名>(ホームディレクトリ) pwd = 現在地(カレントディレクトリ) cd ~ = /Users/<ユーザー名>の略 cd = ホームディレクトリに移動 mkdir = ディレクトリ作成 mv = ファイルの移動・リネーム mv test test2 (test2フォルダがあれば移動、なければリネーム) echo > test.txt = test.txtファイル作成 rm = ファイル消去 rm -rf = ディレクトリ消去 ("-rf"オプションつける) cp -r = コピー cp test test2 (testディレクトリをtest2ディレクトリにコピー) cp test/ test2(testディレクトリの中身をtest2ディレクトリにコピー) dig domain (現在紐づけられてるDNSとかMXレコードとか表示) echo $PATH 環境変数の確認 man コマンド (マニュアル読める!!-h とか --help オプションもある!) tail /var/log/mysqld.log (エラーログの確認)
以下も始めに読みましたw
http://homepage.mac.com/notex/osx/02/index.html
シェルとは
これでかなりターミナルでの作業が効率的になったと思います。さて、先程からシェルというキーワードが出てきていますが、このシェルとはなんなんでしょうか。 シェルとは、ユーザーが入力したコマンド行を読み込み、解釈し、実行までを導くプログラムです。例えばユーザーが”ls<リターン>“と入力した時、”ls”コマンドを実行し、結果(ファイルのリスト)をターミナル画面に表示させているのはシェルが行っているのです。ターミナルというアプリケーション自体は、キー入力とウィンドウへのテキスト表示を行っているだけにすぎないとでも思って下さい。実際はシェルがユーザーインターフェイス(CUI)を提供しているのです。ターミナル意外のアプリケーションでも、シェルを実行できれば、ターミナル同様にファイル操作などを行えます。
http://homepage.mac.com/notex/osx/02/img/02.png
図2 ターミナルとシェルの関係
シェルの最も重要な機能は、文字の入出力(標準入出力、エラー出力)の制御です。通常はキー入力が標準入力、画面への出力が標準出力となり、これらをシェルが制御しています。この機能をうまく利用すると、標準入出力をファイルに割り当てることができます。前回、空のテキストファイルを作成するのに、”echo > test.txt”としましたが、これは”echo”(何も出力しない)を”test.txt”に標準出力せよ、ということです。”>”をリダイレクションと言い、標準出力をファイルに切り替えます。結果として空のテキストファイル”test.txt”が作成されます。
参考サイト
ちなみにアカベコマイリさんに超絶親切丁寧に書かれてるのでこちらを読んだ方がいいよ!!(遅
本当に他にもたくさん皆様の情報を助けに頑張れました、ありがとうございました。。m(_ _)m
以下、覚えている限りですが、、(●が特に初心者の自分にも分かりやすかったです。:-)
● はじめてのさくら VPS + CentOS の初期設定からチューニングなどの作業まとめ | ウェブル
○ CentOSをサーバーとして活用するための基本的な設定 – さくらインターネット創業日記
○ さくらのVPS インストールまとめ:浜村拓夫の世界
○ さくらインターネットVPSの初期設定をまとめてみた | まったりプログラミングしたい><
○ さくらの格安VPSを借りたらいつもやっている設定いろいろ | IDEA*IDEA
○ さくらVPSを借りたら絶対にやるべき11のタスク
● さくらのVPS入門
● さくらのVPS « mimumemo
you