|
ftpchrootについて †一般ユーザでFTPアクセスをしたとき、ホームディレクトリ以外は見る事が出来ないようにしてセキュリティーを向上させる方法について記述します。 対象
ftpchroot †/etc/ftpchroot ファイルに、制限を設けたいユーザー名を記述します。 # /etc/ftpchroot: list of users who needs to be chrooted. See ftpchroot(5). kaihatsu ユーザー名 kaihatsu でFTPログインした際に、/home/kaihatsu ディレクトリがルート位置になるよう、chroot が実行されます。 しかしこれだけでは FTPでファイル名リストが取れなくなります。理由は /bin/ls へアクセスが出来ないからです。 そこで、~kaihatsu/bin/ls と ~kaihatsu/lib が必要になります。 ls †/bin/ls を ~kaihatsu/bin にコピーします。ディスク容量を節約するためにコピーではなくハードリンクを用います。 # su - kaihatsu Password: kaihatsu $ mkdir ~/bin $ cd ~/bin $ ln /bin/ls . ハードリンクは ln に -s を付けずに実行します。このときシンボリックリンクではNGです。なぜなら、ls -> /bin/ls というシンボリックリンクを作っても、/home/kaihatsu が / に chroot されているので自分自身を指すだけだからです。 次に/bin/ls が必要とするライブラリ一覧を取得します。 $ /lib/ld-linux.so.2 --list /bin/ls librt.so.1 => /lib/tls/librt.so.1 (0x29559000) libacl.so.1 => /lib/libacl.so.1 (0x2956f000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x29585000) libc.so.6 => /lib/tls/libc.so.6 (0x295a1000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x296b4000) /lib/ld-linux.so.2 (0x52aaa000) libattr.so.1 => /lib/libattr.so.1 (0x296d5000) ここで得られた /lib/tls/librt.so.1 /lib/tls/libc.so.6 /lib/tls/libpthread.so.0 /lib/libacl.so.1 /lib/libgcc_s.so.1 /lib/ld-linux.so.2 /lib/libattr.so.1 が必要なライブラリファイルです。 $ ls -l /lib/tls/librt.so.1 lrwxrwxrwx 1 root root 14 Feb 17 2006 /lib/tls/librt.so.1 -> librt-2.3.5.so のようにシンボリックリンクになっていることが分かります。そこでシンボリックリンク先のlibrt-2.3.5.soも必要になります。librt.so.1 と librt-2.3.5.so をコピーしてくれば良いのですが、先ほどと同様にハードリンクを使うことにします。 $ mkdir -p lib/tls $ cd lib/tls $ ln /lib/tls/librt.so.1 . $ ln /lib/tls/librt-2.3.5.so . 以下同様に残りのファイルも全てハードリンクを作成します。 $ ln /lib/tls/libc.so.6 . $ ln /lib/tls/libc-2.3.5.so . $ ln /lib/tls/libpthread.so.0 . $ ln /lib/tls/libpthread-2.3.5.so . $ cd ../ $ ln /lib/libacl.so.1 . $ ln /lib/libacl.so.1.1.0 . $ ln /lib/libattr.so.1 . $ ln /lib/libattr.so.1.1.0 . $ ln /lib/ld-linux.so.2 . $ ln /lib/ld-2.3.5.so . $ ln /lib/libgcc_s.so.1 . この状態でツリー構造を見ると次のようになっているはずです /home/kaihatsu/ |-- bin | `-- ls `-- lib |-- ld-2.3.5.so |-- ld-linux.so.2 -> ld-2.3.5.so |-- libacl.so.1 -> libacl.so.1.1.0 |-- libacl.so.1.1.0 |-- libattr.so.1 -> libattr.so.1.1.0 |-- libattr.so.1.1.0 |-- libgcc_s.so.1 `-- tls |-- libc-2.3.5.so |-- libc.so.6 -> libc-2.3.5.so |-- libpthread-2.3.5.so |-- libpthread.so.0 -> libpthread-2.3.5.so |-- librt-2.3.5.so `-- librt.so.1 -> librt-2.3.5.so 以上の準備を整えた後、inetdをリスタートさせてください # /etc/init.d/inetd restart 試してみる †$ ftp localhost ← ローカルホストにFTPアクセス Connected to localhost.localdomain. 220 ultracat2 FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) ready. Name (localhost:kaihatsu): 331 Password required for kaihatsu. Password: 230 User kaihatsu logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd ← カレントディレクトリを表示してみる 257 "/" is current directory. ftp> cd / ← / 位置にcdしようとしてみる 250 CWD command successful. ftp> ls 200 PORT command successful. 150 Opening ASCII mode data connection for '/bin/ls'. total 24 -rw------- 1 1000 1000 126 Apr 5 16:33 .bash_history -rw-r--r-- 1 1000 1000 414 Mar 30 20:54 .bash_profile -rw-r--r-- 1 1000 1000 2044 Mar 30 20:54 .bashrc drwxr-xr-x 2 1000 1000 4096 Apr 12 07:01 bin drwxr-xr-x 3 1000 1000 4096 Apr 12 07:26 lib 226 Transfer complete. ftp> exit 221 Goodbye. FTPアクセスの禁止 †FTPアクセスを「禁止」したいユーザー名を /etc/ftpusers に列挙します $ cat /etc/ftpusers # /etc/ftpusers: list of users disallowed ftp access. See ftpusers(5). root ftp anonymous この例では、 root, ftp, anonymous でのアクセスが「禁止」されています 関連 † |