このエントリーをはてなブックマークに追加
スポンサーリンク

fedora17のインストール

インストール

まず、CD・・いや、DVDを入れてブート。

Install なんとかかんとか(手ブレして読めん) Fedoraを選ぶ。

すると、いきなりビデオカードがどうのこうの出て、強制テキストモードになってしまった。しかし、どっちにしろテキストモードでインストールするつもりだったので、そのまま作業を進める。

しかし、日本語を選択した途端激しく文字化け。これでは読めん。というわけで、リセットしてやり直し。英語モードに。すると、インストールするパッケージもパーティションの切り方も何も選択できずに終わってしまう。これじゃいけないのでリセットしてやり直し。

今度は最初の選択のところで、「Troubleshooting」を選ぶ。すると・・・

なんか、Instrall Fedora in basic graphics modeってのがある。基本的なグラフィックスモード?とりあえず、これを選ぶ。すると、


なんだ、できるじゃん。こっちをデフォルトにしてくれよ。

ストレージデバイスを選択


ここで私は「No, keep any data」を「全部のデーターをキープしない」と解釈してしまった。で、こっちを選ぶと、「利用可能なディスクスペースがありません」と出て強制リセット。ありゃりゃ。

で、やり直し。「No, keep any data」は、「いいえ、全てのデーターをキープする」という意味だったのね。日本語だと「いいえ」のあとは語尾が「しません」になるのだが、英語の直訳って難しいのね。日本語じゃ普通、「いいえ〜します」とは言わないもん。

「Yes, discard any data」(はい、全データーをぶっ壊します)を選択する。するとパーティションの選択になった。CentOS4の頃から私はカスタムレイアウトを使う主義なので、ここでもカスタムレイアウトを使う。



/bootに100MB、第一パーティションに強制指定・・・ってのはないので、多分「基本パーティションにする」ってのはこれに該当するのだろう。
ソフトウェアRAID1で、SWAPを2048MB
ソフトウェアRAID1で、/を残り全部・・・とすると、何か文句言われてしまった。


「RAID0にしかできない」だって??えーなんでなんで??

ググって調べたら、どうもここでは「残り全部」という指定がいけないらしい。固定容量じゃないと、RAID1にならないらしい。というわけで、固定容量9500MBを指定して、改めてRAID1を指定。すると、


なんかできたっぽい。

だったら、エラーメッセージを「RAID0にしかできない」んじゃなくて、「RAID1は固定容量にしなければならない」にしてくれよと。一瞬、Fedora17はソフトウェアRIAD1に対応してないんだと思ったじゃねーか。んじゃなんでSWAPは作れるの?ってのは疑問が残るが。

しかし、2個とも同じメーカー(ウェスタンデジタル)の同じ容量のハードディスクなんだから、「残り全部」にしたら全く同じ容量になるに決まってるのに、なんでダメなのかと。CentOS4は何も文句言われなかったのに。

その後、パッケージの選択になる。

X-WindowやGUI関係のソフト、開発ツールは一切入れない。必要なら後からRPMかソースをコンパイルして入れる。しかし、telnetは選べないのね。後でネットから拾ってくるしかないか。

あとは勝手にインストーラーがやってくれるので放置。そしてインストールが終わって再起動。すると・・

なんじゃこりゃああああああああああ

一応動いてるみたいだけど、豆腐だよ、豆腐。これじゃ操作できないじゃないの。一体どうなってんの??多分、パッケージを選ぶ時に「フォント」「入力メゾット」のチェックを外したのがいけなかったのだろう。というわけで、またリセットしてやり直し。今度はパッケージの選択時に「フォント」「入力メゾット」を入れて再インストール。

・・・やっぱり豆腐でした。

なんでだよ!!!1回やり直すのに30分かかるんだぞ。もう、そんなにオレはヒマじゃないんだぞ。困ったもんだ。眠いし。もういいや、寝ちゃおう寝ちゃおう((C)唯) そうだ寝ちゃおう((C)澪)

〜翌日〜

英語でインストールしてみる。これだと、デフォルトのキーボードが英語、デフォルトのタイムゾーンがアメリカになってるから、手動で変えないといけないから面倒くさいんだよなぁ。最後にLanguageサポートのところでJapaneseにチェックを入れておけば、せめてtelnetで入った時に日本語対応になるだろう。

しかし、やはり豆腐。どないなっとんねん((C)住信SBIネット銀行)。この件についてググっても、だーれも何も言及してない。って事は、この現象はこのパソコンだけに発生する現象と見た。ビデオカードがFedoraに対応してないのかな?という事は、ビデオカード交換かよ。困ったな、このサーバーPCI-Expressついてないし。いまさらAGPって売ってるかな?

とにかく、今度はGUIモードで起動するように再インストールする。しかし、再インストールするのに30分かかるのに、こう何度もやり直しさせられるんじゃかなわんな。

GUIモードなら、GUIが起動するまでは文字化けするが、起動してからはちゃんと文字が読める・・・のはいいが、重い。とにかく重い。どうも、ペンティアム4のパソコンで使う事を想定してないようだ。こんなのやってられるか!というわけで、GUIで使うのはやめた。

やっぱり、ビデオカードを変えよう。ビデオカードを比較的新しいのに変えて再インストール。すると、今度はちゃんと表示された・・・というか、解像度がえらく細かい。これじゃ古いビデオカードじゃ表示できないわけだよ。

最低限CUIぐらい最低限互換性のあるEGAやVGAで起動できないものかと思ったが、grubのオプションでなんとかならないのかと「grub 解像度」という検索ワードで検索したところ、/boot/grub2/grub.conf内にある、set gfxmode=autoという行を、set gfxmode=640x480にすれば良い事が判明。しかし、1024x768に対応してないビデオカードがついている場合、その変更をどうやるんだろう?画面が見えないのに。画面が見えるようにするためには、最低限1回は画面が見れないとダメのような気が。それとも、boot時にgrubにオプションで指定できるのだろうか?

ところがさらに調べると、/boot/grub2/grub.cofは直接編集してはいけないんだそうで。/etc/default/grub内に、GRUB_GFXMODE=640x480と書いておいて、grub2-mkconfigとやって、クリプトに自動的に生成させないといけないようだ。というわけでやってみたが、全然変らん。/boot/grub2/grub.cofはいぜんgfxmode=autoのままだ。というわけで、ここではやっぱり/boot/grub2/grub.cofを直接編集することにした。

まとめ
・起動時に、まずTroubleshooting→Instrall Fedora in basic graphics mode
・RAID1は固定容量にしないとできない
・CUIが豆腐になったらビデオカード(またはパソコンごと)代える
・起動時の解像度は、/boot/grub2/grub.cofを編集してgfxmode=の後に指定する

ローカルネットに接続する

CentOS4なら/etc/sysconfig/network-scripts/ifcfg-eth0というファイルを探すのですが・・・ない・・・ifcfg-eth0がない・・・。Fedra17では、/etc/sysconfig/network-scripts/ifcfg-p3p1というファイルを編集します・・・っていうか、p3p1って何だよ!

vi /etc/sysconfig/network-scripts/ifcfg-p3p1
---------------------------------------
UUID="(ナイショ)"
NM_CONTROLLED="yes"
HWADDR="(ナイショ)"
DEVICE="p3p1"
ONBOOT="yes"
IPADDR=192.168.0.40
NETMASK=255.255.255.0
NETWORK=192.168.0.0
----------------------------------------

次にデフォルトのゲートウェイを設定。さいわい、CentOS4と同じっぽい。
vi /etc/sysconfig/network
----------------------------------------
NETWORKING=yes
HOSTNAME=(ホスト名)
GATEWAY=192.168.0.1
----------------------------------------

次にネームサーバーの設定
vi /etc/resolv.conf
----------------------------------------
search デフォルトのドメイン名
nameserver ネームサーバー1
nameserver ネームサーバー2
----------------------------------------
注:↑これじゃダメだったみたい(後述)

次に時ホスト名を引けるようにする
vi /etc/hosts
----------------------------------------
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.0.40 自ホスト名
----------------------------------------

sshdをxinetd経由で起動する

CentOS4なら、/etc/rc.d/init.d/ssh stopとするところだが、ない・・・/etc/rc.d/init.d/sshがない・・・

Googleで調べたら、デーモンを止めるには、/etc/rc.d/init.d/じゃなくて、systemctrlというコマンドを使うらしい。
systemctl stop ssh.service

ちなみに、書式は
systemctl {start, stop, restart, reload, status} (サーバー名).service
ここで、start, stop, restart, reload, statusは、今までの/etc/rc.d/init.d/(サーバー名)の後に書くのと同じみたい。

次に、起動時にsshがデーモン起動しないようにしたいのだが、
chkconfig sshd off
Note: Forwarding request to 'systemctl disable sshd.service'.
ってなんじゃそりゃ?

強引に訳すと
注意:次のようにリクエストせよ「systemctl disable sshd.service」

っていう事らしい。というわけでやってみる。
systemctl disable sshd.service
すると、何のエラーも出ない。多分これで通用してるっぽい。

Googleで調べたら、書式は
systemctl {enable, disable} (サーバー名).service
ここで、enable, disableは、従来のchkconfigでいうところのon, offみたい。つまり、enableにすると自動起動がオンになって、disableにすると自動起動がオフになるみたい。

次は、sshがxinetd経由で動くようにする。
vi /etc/xinetd.d/ssh
---------------------------------------------------------
# default: on
# description: The ssh server serves ssh sessions; it uses \
# unencrypted username/password pairs for authentication.
service ssh
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i
log_on_failure += USERID
}
---------------------------------------------------------
ここで、xinetdを再起動
/etc/rc.d/init.d/xinetd restart
って、ない、そんなファイルはない。/etc/rc.d/init.d/xinetdがない。そこで、さっきの、systemctlを使ってみる。

systemctl restart xinetd.service
しかし、ない。xinetdサービス自体入ってない・・・・。

ってなわけで、CD-ROMから入れる。
mount /media/cdrom
が、ない。/media/cdromがない。
っていうか、色々となくなりすぎだろ!!なくすなよ、頼むから。

というわけで、手動で-tを指定してマウントする。
mount -t iso9660 -r /dev/cdrom /media/
で、パッケージからxinetdをインストールする。
rpm -ivh /media/Packages/x/xinetd-2.3.14-46.fc17.i686.rpm

アンマウントする
umount /media

あらためて、xinetdの起動および自動起動の設定
systemctl start xinetd.service
systemctl enable xinetd.service

sshでログインしてみる。
ssh -l ユーザー名 localhost

すると・・
Connection Refused by Peer
えーなんでなんで??

ログを見てみる
cat /var/log/secure
sshd[824]: fatal: Write failed: Permission denied [preauth]

はぁ???
サッパリわからん。パーミッションだから、SELINUXがいけないのかもしれん。
vi /etc/sysconfig/selinux
-----------------------------------------------
SELINUX=enforcinfg

SELINUX=disabled
-----------------------------------------------

で、今動いてるのを止める
echo 0 > /selinux/enforce
と思ったら、「/selinux/enforce: そのようなファイルやディレクトリはありません」だって。仕方がないのでリブート。
reboot

で外部からログインすると・・・

入れちゃった。やっぱり、SELINUXのせいだった。xinetd経由で外部から接続しようとすると、SELINUXがPermission deniedとか言って割り込みかけちゃうのね。

あとは設定ファイルをいじって・・・
vi /etc/ssh/sshd_config
--------------------------------------------
Protocol 2,1
PermitRootLogin no
PermitEmptyPasswords no
--------------------------------------------
こんな感じで、SSH1でログイン可能、ルートログイン不可、空のパスワード不可ってことで。

/etc/resolv.confが消える

どうも、 /etc/sysconfig/network-scripts/ifcfg-p3p1 の内容が起動する毎に /etc/resolv.confに上書きされるっぽ。なので、DNSサーバーは/etc/sysconfig/network-scripts/ifcfg-p3p1に書かないといけないらしい。

vi /etc/sysconfig/network-scripts/ifcfg-p3p1
------------------------------------------
(省略)
DNS1=ネームサーバー1
DNS2=ネームサーバー2
------------------------------------------

これで、再起動すると/etc/resolv.confが再設定されます。

・・っていうか、
んなもんわかるかー!

どうでもいいけど、こういうルールやたら変えないでほしいよね。せっかくLinuxの設定の仕方覚えたのに、また覚えなおしだもん。まあ、常に新しいもの、新しいものと覚え続けないといけない事で、我々サーバー管理者が失業しないで済むわけだけど、同じ知識でいつまでも食っていけないのがLinux使いの悲しいところ・・・。

VSFTPDをxinetd経由で起動する

まず、スタンドアロンのvsftpdを止める。
systemctl stop vsftpd.service
systemctl disable vsftpd.service

/etc/xinetd.d/ftpに記述する
-------------------------
# default: on
# description: The ftp server serves ftp sessions; it uses \
# unencrypted username/password pairs for authentication.
service ftp
{
instances = 200
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd.conf
log_on_failure += USERID
disable = no
}
-------------------------

/etc/vsftpd/vsftpd.conf を編集する(雛形から変更する部分だけ)
------------------------------------------------------------
anonymous_enable=NO [←NOにする 匿名の禁止]
chroot_local_user=YES [←追加する チェンジルートの指定]
listen=NO [←NOにする リスンの禁止]
------------------------------------------------------------
あとはxinetdの再起動。
systemctl restart xinetd
FTPで繋いでみる。
ftp localhost
ところが・・・
421 Service not available, remote server has closed connection

えーなんでなんで??

しばらく悩んだ後、設定ファイルを100回ぐらい読み返したら、ようやく見つけました。
------------------------------------------------------------
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
# Make sure, that one of the listen options is commented !!
listen_ipv6=NO
------------------------------------------------------------
強引に訳すと、「この指定はIPv6ソケットのリッスンを可能にします。デフォルトではあらゆるアドレス(::)の端末から、IPv6とIPv4どちらのアクセスも可能にします。IPv6とIPv4の『両方の』リスンは必要ではありません。もし、そうしたいなら(多分、特定のアドレスからリッスンしたいのだろう)、vsftpdの設定ファイルを2つ作って、プロセスを2つ走らせないといけません。リッスンのオプションのうちどちらか1つをコメントアウトする事を確認してください。」

つまり、スタンドアロンで動かす場合でも、listen=か、listen_ipv6=のどちらかをYES、どちらかをNOにしないといけないし、今みたいにxinetd経由で動かしたいなら、どっちもNOにしないといけないのですね。

・・っていうか、
んなもんわかるかー!
listen_ipv6とか変なオプション勝手に足すなよ。どっちか1つしかYESにできない排他的なオプションなら、YESとNOで設定するんじゃなくてこれとは別に、listen_type=IPV4とか、listen_type=IPV6みたいなトグルの行を増やせばよかろう。

なんか、旧バージョンの設定ファイルの方法を丸暗記で設定してる私みたいなサーバー管理者に、意地でも英語のコメントを読ませようというか、丸暗記するだけで自力で設定ファイルを読もうとしないサーバー管理者を失業させようとしてるというか・・・・。

外部から接続を試みるが、No route to hostと出てコネクトできない。多分、IPTBALESがいけないのだろう。
systemctl stop iptables.service
これで再チャレンジ。すると、

500 OOPS: vsftpd: refusing to run with writable root inside chroot()
なんじゃそりゃ??

Googleで検索すると、こんなトコに有力な情報が・・・
http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/
「vsftpdの最新バージョンでは、chrootしたルートディレクトリに書き込み権限があってはいけません」だって。んな面倒くさい。そんな不便なことできるか!

で、もっと読むと、allow_writeable_chroot=YESという設定を足せばいいみたい。さっそく足してみよう。
vi /etc/vsftpd/vsftpd.conf
------------------------------------------------------------
(省略)
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
allow_writeable_chroot=YES
(省略)
------------------------------------------------------------
すると・・・
500 OOPS: unrecognised variable in config file: allow_writeable_chroot
って、だめじゃん。ガセかよ!ひでー。(まあ、このサイトにもかなりガセネタ書いてるから、あまり人の事言えないけど)

さらにググって調べると、vsftpsを再コンパイルして、vsftpd-extにしないと、allow_writeable_chrootという行は受け付けないらしい。

cd ワークディレクトリ
wget http://vsftpd.devnet.ru/files/2.2.2/ext.7/vsFTPd-2.2.2-ext7.tgz
tar xvzf vsFTPd-2.2.2-ext7.tgz
cd vsFTPd-2.2.2-ext.7
make

/bin/ld: cannot find -lwrap
libwrap.aがないらしい。develパッケージを入れないといかんのか。

cd ワークディレクトリ
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/t/tcp_wrappers-devel-7.6-69.fc17.i686.rpm
rpm -ivh tcp_wrappers-devel-7.6-69.fc17.i686.rpm

もう1回コンパイルしてみる。
cd ワークディレクトリ
cd vsFTPd-2.2.2-ext.7
make

お?なんかエラーが出てないっぽい。
vsftpdっていう実行ファイルもできてるし。
cp vsftpd /usr/local/sbin
ソースから生成した場合は、localのついたディレクトリに入れるのがデフォルト。

さっそく、xinetd.d/ftpで指定してみる。
vi /etc/xinetd.d/ftp
----------------------------
server = /usr/local/sbin/vsftpd [←/local/を足す]
----------------------------
systemctl restart xinetd.service
ってやったら、sshまで切られちゃった。おかしいな、CentOS4なら、/etc/rc.d/init.d/xinetd restartで切られることはないのに。まあいいや、入りなおそう。

ftp localhost
500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in
ええー、tcp_wrapperはYESになってるのに、コンパイルする時にサポートしてない??ひどい。あんだけ苦労してlibwrap-devel入れたのに。

ググったら有力な情報が
vi builddefs.h
------------------------
#define VSF_BUILD_TCPWRAPPERS [←一番上に追加]
------------------------
でもって
make clean
make
cp vsftpd /usr/local/sbin
ftp localhost
500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in

なんだ、やっぱダメじゃん。((C)黒崎一護)ガセかよ!!

もう1回ググって調べる。すると、こんな有力な情報が。さっそくやってみる。
#undef VSF_BUILD_TCPWRAPPERS
という行を消した上で、
#define VSF_BUILD_TCPWRAPPERS
を足さないといけないらしい。そりゃそうだ、一番上に追加してもすぐ下でundefしちゃってんだもん。できないわけだよ。

vi builddefs.h
------------------------
#undef VSF_BUILD_TCPWRAPPERS
↓書き換え
#define VSF_BUILD_TCPWRAPPERS
------------------------
make clean
make
cp vsftpd /usr/local/sbin
ftp localhost
------------------------
Name:
331 Please specify the password.
Password:
------------------------
あれ?できたっぽい。

じゃあ、念願の、
allow_writeable_chroot=YES
を指定してみる。

vi /etc/vsftpd/vsftpd.conf
------------------------------------------------------------
(省略)
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
allow_writeable_chroot=YES
(省略)
------------------------------------------------------------
ftp localhost
500 OOPS: unrecognised variable in config file: allow_writeable_chroot
なんだ、やっぱダメじゃん。((C)黒崎一護)

さらにググったら、バージョンが3.0じゃないとダメっぽい。
wget https://security.appspot.com/downloads/vsftpd-3.0.0.tar.gz
tar xvzf vsftpd-3.0.0.tar.gz
cd vsftpd-3.0.0/

vi builddefs.h
------------------------
#undef VSF_BUILD_TCPWRAPPERS
↓書き換え
#define VSF_BUILD_TCPWRAPPERS
------------------------
make
cp vsftpd /usr/local/sbin
ftp localhost

500 OOPS: cannot read user list file:/etc/vsftpd.user_list
えー、なんでなんで??

/etc/vsftpd/user_list
ってあるじゃん。っていうか、ないのに何で今までエラーじゃなかったの?? それともバージョンアップのたびに設定ファイルの文法チェックが厳しくなるのか??

どうも、ググって調べた結果、 vsftpd.confでuser_listの場所を指定してないのがいけないらしい。というか、RPMのをやめてソースからコンパイルしたのを使ったんで、記述がない場合のデフォルトの名前が変ったみたい。これまでの経験上、RPMを入れるのと、.tar.gzを展開してコンパイルしたのでは、設定ファイルのデフォルトの場所や名前が変わるのは、そう珍しい事ではない。

ソース一式の中にある「tunables.c」というソースに、
install_str_setting("/etc/vsftpd.user_list", &tunable_userlist_file);
という記載があるので、多分これを書き換えたらいいんでしょうけど、そんな事しなくても、ここの情報によると、
---------------------------------------------
userlist_fileオプション(デフォルトは/etc/vsftpd.user_list)
---------------------------------------------
なので、以下の記載を追加すれば良い。
vi /etc/vsftpd/vsftpd.conf
------------------------------------------------------------
(省略)
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list  [←追加]
userlist_deny=YES [←追加]
(省略)
------------------------------------------------------------
ここで、userlist_denyってのは、
userlist_deny=NO ・・・ user_listが許可するユーザーのリストになる
userlist_deny=YES (デフォルト) ・・・ user_listが許可しないユーザーのリストになる
という事らしい。

ローカルホストにログインしてみる
ftp localhost
------------------------
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.0)
Name:
331 Please specify the password.
Password:
230 Login successful.
------------------------
うまくいったっぽい。

あとは、ホームディレクトリのパーミッションを755にして、Windows機から接続を試みる。
できた。OOPS!とは言われない。

という事は、最初から3.0をソースからコンパイルすればよかったわけで・・・。困ったもんだ。「vsftpdの最新バージョンでは、chrootしたルートディレクトリに書き込み権限があってはいけません」とか「vsftpd-extを使うと良い」とか、その辺はガセか。

しかし、Linuxに関する情報は、このサイトも含めて、みなさん試行錯誤しながら書いてるわけで、多少のガセは仕方ない。自分も他のいろいろなサイトをヒントに調べてるわけだから、他のサイトの情報に感謝する事はあっても文句を言ってはいけない。

だいたい、Linux関連のサイトってのは、どのサイトにも1つや2つガセはあるものの、どのサイトにも1つや2つそのサイトにしかない有力な情報があるものなので、10や20のサイトを読んで総合した上で、最後には経験則から真実を見極める必要がある。あと、英語のサイトに有力な情報が多いので、英語のサイトもがんばって読まないとダメみたい。

まとめ
@xinetd経由で動かすにはvsftpd.confに
listen=NO
listen_ipv6=NO
を追加する。

A「チェンジルートした先のルートディレクトリが書き込み可であってはいけない」という制限を解除するためには、
バージョンを3.00にする。
builddefs.hの#undef VSF_BUILD_TCPWRAPPERSを削除し、#define VSF_BUILD_TCPWRAPPERSの記載を追加してコンパイルする。
vsftpd.confに
allow_writeable_chroot=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=YES
を追加する。

telnetで入れるようにする

telnetはパスワードが平文で流れる反面、ログインに失敗すると5秒のペナルティがあるので、パスワード総当り攻撃には強い。さっそくパッケージを入れて・・・

cd /media/Packages/t/
ls | grep telnet
telnet-0.17-52.fc17.i686.rpm

ない・・・telnetサーバーがない・・・。ないのかよ!しょーもな。

cd ワークディレクトリ
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/t/telnet-server-0.17-52.fc17.i686.rpm
rpm -ivh telnet-server-0.17-52.fc17.i686.rpm
これは、fc17って書いてあるパッケージだから、当然Fedora17に入れても問題はあるまい。

vi /etc/xinetd.d/telnet
------------------------
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
------------------------
systemctl restart xinetd.service

他のサーバーから・・・
telnet 192.168.0.40
------------------------------------------------
Fedora release 17 (Beefy Miracle)
Kernel 3.3.4-5.fc17.i686.PAE on an i686 (0)
login:
Password:
------------------------------------------------
特に問題はない。さすが、fc17って書いてあるRPMだな。fc17にすんなり入った。

sendmailのチューニング

大量のメルマガを配信するために、いつもはdefine(`confDELIVERY_MODE', `i')dnl にしていったん/var/spool/clientmqueueにメールをためるようにするのだが、Fedora17でいつもの設定を行ったところ、メールが飛ばない。

systemctl restart sendmail.service
でリスタートすれば飛ぶのだが、まさかcronで定期的にsendmailをリスタートするわけにもいかず、困った。

cat /etc/sysconfig/sendmail
-----------------------------------
SENDMAIL_OPTS="-q1h"
-----------------------------------
なにこの、ENDMAIL_OPTSって?ググっても情報がまるでヒットせず。困った。

試しに、強引に従来の設定を追加してみる。
-----------------------------------
SENDMAIL_OPTS="-q1h"
QUEUE=15m
SMQUEUE=16s
-----------------------------------
しかし、メールは飛ばず。っていうか、そもそも、SMQUEUE=という行が無視されてるっぽい。SENDMAIL_OPTSを使って、SMQUEUE=に相当する記載をしなければいけないっぽいな。

-q1hは、多分QUEUE=1hに相当するものだろう。そこから推理すると、
SENDMAIL_OPTS="-q15m -s16s"
これでどうだ!

すると、
ExecStart=/usr/sbin/sendmail -bd $SENDMAIL_OPTS $SENDMAIL_OPTARG (code=exited, status=64)

えーなにそれ? どうやら、$SENDMAIL_OPTSがダメっぽい。というか、$SENDMAIL_OPTSってsendmailに与えるの引数なのか。

CentOS4の/etc/rc.d/init.d/sendmailを読むと、
-----------------------------------
daemon --check sm-client /usr/sbin/sendmail -L sm-msp-queue -Ac \
-q$SMQUEUE $SENDMAIL_OPTARG
-----------------------------------
と書いてある。つまり、SMQUEUEっていう変数は、起動スクリプト(/etc/rc.d/init.d/sendmail)が使うための変数であって、べつにsendmail本体が使うわけじゃないのね。で、Fedora17ではそれがsystemctlになってしまったので通じなくなったみたい。

というわけで、今回は-q$SMQUEUEの部分が-q16sとなるように、SENDMAIL_OPTS="-q16s"と指定してみた。

vi /etc/sysconfig/sendmail
-----------------------------------
SENDMAIL_OPTS="-q16s"
-----------------------------------
systemctl restart sendmail.service

cd /var/spool/clientmqueue
ls
(16秒待つ)
ls
お?なんかうまくいったっぽい。それにしても、こういう所をあんまり変えてくれるなよ。一難去ってまた一難だよ、まったく。

ntpの設定にハマる

ntpを入れる
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/n/ntp-4.2.6p5-2.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/n/ntpdate-4.2.6p5-2.fc17.i686.rpm
rpm -ivh ntp-4.2.6p5-2.fc17.i686.rpm ntpdate-4.2.6p5-2.fc17.i686.rpm

ここまではよかった。しかし、
ntpq -pとすると何の反応もなく、しばらくすると、
localhost: timed out, nothing received
***Request timed out
えーなんでなんで??
localhost: timed outって書いてあるから、localhostからのコマンドを拒否されてるっぽい。ためしに、ntp.confに
restrict localhost
という行を追加してみる。すると、

remote refid st t when poll reach delay offset jitter
==============================================================================
ntp1.jst.mfeed. 210.173.160.86 2 u 3 64 1 6.554 -3.183 0.001
ntp2.jst.mfeed. 210.173.160.56 2 u 2 64 1 6.233 -2.978 0.001
ntp3.jst.mfeed. 210.173.160.56 2 u 1 64 1 7.660 -3.007 0.001

って、いいのかよ!

CentOS4ではrestrict 127.0.0.1でよかったのに、なぜかFedora17だとrestrict localhostと書かないとlocalhostからのコマンドを受け付けないみたい。ヘンなのー

cat /etc/hosts
-----------------------------------------------------------
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
-----------------------------------------------------------
ちゃんと、127.0.0.1がlocalhostだって定義してあるのになぜ?

qpopperでハマる

今までCentOS4で使っていたソースコード一式(qpopper4.0.9.tar.gz )を流用してコンパイルするが、--enable-special-auth を指定したにもかかわらず、パスワードが通らない。cat /etc/shadowで確認してみると、なんと、パスワードが長い。頭が$6$で始まってる新しい暗号化方式らしい。

しかし、そういうディストリビューションが出ているのにまさかQPOPPERが対応してなかったら大顰蹙だよね、と思って、公式サイトから最新版をゲットしてやり直す。

wget http://core.ring.gr.jp/archives/net/mail/qpopper/qpopper4.1.0.tar.gz
tar xvzf qpopper4.1.0.tar.gz
cd qpopper4.1.0
./configure --enable-special-auth --enable-log-login --enable-shy
make
make install

vi /etc/xinetd.d/popper
-----------------------------------------------------------------------
# default: on
# description: The wu-ftpd FTP server serves FTP connections. It uses \
# normal, unencrypted usernames and passwords for authentication.
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/popper
server_args = -t /var/log/pop3.log
}
-----------------------------------------------------------------------
systemctl restart xinetd.service

お、なんかうまくいったっぽい。そりゃ、天下のQPOPPERともあろうものが、いつまでも新しいshadowパスワードに対応してないんじゃ文句言われるだろうからな。

apache2.4でハマる

とりあえず、ダメもとでバージョン2.2と同じ手順でやってみる。

wget http://ftp.riken.jp/net/apache/httpd/httpd-2.4.2.tar.gz
tar xvzf httpd-2.4.2.tar.gz
cd httpd-2.4.2
./configure --enable-modules=so --enable-ssl --with-included-apr
しかし、
configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.

うーん、やっぱり案の定、2.2と同じconfigureが通じるわけないか。だいたい、今までの傾向からいって、メジャーバージョンが変って同じconfigureオプションで通る可能性の方が低いわな。

でも、そういう風習ってどうにかならんものかと。「helpを読め」みたいなメッセージは出るんだけど、バージョンが変るたびに英語のドキュメント読まないといけないじゃん。

で、英語を読むのがめんどいのでググって日本語のサイトを調べたら、ここに有力な情報が。どうやら、apr-1.4.6.tar.gz apr-util-1.4.1.tar.gzをインストールしないといけないらしい。

wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.4.6.tar.gz
tar xvzf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure
make
make install

wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.4.1.tar.gz
tar xvzf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1
./configure --with-apr=/usr/local/apr
make
make install

あらためてapacheのインストール
cd /home/mente/work/targz/httpd-2.4.2
./configure --enable-modules=so --enable-ssl

しかし
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
だめか。

というわけで、pcre-develを入れてみる
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/p/pcre-devel-8.21-3.fc17.i686.rpm
rpm -ivh pcre-devel-8.21-3.fc17.i686.rpm

あらためてapacheのインストール
./configure --enable-modules=so --enable-ssl

すると・・・
configure: error: mod_so can not be built as a shared DSO

ググってもこの件について日本語のサイトでヒットしなかったので、仕方なく./configure --helpで英語のヘルプを読む。どうも、--enable-modulesという書き方がこのバージョンでは通用しないらしい。
./configure --enable-so --enable-ssl
に修正。バージョンが新しくなると、今まで通用していたconfigureオプションが廃止される(または書式が変る)なんてのは別に珍しい事ではない。しかし、都度英語読まないといけないのが面倒だ。つくづくLinuxは日本人にやさしくない。

その後、httpd.confを今までのようにカスタマイズする。そして、apacheを起動しようとすると・・・
AH00548: NameVirtualHost has no effect and will be removed in the next release
なに、「NameVitrualHostという設定は何の効果もない。次のリリースでは削除されるだろう」だって。じゃしょうがない。消すよ。もうバーチャルホストは使って当たり前だから指定しなくて良いという事か。

で起動させてみるが、SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5の行が設定エラーになってしまう。どうも、SSLモジュールがないらしい。えー、--enable-sslって指定したのに??

--enable-modules=allって指定しないと、最小限のもの以外はコメントアウトされてしまうようだ(多分・・・)。今までは --enable-modules=soでよかったのに、なんか、このバージョンでは "all" | "most" | "few" | "none" | "reallyall" しか指定できないっぽい。(英語のhelpによると)

というわけで、以下は手動でコメントアウトを解除した。
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule ssl_module modules/mod_ssl.so
今度はSSLも動いた。(証明書が自己証明だけど)

PHPのインストール

とりあえず、ダメもとでバージョン5.3と同じ手順でバージョン5.4をコンパイルしてみる。すると、./configureでいくつか廃止されたオプションがあって、ワーニングになってしまった。

configure: WARNING: unrecognized options: --enable-magic-quotes, --enable-ucd-snmp-hack, --enable-zend-multibyte, --with-mime-magic, --with-exec-dir, --with-ttf

マジッククォートができないと互換性がなくなって困るのだが、考えてみれば自動で'を''にされても困るから、従来のphpのソースの方を変更せざるを得まい。

その後、make、 make installは問題なく、php.iniを変更してapacheを再起動したのはいいが、register_globalsのところで「そんなオプションはない」みたいなエラーで動かない。どうも、register_globals も廃止みたい。オンそのものにできない。その行自体あるとエラーだ。

古いスクリプトは頭にincludeで自動的に$_POSTや$_GETの変数をforeachで展開するようにするしかないな。(あんまりセキュリティ上よろしくないけど)

その後、<? phpinfo(); ?>で情報を表示させようとするが、出ない。php.iniをよく見ると、short_open_tag = Offになっている。たしかに、<?でphp開始と認識すると、<?xmlでいつもエラーになっちゃうんだよね。かといって、今更古いスクリプト全部<?PHPにするんじゃえらい手間だ。これは、short_open_tag = Onにしておこう。

だから、結局、PHPの場合、コンパイルで問題が起きたわけではないが、いくつかのコンパイルオプションや機能が廃止になったために、従来のPHPのソースの方を変えないと互換性を損ねるようだ。

個人で自分のサイトを作るなら問題ないんだけど、会社で過去の資産を流用して別のサイト立ち上げる時には、どうしても過去のソースを流用しないといけないので、職場ではセキュリティよりも互換性の方が大事だったりする。

ImageMagickのインストール

wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ImageMagick-6.7.5.6-3.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ImageMagick-perl-6.7.5.6-3.fc17.i686.rpm
rpm -ivh ImageMagick-6.7.5.6-3.fc17.i686.rpm ImageMagick-perl-6.7.5.6-3.fc17.i686.rpm
警告: ImageMagick-6.7.5.6-3.fc17.i686.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 1aca3465: NOKEY

エラー: 依存性の欠如:
libHalf.so.6 は ImageMagick-6.7.5.6-3.fc17.i686 に必要とされています
libIex.so.6 は ImageMagick-6.7.5.6-3.fc17.i686 に必要とされています
libIlmImf.so.6 は ImageMagick-6.7.5.6-3.fc17.i686 に必要とされています
libIlmThread.so.6 は ImageMagick-6.7.5.6-3.fc17.i686 に必要とされています
libImath.so.6 は ImageMagick-6.7.5.6-3.fc17.i686 に必要とされています
libwmflite-0.2.so.7 は ImageMagick-6.7.5.6-3.fc17.i686 に必要とされています
ilmbase(x86-32) = 1.0.2-4.fc17 は ilmbase-devel-1.0.2-4.fc17.i686 に必要とされています
libGL-devel は ilmbase-devel-1.0.2-4.fc17.i686 に必要とされています
libGLU-devel は ilmbase-devel-1.0.2-4.fc17.i686 に必要とされています
libHalf.so.6 は ilmbase-devel-1.0.2-4.fc17.i686 に必要とされています
libIex.so.6 は ilmbase-devel-1.0.2-4.fc17.i686 に必要とされています
libIlmThread.so.6 は ilmbase-devel-1.0.2-4.fc17.i686 に必要とされています
libImath.so.6 は ilmbase-devel-1.0.2-4.fc17.i686 に必要とされています
って、なによ、この依存性の山は。

必要なライブラリをfindrpmで調べてみるが、.soファイル名で検索してもOpenEXRが必要なのか、OpenEXR-libsが必要なのか、OpenEXR-develが必要なのかイマイチわからん。ググったら、fftw3が必要との情報もあるが、libsがいるのかdevelがいるのか・・・。

仕方がないので、トライ&エラー、試行錯誤で色々やってみた結果、ilmbase、OpenEXR-libs、libwmf-liteが必要のようだ。しかし、依存性の欠如のエラーは、できれば.soファイル名じゃなくてライブラリの名前で出てほしいな。(できれば、develかlibsの区別も)

wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ilmbase-1.0.2-4.fc17.i686.rpm
rpm -ivh ilmbase-1.0.2-4.fc17.i686.rpm

wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/o/OpenEXR-libs-1.7.0-4.fc17.i686.rpm
rpm -ivh OpenEXR-libs-1.7.0-4.fc17.i686.rpm

wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/l/libwmf-lite-0.2.8.4-32.fc17.i686.rpm
rpm -ivh libwmf-lite-0.2.8.4-32.fc17.i686.rpm

wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ImageMagick-6.7.5.6-3.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ImageMagick-perl-6.7.5.6-3.fc17.i686.rpm
rpm -ivh ImageMagick-6.7.5.6-3.fc17.i686.rpm ImageMagick-perl-6.7.5.6-3.fc17.i686.rpm

なんとかうまくいったようだ。こういうのって、インストール時に入れておかないと、後から追加するんじゃ依存性の解決が面倒だなと。

/etc/rc.d/init.d/iptables saveがない

NICの名前がeth0じゃなくてp3p1になってしまったので、IPTABLESの記載も全部p3p1にしないといけないのだが、サーバーによってこのpなんとかが変ってしまうのでスクリプトを変えないといけないのが面倒だ。

あと、/etc/rc.d/init.d/iptables saveがない。どうすりゃええねん・・・と思ったら、自分で昔説明してるじゃん。すっかり忘れたわ。
iptables-save > /etc/sysconfig/iptables

/etc/rc.d/rc.localがない

じゃあ自分で作ればいいのかと思ったが、再起動しても動かない。またしてもググって調べたら、ここに有力な情報が。
systemctl enable rc-local.service
rc.localはサービスの1つだったのね。というわけで再起動したら、やはり動かない。どうしたものかと思ったら、、1行目に#!/bin/shが必要だった。これを追加して再起動したら、今度はうまくいった。

SELinuxのオフ

selinuxが動いていると、xinetd経由でsshやtelnetやftpで入れないので止めます。

vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcinfg - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
に変更する。その後リブートする。

もちろんselinuxの設定をカスタマイズして解決できる人は止めないでくださいね。あくまで私がselinuxがよくわからないから止めてます。

不要なデーモンを止める

サーバー機は、少しでもデーモンを乗っ取られるリスクを減らすために、常駐しているデーモンは必要最小限にしなければなりません。例えばメールを使わないのにsendmailを動かしていると、それだけSPAMの踏み台にされるリスクが高まります。

起動するデーモンの確認。
ls -1 /etc/systemd/system/multi-user.target.wants/

不要なデーモンがサーバー起動時に常駐しないようにする
例)
systemctl disable acpid.service
systemctl disable arp-ethers.service
systemctl disable atd.service
systemctl disable auditd.service
systemctl disable gpm.service
systemctl disable irqbalance.service
systemctl disable mcelog.service
systemctl disable mdmonitor.service
systemctl disable remote-fs.target
systemctl disable rpcbind.service
systemctl disable sm-client.service
systemctl disable smartd.service
※これは例です。どのデーモンが不要かは、みなさんご自身で決めてくださいね。

リブート
reboot

xinetdを入れる

mkdir /usr/local/src/RPMS
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/x/xinetd-2.3.14-46.fc17.i686.rpm
rpm -ivh xinetd-2.3.14-46.fc17.i686.rpm

systemctl start xinetd.service
systemctl enable xinetd.service

sshをxinetd経由にする

sshdをスタンドアロンでは実行させずにxinetd経由に変更します。 sshdは、同時に大量のコネクションをかけるとルート権限を乗っ取られる不具合が発見された事があり、 それ以来慣習としてsshはxited経由で起動させています。あくまで個人的な慣習なので、無理に従う必要はありません。

vi /etc/xinetd.d/ssh
# default: on
# description: The ssh server serves ssh sessions; it uses \
# unencrypted username/password pairs for authentication.
service ssh
{
	disable = no
	flags = REUSE
	socket_type = stream
	wait = no
	user = root
	server = /usr/sbin/sshd
	server_args = -i
	log_on_failure += USERID
}
スタンドアロンのサービスを止める
systemctl disable sshd.service
systemctl stop sshd.service

いったんsshを抜ける
実機で
systemctl restart xinetd.service

sshのチューニング

vi /etc/ssh/sshd_config
Protocol 2,1
PermitRootLogin no 
PermitEmptyPasswords no
いったんsshを抜ける。
実機で
systemctl restart xinetd.service

プロトコル1を追加するのは、私の使っているTTSSHが1にしか対応してないからなので、2に対応しているターミナルをお使いの方はなるべくプロトコル2だけにしておいてくださいね。

ルートログインを禁止する理由は、パスワード総当りでログインを試みる輩がいたとして、「ユーザーID」と「パスワード」の組み合わせが当たらないとログインできない場合に比べて、ルートログインではユーザーIDがrootに固定されているため、パスワードをaaaaa〜zzzzzまで総当りで試された場合にパスワードを破られるリスクが高まるためです。

telnetを入れる

これも完全に私の好みの問題ですが、sshよりもtelnetの方が自分的にはTera Termでログインしやすいし、Windowsのコマンドプロンプトでもログインできるし、便利がいいので入れてます。パスワードが平文で流れるので、あまりセキュリティ上はよろしくありません。

cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/t/telnet-server-0.17-52.fc17.i686.rpm
rpm -ivh telnet-server-0.17-52.fc17.i686.rpm

vi /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
	flags = REUSE
	socket_type = stream
	wait = no
	user = root
	server = /usr/sbin/in.telnetd
	log_on_failure += USERID
	disable = no
}
いったんsshを抜ける
実機で
systemctl restart xinetd.service

Tera Term等でtelnetで入ってみる。

vsftpdのチューニング

まず、スタンドアロンのvsftpdを止める。
systemctl stop vsftpd.service
systemctl disable vsftpd.service

次に、xinetd経由にする。これは、サーバー上で実行しているデーモンを、少しでも少なくするためです。

vi /etc/xinetd.d/ftp
# default: on
# description: The ftp server serves ftp sessions; it uses \
# unencrypted username/password pairs for authentication.
service ftp
{
	instances = 200
	flags = REUSE
	socket_type = stream
	wait = no
	user = root
	server = /usr/sbin/vsftpd
	server_args = /etc/vsftpd/vsftpd.conf
	log_on_failure += USERID
	disable = no
}
vi /etc/vsftpd/vsftpd.conf (変更・追記する箇所だけ)
anonymous_enable=NO
chroot_local_user=YES
listen=NO
listen_ipv6=NO
userlist_file=/etc/vsftpd/user_list
userlist_deny=YES
いったんssh(かtelnet)を抜ける
実機で
systemctl restart xinetd.service

このままでは、ユーザーのホームディレクトリに書き込み可のパーミッションがついてると「500 OOPS: vsftpd: refusing to run with writable root inside chroot()」というエラーになってしまうので、その制限が嫌な時はvsfptdを3.00にバージョンアップする。

mkdir /usr/local/src/targz
cd /usr/local/src/targz
wget https://security.appspot.com/downloads/vsftpd-3.0.0.tar.gz
tar xvzf vsftpd-3.0.0.tar.gz
cd vsftpd-3.0.0

vi builddefs.h (undefをdefineにする)
#define VSF_BUILD_TCPWRAPPERS
vi tunables.c (/etc/vsftpdの後のピリオドをスラッシュにする)
  install_str_setting("/etc/vsftpd/user_list", &tunable_userlist_file);
  install_str_setting("/etc/vsftpd/banned_emails", &tunable_banned_email_file);
  install_str_setting("/etc/vsftpd/chroot_list", &tunable_chroot_list_file);
  install_str_setting("/etc/vsftpd/user_list", &tunable_userlist_file);
  install_str_setting("/etc/vsftpd/email_passwords",
make
ここで「tcpwrap.c:16:20: 致命的エラー: tcpd.h: そのようなファイルやディレクトリはありません」と表示される時は、tcpwrapperのdevelパッケージが入ってないのが原因。その場合は、以下の手順で入れる。
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/t/tcp_wrappers-devel-7.6-69.fc17.i686.rpm
rpm -ivh tcp_wrappers-devel-7.6-69.fc17.i686.rpm

makeできたら、
cp vsftpd /usr/local/sbin
としてコンパイルしてできあがったvsftpdファイルをコピーします。make installとしなかったのは、個人的に/usr/local/man以下にファイルを入れたくなかったからです。特に意味はありません。

vi /etc/xinetd.d/ftp (/usr/local/sbinにある方を使うように変更)
# default: on
# description: The ftp server serves ftp sessions; it uses \
# unencrypted username/password pairs for authentication.
service ftp
{
	instances = 200
	flags = REUSE
	socket_type = stream
	wait = no
	user = root
	server = /usr/local/sbin/vsftpd
	server_args = /etc/vsftpd/vsftpd.conf
	log_on_failure += USERID
	disable = no
}
vi /etc/vsftpd/vsftpd.conf (変更・追記する箇所だけ)
allow_writeable_chroot=YES
いったんssh(かtelnet)を抜ける
実機で
systemctl restart xinetd.service

※あとで気付いたのですが、vsftpd-3.0.0-2.fc17.i686.rpmというパッケージが出てるみたいなので、コンパイルするまでもなくrpm -Uvhでアップデートすれば済んだような気も・・・・

viを標準でカラーにする

これもかなり個人的な好みの問題ですが、Poderosaからtelnet/sshでアクセスした時に、viがカラーで出ると見やすいので、標準でカラーで出るようにします。Poderosa(や同様のカラー表示のできるターミナルソフト)を使ってない人や、白黒でも良い(白黒の方が良い)という方は、この設定はしないでください。あと、TeraTermだとこの設定ではうまくいかないみたいなのでTeraTermを使う人はこの設定はしないでください。

カラーのviを起動させるvi2というコマンドを新設
/usr/bin/vim -u /etc/vimrc /usr/local/bin/vi2
#!/bin/sh
/usr/bin/vim -u /etc/vimrc $1
chmod 755 /usr/local/bin/vi2

デフォルトをvi2にする
vi /etc/profile.d/vi2.sh
alias vi=vi2
chmod 755 /etc/profile.d/vi2.sh

標準は従来どおりの設定の方が良いという場合は、aliasは指定しないでください。また、/etc/vimrcではなく独自の設定ファイルを使いたいという場合は、/usr/local/bin/vi2をカスタマイズして自分のオリジナルの設定ファイルを指定するようにしてください。

日本語コードをeucにする

これもかなり個人的な好みの問題ですが、かつてTeraTermを使っていた頃からずっとサーバーのコードはeucにしているので、慣習として今もeucにしています。

vi /etc/sysconfig/i18n
#LANG="ja_JP.UTF-8"
#SYSFONT="False"
LANG="ja_JP.eucJP"
SUPPORTED="ja_JP.UTF-8:ja_JP:ja"
SYSFONT="latarcyrheb-sun16"
いったんssh(かtelnet)を抜けて入りなおす。

sendmailのチューニング

最初からCD(やDVD)に入ってるsendmailは不具合やセキュリティーホールが発見される可能性が高いため、常に最新のパッケージを入れるようにします。以後最新版が出たら、以下の記事のバージョン番号を読み替えて入れ替えてください。

db4-develの削除とlibdb-develのインストール
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/l/libdb-devel-5.2.36-5.fc17.i686.rpm
rpm -e db4-devel-4.8.30-10.fc17.i686
rpm -ivh libdb-devel-5.2.36-5.fc17.i686.rpm

ghostscriptのインストール
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/x86_64/os/Packages/g/ghostscript-9.05-1.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/g/ghostscript-fonts-5.50-28.fc17.noarch.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/p/poppler-data-0.4.5-2.fc17.noarch.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/u/urw-fonts-2.4-11.fc17.noarch.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/x/xorg-x11-font-utils-7.5-7.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/l/libXfont-1.4.5-1.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/l/libfontenc-1.1.0-2.fc17.i686.rpm
rpm -ivh ghostscript-9.05-1.fc17.i686.rpm ghostscript-fonts-5.50-28.fc17.noarch.rpm poppler-data-0.4.5-2.fc17.noarch.rpm urw-fonts-2.4-11.fc17.noarch.rpm xorg-x11-font-utils-7.5-7.fc17.i686.rpm libXfont-1.4.5-1.fc17.i686.rpm libfontenc-1.1.0-2.fc17.i686.rpm

sendmailをソースパッケージから再生成、強制上書きインストール
wget ftp://rpmfind.net/linux/fedora/linux/development/rawhide/source/SRPMS/s/sendmail-8.14.5-14.fc18.src.rpm
rpmbuild --rebuild --target=i686 --define 'dist .fc18' sendmail-8.14.5-14.fc18.src.rpm
rpm -ivh --force /root/rpmbuild/RPMS/i686/sendmail-8.14.5-14.fc18.i686.rpm
rpm -ivh --force /root/rpmbuild/RPMS/noarch/sendmail-cf-8.14.5-14.fc18.noarch.rpm

sendmailの再起動
systemctl restart sendmail.service

restartした時にプロンプトに戻ってこない場合、ホスト名が逆引きされていません。このままenableにするとサーバーが起動しなくなってしまうので、逆引きを登録します。

hostname ホスト名
vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.XX ホスト名
無事sendmailがリスタートできるようになったら、サーバー起動時に起動するようにする。
systemctl enable sendmail.service

デリバリーモードの変更
通常はデフォルトの設定で問題ないのですが、メールマガジンを大量配信するスクリプトを動かす場合、スクリプトはすぐに終了させてメール配信はバックグラウンドで行いたい場合が多いと思います。そこで、デリバリーモードをqにして、メールはいったんキューにためておいてsendmailがバックグラウンドでメールを配信させるようにします。

cd /usr/share/sendmail-cf/feature/
vi msp.m4
define(`confDELIVERY_MODE', `q')
`DAEMON_OPTIONS(`Name=NoMTA, Addr=127.0.0.1, M=C')dnl')
ここでデリバリーモードは、
i・・・即送信する。送信が完了するまで待つ。
d・・・-qで指定した時間だけ待ってから送信する。送信が完了するまで待たない。
q・・・キューに溜める。送信が完了するまで待たない。-qで指定した時間毎に再送を試みる。
b・・・キューに溜める。送信が完了するまで待たない。sendmail -qが指定された時にまとめて送信する。

設定を反映させる
cd /etc/mail
m4 sendmail.mc > sendmail.cf

このままだと/var/spool/clientmqueueにたまるだけでメーが全然飛ばなくなるので、再送の間隔を16秒に変更する。

vi /etc/sysconfig/sendmail
SENDMAIL_OPTS="-q16s"
sendmailの再起動
systemctl restart sendmail.service

NTPサーバーの設定

cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/n/ntp-4.2.6p5-2.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/n/ntpdate-4.2.6p5-2.fc17.i686.rpm
rpm -ivh ntp-4.2.6p5-2.fc17.i686.rpm ntpdate-4.2.6p5-2.fc17.i686.rpm

cd /etc
vi /etc/ntp.conf
restrict default ignore
restrict 127.0.0.1
restrict localhost
restrict 210.173.160.27 mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.57 mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.87 mask 255.255.255.255 nomodify notrap noquery
server 210.173.160.27
server 210.173.160.57
server 210.173.160.87
driftfile /etc/ntp/drift
authenticate no
broadcastdelay  0.008
ドリフトファイルを作成する
touch /etc/ntp/drift
touch /etc/ntp/drift.TEMP
chmod 666 /etc/ntp/drift
chmod 666 /etc/ntp/drift.TEMP

サーバーを起動する(自動起動にする)
systemctl start ntpd.service
systemctl enable ntpd.service

動作テスト
ntpq -p

時計が大幅に狂ってる時はNTPでは調整できないので、dateコマンドである程度合わせておく。(ある程度で良い)ただし、実機がデーターセンターのラックの中にある場合は仕方ないが、実機に直接触れる事ができるのであれば、BIOSで直した方が良い。

QPOPPERのインストール

Fedora17の$6$から始まるshadowパスワードに対応するためには、QPOPPERのバージョンが4.1以上である必要があります。

cd /usr/local/src/targz
wget http://core.ring.gr.jp/archives/net/mail/qpopper/qpopper4.1.0.tar.gz
tar xvzf qpopper4.1.0.tar.gz
cd qpopper4.1.0
./configure --enable-special-auth --enable-log-login --enable-shy
make
make install

vi /etc/xinetd.d/popper
# default: on
# description: The wu-ftpd FTP server serves FTP connections. It uses \
#       normal, unencrypted usernames and passwords for authentication.
service pop3
{
        disable = no
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/local/sbin/popper
        server_args             = -t /var/log/pop3.log
}
systemctl restart xinetd.service
このコマンドでssh(telnet)を抜けてしまうので、入りなおす。

動作テスト
telnet localhost 110
user ユーザー名
pass パスワード
quit

ImageMagickのインストール

CentOS4の時は一発で入ったImageMagickですが、Fedora17では依存性の解決に苦労します。

ilmbaseを入れる
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ilmbase-1.0.2-4.fc17.i686.rpm
rpm -ivh ilmbase-1.0.2-4.fc17.i686.rpm

OpenEXR-libsを入れる
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/o/OpenEXR-libs-1.7.0-4.fc17.i686.rpm
rpm -ivh OpenEXR-libs-1.7.0-4.fc17.i686.rpm

libwmf-liteを入れる
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/l/libwmf-lite-0.2.8.4-32.fc17.i686.rpm
rpm -ivh libwmf-lite-0.2.8.4-32.fc17.i686.rpm

ImageMagickを入れる
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ImageMagick-6.7.5.6-3.fc17.i686.rpm
wget ftp://rpmfind.net/linux/fedora/linux/releases/17/Everything/i386/os/Packages/i/ImageMagick-perl-6.7.5.6-3.fc17.i686.rpm
rpm -ivh ImageMagick-6.7.5.6-3.fc17.i686.rpm ImageMagick-perl-6.7.5.6-3.fc17.i686.rpm

IPTABLESのカスタマイズ

IPTABLESを設定した後、CentOS4では/etc/rc.d/init.d/iptables saveでセーブできたが、Fedora17にそんなものはないので、RedHat6の頃を思い出して、
iptables-save > /etc/sysconfig/iptables
という風にセーブする。本当に稼動してるかどうかは以下のように確認する。
iptables -L -n

FTPでログインしてみる。その際に、パッシブモード、非パッシブモード両方でファールが送信/受信できる事を確認する。うまくいったら自動起動をオンにする。
systemctl enable iptables.service

サーバー起動時にrc.localを実行するようにする
systemctl enable rc-local.service
vi /etc/rc.d/rc.local
#!/bin/sh
/root/scripts/firewall-setting.sh
chmod 755 /etc/rc.d/rc.local
vi /root/scripts/firewall-setting.sh
     :
(ファイアウォールの設定いろいろ)
     :
/sbin/modprobe ip_conntrack_ftp
chmod 755 /root/scripts/firewall-setting.sh
サーバーを再起動させて、
lsmod | grep ftp
で動作確認してみる。

参考文献

以下のサイトを参考にさせていただきました。この場をお借りして御礼申し上げます。
http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/
http://www.kozupon.com/ftp/vsftpd.html
http://www.nina.jp/server/redhat/vsftpd/vsftpd.conf.html
http://abe-log.cocolog-nifty.com/blog/2012/04/centoapache24ru.html
http://fukuda7707.blogspot.jp/2012/04/fedora-16-rclocal.html
スポンサーリンク