一. 安裝s3fs
安裝s3fs-fuser
https://github.com/s3fs-fuse/s3fs-fuse
二. 安裝vsftpd
#查看當前系統版本
cat /etc/redhat-release
CentOS release 6.6 (Final)
#查看是否已經安裝vsftpd
rpm -qa | grep vsftpd
#如果沒有,就安裝,並設置開機啟動
yum -y install vsftpd
chkconfig vsftpd on
基於虛擬用戶的配置
所謂虛擬用戶就是沒有使用真實的帳戶,只是通過映射到真實帳戶和設置權限的目的。虛擬用戶不能登錄CentOS系統。
修改配置文件
vi /etc/vsftpd/vsftpd.conf
#服務器獨立運行 listen=YES #設定不允許匿名訪問 anonymous_enable=NO #設定本地用戶可以訪問。注:如使用虛擬宿主用戶,在該項目設定為NO的情況下所有虛擬用戶將無法訪問 local_enable=YES #使用戶不能離開主目錄 chroot_list_enable=YES #設定支持ASCII模式的上傳和下載功能 ascii_upload_enable=YES ascii_download_enable=YES #PAM認證文件名。PAM將根據/etc/pam.d/vsftpd進行認證 pam_service_name=vsftpd #設定啟用虛擬用戶功能 guest_enable=YES #指定虛擬用戶的宿主用戶,CentOS中已經有內置的ftp用戶了 guest_username=ftp #設定虛擬用戶個人vsftp的CentOS FTP服務文件存放路徑。存放虛擬用戶個性的CentOS FTP服務文件(配置文件名=虛擬用戶名) user_config_dir=/etc/vsftpd/vuser_conf #配置vsftpd日志(可選) xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/xferlog dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log
#以下是我生產中的實際配置
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=NO # 限制本地用戶在家目錄,設為YES為生效,此時,chroot_list_enable選項應該設為NO
chroot_list_enable=YES # 限制虛擬用戶家目錄,設為YES為生效,此時,chroot_local_user選項應該設為NO,將需要限制的用戶寫入chroot_list文件中,每行一個用戶
chroot_list_file=/etc/vsftpd/chroot_list
chown_uploads=YES
chown_username=ftpuser
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
# FTP ssl加密傳輸使用
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
guest_enable=YES
guest_username=ftpuser
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=11000
進行認證
#安裝Berkeley DB工具,很多人找不到db_load的問題就是沒有安裝這個包
yum install db4 db4-utils
#創建用戶密碼文本,注意奇行是用戶名,偶行是密碼
vi /etc/vsftpd/vuser_passwd.txt
test
123456
#生成虛擬用戶認證的db文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
#編輯認證文件,全部注釋掉原來語句,再增加以下兩句
vi /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
#創建虛擬用戶配置文件
mkdir /etc/vsftpd/vuser_conf/
#文件名等於vuser_passwd.txt里面的賬戶名,否則下面設置無效
vi /etc/vsftpd/vuser_conf/test
#虛擬用戶根目錄,根據實際情況修改
guest_username=ftpuser write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/data/s3 virtual_use_local_privs=YES anon_umask=022
設置FTP根目錄權限
#最新的vsftpd要求對主目錄不能有寫的權限所以ftp為755,主目錄下面的子目錄再設置777權限
mkdir /data/ftp
chmod -R 755 /data
chmod -R 777 /data/ftp
#建立限制用戶訪問目錄的空文件
touch /etc/vsftpd/chroot_list
#如果啟用vsftpd日志需手動建立日志文件
touch /var/log/xferlog
touch /var/log/vsftpd.log
配置PASV模式(可選)
vsftpd默認沒有開啟PASV模式,現在FTP只能通過PORT模式連接,要開啟PASV默認需要通過下面的配置
打開/etc/vsftpd/vsftpd.conf,在末尾添加
#開啟PASV模式
pasv_enable=YES
#最小端口號
pasv_min_port=40000
#最大端口號
pasv_max_port=40080
pasv_promiscuous=YES
#在防火牆配置內開啟40000到40080端口
-A INPUT -m state --state NEW -m tcp -p -dport 40000:40080 -j ACCEPT
#重啟iptabls和vsftpd
service iptables restart
service vsftpd restart
現在可以使用PASV模式連接你的FTP服務器了~
Selinux和防火牆
該關閉的關閉,該放行的放行
#關閉selinux/iptables
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0
chkconfig iptables off
service iptables stop
常見問題
1.如果登錄時出現這樣的錯誤,需要升級pam
500 OOPS: priv_sock_get_result. Connection closed by remote host.
yum update pam -y
2.安裝完成后若虛擬用戶登陸提示:
500 OOPS: cannot change directory:/data/s3
可以嘗試執行,然后重新登錄重試
s3fs -o allow_other wecash-idtrust-bk /data/s3 -o passwd_file=/etc/s3/passwd
ftp結合ssl參考: http://www.binarytides.com/vsftpd-configure-ssl-ftps/