proftpd+OpenSSHでSFTPサーバー構築

【環境】
CentOS5系
proftpd 1.3.3

proftpdとOpenSSHを利用して、SSH通信を利用して暗号化されたセキュアなSFTPサーバの構築。

1.Proftpdインストール

EPELリポジトリを追加

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

明示的に指定されない限り利用しないように無効化設定します。
全てenabled=1⇒enabled=0に変更します。

# sed -i -e "s/enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

無効化を確認

# cat /etc/yum.repos.d/epel.repo|grep enabled
enabled=0
enabled=0
enabled=0

インストールの実行
認証にLDAPを利用するのでproftpd-ldapも入れています。

# yum --enablerepo=epel install proftpd proftpd-ldap

2.設定ファイル編集

# vi /etc/proftpd.conf

以下、proftpd.confの設定例です。

ServerName "ProFTPD server"
ServerIdent on "SFTP Server ready."
ServerAdmin root@localhost
ServerType standalone
DefaultServer on
AccessGrantMsg "User %u logged in."
DeferWelcome off
AuthPAMConfig proftpd

#LDAP認証設定
AuthOrder mod_ldap.c
LoadModule mod_ldap.c
LoadModule mod_sftp.c
LDAPServer localhost:389
LDAPUseTLS off
LDAPAuthBinds on
LDAPDoAuth on "ou=Users,dc=example,dc=com" "(&(uid=%v)(objectClass=posixAccount))"
LDAPDoUIDLookups on "ou=Users,dc=example,dc=com"
LDAPDoGIDLookups on "ou=Groups,dc=example,dc=com"
DefaultRoot /home/ftp DomainUsers
#PASVポート指定
PassivePorts 4096 4127
ExtendedLog /var/log/proftpd/all.log AUTH,DIRS,READ,WRITE,INFO

#NATしている場合グローバルIPを設定
MasqueradeAddress XXX.XXX.XXX.XXX

IdentLookups off
UseReverseDNS off

#port22はopensshのSubsystemで利用されている為変更
Port 2222
#新規フォルダ、ファイル作成時のパーミッションマスク設定
Umask 002 002
ListOptions "-a"

AllowRetrieveRestart on
AllowStoreRestart on
MaxInstances 20
User nobody
Group nobody
UseSendfile no
ScoreboardFile /var/run/proftpd.score
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"

<Global>
AllowOverwrite yes
<Limit ALL SITE_CHMOD>
AllowAll
</Limit>
</Global>

<IfModule mod_facts.c>
FactsAdvertise off
</IfModule>

<IfModule mod_sftp.c>
SFTPEngine on
SFTPLog /var/log/proftpd/sftp.log
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
</IfModule>

#デフォルトルートディレクトリへの書込削除関連を禁止
#Limit設定はサブディレクトリへ継承
<Directory /home/ftp>
<Limit MKD RMD DELE RNFR STOR WRITE>
DenyAll
</Limit>
</Directory>

#以下FTPディレクトリ設定例
#ディレクトリを削除・移動させないように権限を二段階で設定
<Directory /home/ftp/share>
<Limit ALL CWD MKD RNFR RNTO RETR STOR>
Order allow,deny
DenyAll
AllowUser user1,user2
</Limit>
</Directory>
<Directory /home/ftp/share>
<Limit DELE RMD>
AllowUser user1,user2
</Limit>
</Directory>
#※AllowUserにアクセス許可するユーザを指定

3.FTPディレクトリを作成

FTP DefaultRootディレクトリ作成

# mkdir -m 770 /home/ftp
# chgrp DomainUsers /home/ftp

各FTPディレクトリ作成

# mkdir -m 770 /home/ftp/share
# chgrp DomainUsers /home/ftp/share

4.SSH接続制限設定

opensshのSubsystemであるsftp-server(port22)のみ利用させる為に
DomainUsersのSSH接続を禁止しておきます。

# vi /etc/ssh/sshd_config

#最終行に以下を追加
DenyGroups DomainUsers

5.サービスの開始・起動設定

# /etc/rc.d/init.d/proftpd start
# chkconfig proftpd on

後は接続確認をして完了です。