Linuxまとめ
自分で1から立ち上げる場合
導入
OSのisoをダウンロード
http://www.centos.org/に行き、Downloads→Mirror List→South American, Asian, Oceania, Middle Eastern, African and Other Regional→日本の機関を選び、HTTPもしくはFTPをクリック→バージョン選択→isos→i386→一番容量の大きいやつをダウンロード
インストール方法(VMWareの場合)
- VMWareをダウンロードし、インストール
- 起動し、新しい仮想マシンの作成をクリックし、後でOSをインストールを選択し次へ
OSの種類とバージョンを選択し次へ - 仮想マシン名を入力し次へ
- ディスク容量の指定をし(デフォルトでOK)、次へ→完了
- 仮想マシンの設定の編集から、ネットワークアダプタをブリッジに、CD/DVDから接続
- ISOイメージファイルを使用するに変え、OSのISOを選択→OK
- 仮想マシンの再生
- Welcome to CentOS バージョン云々!という画面で、一番↑を選択
- ディスクのチェックをするか聞かれるが、時間がかかるのでSkip
- 使用する言語(Japanese)、キーボードの言語を選択
- Basic Storage Devicesを選択
- Yesのほうを選択
- ホストネームを入力
- ここで、左下のconfigure networkをクリックし、ネット接続の設定をする
- タイムゾーンを選択
- Root(Windows ServerでいうところのAdministrator)のPWを入力
- 上から2番目のを選択し、次へ、Write...を選択
- Minimalを選択し次へ
- インストールが完了したらReBootを選択し、再起動
作業用ユーザ作成
useradd ユーザ名で作成
passwd ユーザ名でユーザのパスワード変更
sshd、sudoの設定、特定のユーザ以外rootになれないようにする
sshdの設定、/etc/hosts.allowにsshd: jpを記述し、hosts.denyをALL:ALLに変える
次にsudoの設定、まずwheelグループにsuとsudoを使えるようにしたいユーザを入れる
usermod -G wheel user
sudoの設定は、visudoコマンドで/etc/sudoersファイルを開き、# %wheelとなっている部分の#を消してwheelグループを有効にする
特定のユーザ以外rootになれないようにするには、/etc/pam.d/suをviで編集して、auth required pam_wheel.so use_uidの行をコメントから外す
エイリアスを設定
作業中、うっかりやらかさないようにエイリアスを設定する
書く場所はetc/.bashrc内で、次の文章の各行の頭にaliasを必ず付ける
cp='cp -i'
mv='mv -i'
rm='rm -i'
ll='ls -l'
ls=ls -F'
la='ls -la'等を設定すると便利
yumでインストールできない物をインストールするためにRPMforgeを導入する
※以下CentOS6の場合
yum -y install yum-plugin-prioritiesでyumで入れたものをrpmで上書きしてしまわないようにyum-plugin-prioritiesを入れる
vi /etc/yum.repos.d/CentOS-Base.repoで標準リポジトリ設定ファイル編集
[base]と[updates]と[extras]の一番後ろにpriority=1を追記
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpmでrpmforge-releaseダウンロード
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpmでRPMforgeリポジトリインストール
rm -f rpmforge-release-*でダウンロードしたファイルを削除
yum -y update rpmforge-releaseでrpmforge-releaseアップデート
以上で完了
使える物をインストールする
wget,unzip,man,man-pages-ja,vim,telnet,bind-utils等の、使える物をyum installでインストールする
yum install unzip man等、半角スペースで区切ると一気にインストールできる
サービスの設定を変えた変更したのを適応するために、絶対にservice サービス名 stop/startでサービスを再起動させる 例:sshd iptables postfix bind httpd等
自宅等でサーバを1から立ち上げる場合、 selinuxを切る
/etc/selinux/configの上から2つめのSELinux = の部分の=の右側をdisabledに変える
bind,caching-nameserverをインストール
まず/etc/resolv.confでDNSをルータに向ける (自分に向けるのはちゃんと設定ができてから)
・bindの設定
設定ファイルは/etc/named.conf
listen-on port 53の127.0.0.1の後ろに自分のIPアドレスを追記
allow-queryのlocalhost;となっている部分を所属している所で使えるIPの範囲に変更(bindを使用する範囲)
viewのmatch-clientsの{}の中をanyに変更
後ろの方に正引きの
zone "ドメイン名";
type master;
file "ドメイン名.zone";
allow-update{ none };
と逆引きの
zone "2.168.192.in-addr.arpa" {
type masterl
file "2.168.192.zone" ;
allow-update{ none };
の2つを追記
named-checkconf でBINDの設定をチェックすることができる
・zoneファイル
次に、/etc/named/内にドメイン名.zoneファイルを作る
サンプルコードをコピーしてから編集すると楽
正引きのファイルに
IN NS フルサーバ名.
IN MX 10 フルサーバ名.
A サーバのIPアドレス
ホスト名 IN A サーバのIPアドレス
router IN A ルータのIPアドレス
www IN CNAME ホスト名等を追加
MXレコードは、メールを管理するドメインを管理するサーバのホスト名を返すもの
逆引きのファイルに
IN NS ドメイン名.
IPアドレスの第4オクテット IN PTR ドメイン名.を追加
serialの数字は、ファイルを変更する際に一番最初に数字を増加させる
設定を変更したら、そのたびにnamedを停止させ、起動
・名前解決出来ているかチェック
nslookupを使う
nslookupで特定のレコードを選択する場合は、
1、nslookup
2、ドメイン名入力
3、set q=MX 例としてMX
4、もう一度ドメイン名で出来る
LAN内のほかのクライアントからサーバへDNSを向けても名前解決が出来ない場合は、selinuxの設定を一時的に切ってみる
webサーバ
Webサーバの構築に必要なhttpdを入れる
PHPを使えるようにするためにphp,php-cli,php-commonを入れる
・アクセスログ
アクセスログは/var /log/httpd/access_log、
エラーログは/var/log/httpd/error_log
・ DIGEST認証
DIGEST認証は、ホームページに認証をかけることができる
/etc/httpd/conf/httpd.confファイルの<Directory></Directory>で囲まれてない所に
<Directory "/var/www/html/secret">
AuthType Digest
AuthName "Secret Zone"
AuthUserFile /etc/httpd/.htdigest
Require user ユーザ名
</Directory>
を追加
その後にhtdigest -c /etc/httpd/.htdigest 'Secret Zone' ユーザ名と入力し、パスワードを設定
これで認証をかけることができる
Secret Zoneの部分は必ず、全て同じ文字列にすること
・バーチャルホスト
/etx/httpd/conf/httpd.confを編集
NameVirtualHost *:80をコメントから外す
<VirtualHost *:80>
ServerName バーチャルホストのフルサーバ名
DocumentRoot /var/www/バーチャルホストのフルサーバ名
ErrorLog /var/log/httpd/バーチャルホストのフルサーバ名_log
CustomLog /var/log/httpd/バーチャルホストのフルサーバ名_accersslog
</VirtualHost>
/etc/httpd/conf/httpd.confの中身で
CustomLog /var/log/httpd/www2.nakamura.suncom.local_access_logの後ろにcommonをつける
commonの意味は、ログの中身で何月何日に誰が何を見に来たとかの形式
・Apacheのバージョンを出さないようにする
/etc/httpd/conf/httpd.confの編集
ServerTokens OSをServerTokens Prodに変更し、httpdを再起動
VPSの場合はServerTokens ProductOnlyとServerSignature Offに変更
・ユーザのホームディレクトリからWebページ公開
ページを公開したいユーザのホームディレクトリにpublic_htmlという名前のディレクトリを作成、公開したいhtmlファイル等はこのディレクトリに入れる
パーミッションを、711にする
/etc/httpd/conf/httpd.confに色々記述
下の方に書いてあるUserDir disableをUserDir enabled ユーザ名に変更、もしくは追加
#UserDir public_htmlをコメントから外すか、 UserDir public_htmlを追加
<Directory /home/*/public_html> ~ </Directory>をコメントから外す
これでhttp://サーバのIPアドレス/ユーザ名で、ユーザごとにWebページを公開することができる
ファイルサーバ(Samba)
yum install sambaで入れる
・Sambaの設定ファイルの設定
/etc/samba/smb.conf で設定
中身は3つのセクションに分かれている
[global]はサーバ全体の設定
[homes]はユーザのホームディレクトリの共有に関する設定
[printers]はプリンタの共有に関する設定
・[global]の設定
unix charset = UTF-8
dos charset = CP932
display charset = UTF-8の3行を追加
これを追加しないと、Windows Vista以降で、Linuxからいじった物だけ日本語が文字化けする
次にworkgroup = MYGROUPMYGROUPをWindowsが所属しているWORKGROUPに変える
hosts allow = 192.168.1. 127. 内部からのみアクセスできるようにする
socket address = サーバのアドレス
・[printers]の設定
プリンタを使わないなら、load printers = yesの頭に;をつけてコメントに
load printers = no
disable spoolss = yes の2行を加えてプリンタ共有を無効化に
・その他フォルダの設定
[homes]
browseableをyesにするとブラウザから見れるようになる
書き込みできるようにwritableはyesに
[public]
comment = コメント
path = 共有するフォルダのパス
public = yes
writable = yes
guest only = yes ゲストの許可
guest ok = yes どのユーザでもアクセスできるようにする
以上はWindows Serverでいうところの共有の設定なので、細かいのはフォルダやファイルのアクセス権でよろしくやると良い
browseableをnoにすると隠し共有にできる
・SMTP
Postfixを入れる yum install postfix
以下手順
/etc/postfix/main.cfを、main.cf.org等の名前でコピー
myhostname = ホスト名を追加
mydomain = ドメイン名を追加
myorigin = $mydomainをコメントから解除
inet_interfaces = allをコメント解除
inet_interfaces = localhostをコメントに
mydestnation = hogehogeの部分に、@以降をドメインのみにしてもメールを送れるようにするため、$mydomainを追加
mynetworks = 信頼するIPアドレスを追加 例:192.168.2.0/24
/etc/postfix/main.cfのmynetworks = hogeと設定する部分に最初に書いてあるのは消すべき
168.100.189.0/28等
メールを見たり送ったりするために、mailコマンドをyum install mailxで入れる
メールを送るのはmail ユーザ名で
メール本文の入力を終わるのには.だけの行を作りEnter
メールの削除はルート権限でpostsuper -d キューIDで削除
全部削除する場合は、キューIDの所をALLにする
メールのログは/var/log/maillog
・POP3
dovecotを入れる yum install dovecot
パスワード平文化を許可するために/etc/dovecot/conf.d/10-auth.confを変更
disable_plaintext_auth = no
auth_mechanisms = plain login この2行のように変更
認証をよろしくするために/etc/dovecot/conf.d/10-master.confを変更
unix_listener /var/spool/postfix/private/auth{
mode = 0666
user = postfix
group = postfix
}
メールの場所を指定するために/etc/dovecot/conf.d/10-mail.confを変更
mail_location = mbox:~/mail:INBOX=/var/mail/%u
・認証デーモン
pop3、smtpとlinuxとの間でよろしくやってくれるやつ
yum install cyrus-sasl-plain cyrus-sasl-md5で入れる
service saslauthd startで起動
・ここでsmtp-authの設定
/etc/postfix/main.cfの一番後ろに
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth ←ここはdovecotのprivate/authの部分と合わせる
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks,permit_authenticates,reject_unauth_destination
broken_sasl_auth_clients = yes
以上を追加
dovecot,postfxの2つを停止させてから起動(再起動はダメ)
既存ユーザのPWを1回変える(前のPWと同じでもOK)
・rootからメールを見たり送ったりする場合
su -でrootになる
su -でrootになると、環境変数を引き継がずにrootになれる
・VPSの場合
sendmailが入っている場合を想定
まずsendmailを止める chkconfig sendmail offとservice sendmail stop
alternatives --config mtaでメールサーバ切り替え
ちゃんと切り替わったかどうか確認
ls -l /etc/alternatives/
# ls -l /etc/alternatives/mtalrwxrwxrwx 1 root root 26 2月 11 11:25 /etc/alternatives/mta -> /usr/sbin/sendmail.postfix
上のようになっていればOK
・メールの転送
転送をしたいメールが送られてくるユーザ名/.forward内に、転送先のメールアドレスを記述
この時、.forwardのパーミッションは644か600にするといいらしい
ファイアウォール
/etc/sysconfig/iptablesで設定
VPSの場合、雛形が無いので以下に雛形を記述
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
サービスを追加したら、絶対ファイアウォールの設定もする
DNS→ポート番号53、TCPとUDPの両方を許可(UDPだけでもいいかも?)
http→番号80、TCP許可
SMTP→番号25、TCP許可
POP3→110、TCP許可
samba→137,138はUDP、139,445はTCP
SELinuxとは、root権限が奪われた時のことを考えて、プロセスを最小限の権限で動かしている
このため、root権限が奪われても被害が少なくて済む
SELinuxを一時的に止めるにはsetenforce 0
恒久的に止めるには、/etc/selinux/configの上から2つめのSELinux = の部分の=の右側をdisabledに変える
cron
crontab -eで編集、-lで見ることができる
編集の例 * */1 * * * bash シェルスクリプトで1時間おきにシェルスクリプトを実行する
〇時間おきと指定する場合は、分の指定も必要
*の部分は左から分、時、日、月、曜日
*を数値にかえるとその時間や日にちを指定、*/数値で〇時間おき等を指定できる
曜日は0→日、1→月
MAILTO=メールアドレスで、cronの通知をメールアドレスへ送ることができる
シェルスクリプトはフルパスで書いた方が良い
全ての設定が終わったら、yum updateで入っているパッケージをアップデートする
細かいif等の使い方はhttp://s4232005.hatenablog.com/entry/2012/10/30/220837で
運用
top WindowsのタスクマネージャのLinux版
シフト+mでメモリを喰っている順に並ぶ、qで閉じる
kill プロセスID(PID)でプロセスを強制終了させれる、PIDはps -efで見れる
rootで動いているプロセスは、rootからじゃないと強制終了させれない
vmstat Windowsのタスクマネージャ(パフォーマンス)のLinux版
-nをつけると、n秒ごとに表示
iostat ハードディスクごとに、ハードディスクをどれだけ読み書きしているかを見れる
iostatはyum install sysstatで入れる
メールでコマンド
/etc/aliasesに追記していく
hoge: "|シェルスクリプト等|"という風に書く、追記したあとはnewaliacesで更新
これで、hogeさんにメールを送ると、シェルスクリプト等と書いた部分が動く
その他
サーバを監視するためにlogwatchを入れるのも良い yum install logwatch
chkconfig サービス名 on/offで、サーバが立ち上がった時に自動でサービス名を起動するかどうかを設定できる
スクリプトで、windowsでコードを書きwinscp等でサーバへファイルを移す場合、改行コードの問題でスクリプトが動かなかったりするので、unix2dosコマンドを使い、改行コードを変換する
使用例:unix2dos hogehoge これはドツボにハマりやすいので注意、空白の行が原因でエラーが出ている 場合は、改行コードを疑うべし
yum check-updateでアップデートできるパッケージを確認できる
telnet 繋ぎたいipアドレス ポート番号で、そのポート番号が開いているかどうか確認できる、問題解決の時に使うと便利