Table of Contents
言語設定
- /etc/sysconfig/i18n
LANG="ja_JP.UTF-8" SYSFONT="latarcyrheb-sun16" SUPPORTED="ja_JP.UTF-8:ja_JP:ja"
- ~/.bashrc に追加
export LANG=ja_JP.UTF-8
- 日本語サポートパッケージ追加
# yum groupinstall "Japanese Support"
IPv6 無効化
- /etc/sysctl.conf に追加。
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
- /etc/sysconfig/network に以下を追加。
NETWORKING_IPV6=no
- /etc/modprobe.d/disable-ipv6.conf を新規作成。
options ipv6 disable=1
-
OS から再起動。
- 「service network restart」では反映されない。
Postfix エラー対応
/etc/postfix/main.cf 修正。(all だと IPv4,IPv6 の両方を有効にしようとするので、IPv4 のみ有効にする)
#inet_protocols = all inet_protocols = ipv4
- Postfix IPv6サポート - 設定
Dovecot 起動失敗対応
- /etc/dovecot/dovecot.conf に追加。(IPv4のみ有効)
listen = *
スケルトン設定
- ssh
# mkdir /etc/skel/.ssh # chmod 700 /etc/skel/.ssh
- ftp
# mkdir /etc/skel/etc # cp /etc/localtime /etc/skel/etc/
- dovecot
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} # chmod -R 700 /etc/skel/Maildir/
ssh
- 公開鍵, 秘密鍵作成 (該当ユーザとして作業する)
# su anyone $ cd ~/.ssh/ $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" Enter file in which to save the key (/home/anyone/.ssh/id_dsa): [Enter](変更なし) Enter passphrase (empty for no passphrase): <パスフレーズ>を入力 Enter same passphrase again: <パスフレーズ>確認 ... $ ls -l (id_dsa, id_dsa.pub の2つができていることを確認) $ mv id_dsa.pub authorized_keys $ cat id_dsa (秘密鍵をローカルに保存するため表示) $ rm id_dsa (TeraTerm等でログインできることを確認した後削除) $ exit
ブートメッセージ表示
- /etc/grub.conf
「kernel」行の中の「rhgb quiet」を削除すると、ブート時にメッセージが表示されるようになる。
プロキシ設定
postfix
リレー設定
- /etc/postfix/isp_passwd
[mail.example.com] isp_acount:isp_password
- パスワードDB作成
# postmap /etc/postfix/isp_passwd
/etc/postfix/main.cf
relayhost = [mail.example.com] smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/isp_passwd smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = plain, login
ディスプレイ設定
Out of Range
CPU切替器(KVM)は高解像度に対応しているのにモニタがその解像度に対応していないため、「Out of Range」となり画面が映らない場合、Xorgでモニタの対応周波数を指定する。ブート途中は画面が映らないが、Xorg 起動後は正常に表示される。
- /etc/inittab を編集し、Run Level を 5 から 3 に変更。
- Reboot
- xorg.conf の雛形を作成。
# Xorg -configure
- 雛形を既定のディレクトリへ移動
# mv /root/xorg.conf.new /etc/X11/xorg.conf
- SELinux が有効の場合はラベルし直し
# restorecon -v /etc/X11/xorg.conf
- /etc/X11/xorg.conf の Section "Monitor" にモニタがサポートしている走査周波数(水平/垂直)を追加する。
Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 40-70 VertRefresh 48-85 EndSection
- /etc/X11/xorg.conf の SubSection "Display" にモニタがサポートしている解像度を追加する。
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Viewport 0 0 Depth 1 EndSubSection (中略) SubSection "Display" Viewport 0 0 Depth 16 Modes "1280x1024" "1024x768" "800x600" EndSubSection SubSection "Display" Viewport 0 0 Depth 24 Modes "1280x1024" "1024x768" "800x600" EndSubSection EndSection
- /etc/inittab を編集し、Run Level を 3 から 5 に戻す。
- Reboot
nouveau ドライバ障害
- 共有ライブラリが正しくインストールされず、X の画面が映らない。
# grep "(EE)" /var/log/Xorg.0.log (EE) AIGLX error: dlopen of /usr/lib64/dri/nouveau_dri.so failed (/usr/lib64/dri/nouveau_dri.so: cannot open shared object file: No such file or directory) (EE) AIGLX: reverting to software rendering
- nouveau ドライバをアンインストールし、ELRepo から nVidia ドライバをインストールする。
# yum erase xorg-x11-drv-nouveau # yum install nvidia-detect # yum install $(nvidia-detect)
- 上記「Out of Range」と同様に xorg.conf を更新する。
「Section "Device"」の「Driver "nv"」が「Driver "nvidia"」になっていれば成功。 - /etc/modprobe.d/blacklist.conf に「blacklist nouveau」を追加する必要があるかも。
SELinux
リポジトリ追加
- yum-plugin-priorities のインストール
# yum -y install yum-plugin-priorities
- /etc/yum.repos.d/CentOS-Base.repo
標準リポジトリを優先するため、「priority=1」を追加。[base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 priority=1 #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 priority=1 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 priority=1
- EPELリポジトリのインストール
最新版を確認すること。
http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum -y update epel-release
- RPMforgeリポジトリのインストール
最新版を確認すること。
http://pkgs.repoforge.org/rpmforge-release/# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm # yum -y update rpmforge-release
- Adobe リポジトリのインストール
# rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm # rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux
- Flash Player のインストール
# yum install flash-plugin nspluginwrapper alsa-plugins-pulseaudio libcurl
- Flash Player のインストール
-
ELRepo のインストール
http://elrepo.org/# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
- nVidia ドライバの検出とインストール
nvidia-detect# yum install nvidia-detect # yum install $(nvidia-detect)
- nVidia ドライバの検出とインストール
- RPMforgeリポジトリ導入(RPMforge) - CentOSで自宅サーバー構築
- Adobe Flash Player 11.2 on Fedora 19/18, CentOS/RHEL 6.4/5.9
fail2ban
- インストール (epel リポジトリ)
# yum install fail2ban jwhois
- /etc/fail2ban/jail.conf
「example.com」を自ドメインに変更。
必要なら ssh 以外についても「enabled = true」にする。vi で一括置換 :%s/you@example\.com/root@TakeAsh.net/g :%s/example\.com/svr1.TakeAsh.net/g
「アクセス禁止時間」は「bantime」で指定。(秒単位)[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com] logpath = /var/log/secure maxretry = 5
# "bantime" is the number of seconds that a host is banned. bantime = 3600
- サービス設定
# chkconfig --list fail2ban # chkconfig fail2ban on # chkconfig --list fail2ban # service fail2ban start
tripwire
インストール (EPELリポジトリ)
# yum install tripwire
# tripwire-setup-keyfiles
Suckit誤検知
- エラーメッセージ
for Suckit rootkit... Warning: /sbin/init INFECTED
- 原因
upstart パッケージの更新により、/sbin/init のメモリマップに「(deleted)」が付加される。 - 改竄されていないことの確認
下記を実行して何も表示されなければ、パッケージと実行ファイルとの差は無い。# rpm -V `rpm -qf /sbin/init`
- /usr/lib64/chkrootkit-0.49/chkrootkit
--- chkrootkit.2014-02-26 2014-02-26 02:51:45.000000000 +0900 +++ chkrootkit_Suckit_patched 2014-03-18 09:21:41.458943399 +0900 @@ -983,7 +983,10 @@ if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} HOME || \ cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1 then - echo "Warning: ${ROOTDIR}sbin/init INFECTED" + if ! rpm -V `rpm -qf /sbin/init` >/dev/null 2>&1; + then + echo "Warning: ${ROOTDIR}sbin/init INFECTED" + fi else if [ -d ${ROOTDIR}/dev/.golf ]; then echo "Warning: Suspect directory ${ROOTDIR}dev/.golf"
- chkrootkit のSuckit誤検知の修正 @ パソコン鳥のブログ
vsftpd
- vsftpd は chroot 下では、シンボリックリンクを辿れない。
- 「mount --bind」なら chroot 下でも動作する(rebootすると設定が失われる)。
# mount --bind /var/www/html/somefolder /home/user1/somefolder
/etc/fstab で設定すると、reboot しても設定が失われない。
/var/www/html/somefolder /home/user1/somefolder none bind 0 0
lftp
- FTP client
インストール
# yum install lftp
ClamAV
- アンチウィルスソフト導入(Clam AntiVirus) @ CentOSで自宅サーバー構築
- clamscanのオプション @ Clam Antivirusに関するメモ
- 検出した感染ファイルを削除ではなく隔離するには、「--remove」ではなく「--move=DIRECTORY」オプションを使用する。
-
ログファイルから検出と隔離の両方を grep する。
- /etc/cron.daily/clamscan
grep -e "FOUND$" -e "moved to '[^']\+'$" $CLAMSCANTMP
- /etc/cron.daily/clamscan
隔離されたファイルを元の場所に戻す bash スクリプトを出力する perl スクリプト
ファイルのオーナーは root に変わっちゃってるけど、これはどうしたもんか。
letUnjail.zip#!/usr/bin/perl # ClamAV で隔離されたファイルを元に戻す bash スクリプトを出力する。 use strict; use warnings; use utf8; use Encode; my $charsetConsole = 'UTF-8'; #my $charsetConsole = 'CP932'; my $charsetFile = 'UTF-8'; binmode( STDIN, ":encoding($charsetConsole)" ); binmode( STDOUT, ":encoding($charsetConsole)" ); binmode( STDERR, ":encoding($charsetConsole)" ); my $fileNameIn = shift or die("usage: letUnjail.pl <jail.log>\n"); my $fileNameOut = 'unjail.sh'; open( my $fhIn, '<', $fileNameIn ) or die( "$fileNameIn: $!\n" ); binmode( $fhIn, ":encoding($charsetFile)" ); open( my $fhOut, '>', $fileNameOut ) or die( "$fileNameOut: $!\n" ); binmode( $fhOut, ":encoding($charsetFile)" ); print $fhOut "#!/bin/bash\n\n"; my %virusNames = (); while( my $line = <$fhIn> ){ if ( $line =~ m{^([\s\S]+):\s([\s\S]+)\sFOUND\s*$} ){ $virusNames{$1} = $2; } elsif ( $line =~ m{^([\s\S]+):\smoved\sto\s'([\s\S]+)'\s*$} ){ if ( my $virusName = $virusNames{$1} ){ print $fhOut "# $virusName\n"; } print $fhOut "mv -v '$2' '$1'\n"; } } close( $fhIn ); close( $fhOut ); chmod( 0700, $fileNameOut ); # EOF
-
データベースとログのオーナが一致していないと正常に更新されない。
- エラーメッセージ
- その1
/etc/cron.daily/clamscan: ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log). /etc/cron.daily/freshclam: ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log). ERROR: Can't open /var/log/clamav/freshclam.log in append mode (check permissions!).
- その1
- その2
No updates detected in the log for the freshclam daemon (the ClamAV update process). If the freshclam daemon is not running, you may need to restart it. Other options: A. If you no longer wish to run freshclam, deleting the log file (default is freshclam.log) will suppress this error message. B. If you use a different log file, update the appropriate configuration file. For example: echo "LogFile = log_file" >> /etc/logwatch/conf/logfiles/clam-update.conf where log_file is the filename of the freshclam log file. C. If you are logging using syslog, you need to indicate that your log file uses the syslog format. For example: echo "*OnlyService = freshclam" >> /etc/logwatch/conf/logfiles/clam-update.conf echo "*RemoveHeaders" >> /etc/logwatch/conf/logfiles/clam-update.conf
- その3
Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.sock LOCAL: Socket file /var/run/clamav/clamd.sock could not be bound: Permission denied Can't unlink the socket file /var/run/clamav/clamd.sock LOCAL: Socket file /var/run/clamav/clamd.sock could not be removed: Permission denied
- /etc/clamd.conf
User clamav
- /etc/freshclam.conf
DatabaseOwner clamav
- /etc/logrotate.d/clamav
create 644 clamav clamav
- /etc/logrotate.d/freshclam
create 644 clamav clamav
- /var/clamav/
/var/lib/clamav/
/var/log/clamav/
/var/run/clamav/ | owner | clamav | | --- | --- | | group | clamav | - ~/fixClamavOwner.sh
#!/bin/bash chown clamav. -R /var/clamav/ /var/lib/clamav/ /var/log/clamav/ /var/run/clamav/
- エラーメッセージ
追加パッケージ
ベース, 開発環境
# yum -y groupinstall "Base" "Development tools"
Perl/CGI
# yum install gcc gcc-cpp gcc-c++
# yum install openssl-devel mysql-devel expat-devel
# yum install perl-YAML-Syck perl-libwww-perl perl-CPAN mod_perl
FontForge
- FontForge
- FontForge 自体は yum でインストール可能だがバージョンが古い。
- ソースから configure する際、X11 の開発環境がないと警告が表示される。
# tar jxvf fontforge_*.tar.bz2 # cd fontforge- # ./configure ... ******************************************************************* * This version of fontforge will only run scripts. No X libraries * * (or X include files or some such) were found so there is NO user* * interface!!!!! If you want a UI try installing X11 on your * * system. * * Caveat: You will probably need to install two packages, the * * base X11 package and the developer SDK package * *******************************************************************
- GUI有りでコンパイルするには X11 の開発環境をインストールする。
# yum install libX11-devel libICE-devel libSM-devel libXi-devel freetype-devel libxml2-devel gettext-devel # yum install gcc-gfortran python-devel libpng-devel libjpeg-devel libtiff-devel libspiro-devel
- コンパイル & インストール
# ./configure # make # make install
-
cidmaps.tgzをダウンロードしインストールする。
# cd /usr/local/share/fontforge/ # wget http://fontforge.sourceforge.net/cidmaps.tgz # tar xzvf cidmaps.tgz
- serif フォントのインストール
# yum install liberation-serif-fonts
- gnome メニューに追加
/usr/share/applications/fontforge.desktop[Desktop Entry] Name=FontForge Comment=An outline font editor Exec=fontforge Icon=fontforge Terminal=false Type=Application Categories=Application;Graphics;X-Fedora; Encoding=UTF-8 MimeType=application/vnd.font-fontforge-sfd; X-Desktop-File-Install-Version=0.15
logwatch
インストール
# yum install logwatch
メールの文字化け対応
- /usr/share/logwatch/scripts/logwatch.pl
--- logwatch_1.pl 2012-05-10 21:13:58.150740082 +0900 +++ logwatch.pl 2012-05-10 21:15:29.666734718 +0900 @@ -1050,12 +1050,12 @@ if ( $Config{encode} == 1 ) { $out_mime .= "Content-transfer-encoding: base64\n"; } else { - $out_mime .= "Content-Transfer-Encoding: 7bit\n"; + $out_mime .= "Content-Transfer-Encoding: 8bit\n"; } if ( $outtype_html ) { - $out_mime .= "Content-Type: text/html; charset=\"iso-8859-1\"\n\n"; + $out_mime .= "Content-Type: text/html; charset=\"utf-8\"\n\n"; } else { - $out_mime .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n\n"; + $out_mime .= "Content-Type: text/plain; charset=\"utf-8\"\n\n"; } if (($Config{'splithosts'} eq 1) && ($Config{'multiemail'} eq 0)) {
sendmail 失敗
- エラーメッセージ
Can't exec "sendmail": No such file or directory at /usr/sbin/logwatch line 1040, <TESTFILE> line 2. Can't execute sendmail -t: No such file or directory
- /etc/logwatch/conf/logwatch.conf
mailer = "/usr/sbin/sendmail -t"
- へっぽこサーバ管理もろもろ: Can't exec "sendmail" - logwatchで
Log Rotate
duplicate log entry
- エラーメッセージ
/etc/cron.daily/logrotate: error: freshclam duplicate log entry for /var/log/clamav/freshclam.log error: found error in /var/log/clamav/freshclam.log , skipping
- /etc/logrotate.d/ 内で複数の設定から同一のログファイルを更新しようとしている。別ファイルに割り当てるように変更する。
vnc
- Linux/VNC へ移動。
GNOME
キーボード設定
- キーボードを英語設定から日本語設定に切り替えられない。
- /home/(ユーザ名)/.gconf/desktop/gnome/peripherals/keyboard/kbd/%gconf.xml
「model」の値を「pc105」から「jp106」に設定する。
自動起動するアプリ
- 「自動起動するアプリの設定」で「PackageKit 更新アプレット」にチェックが入っていると、GDMからログインする毎に root パスワードを求められるのでチェックを外す。
- 「システム - 設定 - 自動起動するアプリ - PackageKit 更新アプレット」
BIND
root hint 更新スクリプト
- /etc/cron.monthly/named.root_update
#!/bin/bash new=`mktemp` errors=`mktemp` roothint=/var/named/chroot/var/named/named.ca dig . ns @198.41.0.4 +bufsize=1024 > $new 2> $errors if [ $? -eq 0 ]; then sort_new=`mktemp` sort_old=`mktemp` diff_out=`mktemp` sort $new > $sort_new sort $roothint > $sort_old diff -u --ignore-matching-lines=^\; $sort_old $sort_new > $diff_out if [ $? -ne 0 ]; then ( echo '-------------------- old named.root --------------------' cat $roothint echo '-------------------- new named.root --------------------' cat $new echo '---------------------- difference ----------------------' cat $diff_out ) | mail -s 'named.root updated' root cp -f $new $roothint chown named. $roothint chmod 644 $roothint service named restart > /dev/null fi rm -f $sort_new $sort_old $diff_out else cat $errors | mail -s 'named.root update check error' root fi rm -f $new $errors
-
DNSサーバー構築(BIND)との差
- root hint のパスを変数化。
- diff を unified 形式に、From と To を入れ替え。
- service コマンド。
ゾーン転送
-
/var/named/chroot/etc/named.conf
- 許可
allow-transfer { host1; host2; };
- 禁止
allow-transfer { none; };
- 許可
-
ゾーン転送動作確認(slave側で読み込めるかどうか確認する)
- Linuxの場合
# dig @<masterのホスト名> <確認したいドメイン名> axfr
- Windowsの場合
> nslookup > server <masterのホスト名> > ls -d <確認したいドメイン名>
- Linuxの場合
監視スクリプト
- named デーモンを監視し、必要ならば再起動する。
- bind ソースに含まれる nanny.pl を使用する。
- nanny_tak.zip 再起動時に root 宛にメールする機能を追加。
エラー対応
- 外部ドメインの名前解決できない場合の対策(検索結果のキャッシュに失敗している)
- SELinuxの「Allow BIND to write the master zone files. Generally this is used for dynamic DNS.(named_write_master_zones)」にチェックを入れる。
# setsebool -P named_write_master_zones 1
- SELinuxの「Allow BIND to write the master zone files. Generally this is used for dynamic DNS.(named_write_master_zones)」にチェックを入れる。
「named: the working directory is not writable」対応
# chmod 770 /var/named/chroot/var/named
-
dnssec エラー対応
dlv.isc.org SOA: no valid signature found dlv.isc.org SOA: got insecure response; parent indicates it should be secure
- 原因: forwarders で指定した DNS が dnssec に対応していない。
- 確認: dig コマンドを実行し、ANSWER SECTION に RRSIG レコードが含まれていることを確認する。
# dig +dnssec dlv.isc.org @(DNSのIPアドレス)
# dig +dnssec dlv.isc.org @8.8.8.8 (省略) ;; ANSWER SECTION: dlv.isc.org. 102 IN A 149.20.16.8 dlv.isc.org. 102 IN RRSIG A 5 3 300 2012... (省略)
- 対策: forwarders には Google Public DNS など dnssec に対応した DNS のみを指定する。
-
empty zones 警告対応
Warning: view LAN: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones: 1 Time(s)
- 原因: empty-zones-enable が指定されていない。
- 対策: empty-zones-enable を追加。
empty-zones-enable yes;
- Automatic empty zones (including RFC 1918 prefixes) - Internet Systems Consortium Knowledge Base
リンク
OpenVPN
Bonding
- 複数の NIC で冗長化を行っている状態で proto udp を指定すると「Replay-window backtrack occurred [x]」が大量に発生し接続が切れてしまう。
- ボンディングモードを「0(round-robin)」ではなく「6(Active Load Balancing)」に変更する。
- NICの冗長化
Tunneling
-
OpenVPN パッケージに更新があった場合は、トンネル設定を再度行う必要がある。
- /etc/rc.d/init.d/openvpn
行頭の # を削除し、有効化する。echo 1 > /proc/sys/net/ipv4/ip_forward
- /etc/rc.d/init.d/openvpn
-
仮想ネットワーク上のパケットを VPN サーバに転送するために
- スタティックルーティングを設定する必要がある。 | 宛先IPアドレス | 10.8.0.0/24 | | --- | --- | | ゲートウェイ | VPN サーバの IP アドレス |
- ファイアウォールで、同一インターフェース内のパケット転送を許可しなければならない場合がある。
例) VPN サーバが DMZ に配置されている場合 | アクション | 許可 | | --- | --- | | 受信インターフェース | DMZ | | 送信インターフェース | DMZ | | 送信元IPアドレス | すべて | | 宛先IPアドレス | すべて | | プロトコル | 全て | | ポート | 全て |
Apache
- Linux/Apacheへ移動。