1.基本ポリシー
- 特定ユーザのみFTPアクセス可能
- 特定ディレクトリより上位の階層へのアクセス不可
- LIMITディレクティブでなくTcpWrapperによるIPアドレス制限
2.proftpdのインストール
xinetd経由で使用する。
$ sudo aptitude install xinetd
$ sudo aptitude install proftpd
$ cat /etc/xinetd.d/ftp
service ftp
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
log_on_success += DURATION USERID
log_on_failure += USERID
server = /usr/sbin/proftpd
}
$ sudo /etc/init.d/xinetd restart
3./etc/proftpd/proftpd.confの設定
adminユーザは /var/www/htmlをホームとする。
それ以外のユーザはデフォルトホーム(/home/hogeなど)。
許可するユーザはadminとadmin2。
・・・
DefaultRoot /var/www/html admin
DefaultRoot ~
・・・
<Limit LOGIN>
Order allow,deny
AllowUser admin,admin2
Deny all
</Limit LOGIN>
注意しなくてはいけないのが、以下のようにIPアドレス制限と組み合わせると「または」になってしまう。
しかもapacheのIP制限と記述が似ているがproftpdの場合、条件にマッチした時点で評価終了となりapacheとは動作が異なる。
<Limit LOGIN>
Order allow, deny
Allow from 192.168.0.0/24
Deny from all
</Limit LOGIN>
つまり、「admin,admin2」からのアクセスまたは「192.168.0.0/24」からのアクセス許可となる。
mod_ifsessionなどと組み合わせれば「あるユーザを特定の IP アドレス範囲からだけログインできるように制限できる」らしい。参考
めんどいのでTcpWrapperでIPアドレスの制限は行う。
4.TcpWrapperによるアクセス制限
すべて拒否してから、許可するサービス、IPを記述。
/etc/hosts.deny
ALL: ALL
/etc/hosts.allow
sshd: 192.168.0.0/255.255.255.0
proftpd: 192.168.0.0/255.255.255.0 192.168.1.0/255.255.255.0
PASV(パッシブモード)対応
PASV(パッシブモード)に対応できるようiptables設定。
# modprobe nf_conntrack_ftp
# cat /etc/modules
・・・
nf_conntrack_ftp
※kernel-2.6.20から、ip_conntrack*関連が nf_conntrack*に置き換わっているので注意。
6.接続拒否ユーザの設定
/etc/ftpusersに接続を拒否するユーザを記述。これはPAMの段階で拒否される。/etc/pam.d/proftpdをみると以下の記述がある。
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed