|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 でのアクセスが「禁止」されています 関連 † |