公司項目需求:
我們公司是化妝品電子商務公司
1.搭建一臺ftp服務器用於上傳包裹快遞面單圖片,實現基本的上傳下載功能
2.vsftpd通過虛擬用戶登錄,可以外網訪問
3.限制虛擬用戶登錄ip
4.虛擬用戶相關配置文件可以界面操作添加、修改等,而且要及時更新
下面主要是1、2兩步實現步驟及注意事項
3、4兩步在另一篇博客裏有詳細的說明及代碼(vsftpd+pam_mysql+shell)
安裝pam_mysql (請一定要安裝,下面安裝vsftpd錯誤3給出瞭解釋)這裏沒有給出mysql的安裝
cd pam_mysql-0.7RC1
./configure --with-mysql=/home/mysql/app/mysql5/
make && make install
安裝報錯:
1.PAM unable to dlopen(/lib/security/pam_mysql.so): libmysqlclient.so.18: cannot open shared object file: Permission denied
cp mysql_dir/lib/libmysqlclient.so.18 /usr/lib64/ 這裏一定要注意,創建軟連不行,必須複製,該文件權限必須爲mysql執行用戶權限。否則登錄不了,而且不會報什麼錯
安裝vsftpd
注:
centos 32位直接yum安裝即可
centos64位需要編譯安裝,如果yum安裝會報錯:libgcc_s.so.1 must be installed for pthread_cancel to work
tar zxvf vsftpd.3-2
vim
defs.h
修改下面的行 ,解決上面的問題(libgcc_s.so)
#define VSFTP_AS_LIMIT 100UL * 1024 * 1024
#define VSFTP_AS_LIMIT 400UL * 1024 * 1024
vim builddefs.h
修改下面的行,在配置vsftpd時需要使用的模式tcpwrappers,如果沒有配置,會報錯:
500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in
#unfin VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_TCPWRAPPERS
more INSTALL 查看安裝事項,這些一般情況下都已經好了,這裏只是提一下
make && make install
安裝過程中出現的一些錯誤:
1.tcpwrap.c:16:20: 錯誤:tcpd.h:沒有那個文件或目錄
yum install -y tcp_wrappers tcp_wrappers-devel
2./usr/bin/ld: cannot find -lcap
yum -y install libcap libcap-devel (LCAP 是一種實現鏈路動態匯聚的協議 主動模式、被動模式)
3.530 Login incorrect vsftpd+pam_mysql配置一切正常但是就是無法登錄,開始一直不知到
哪裏出了問題,後來仔細檢查了一下vsftpd的依賴關係,才知道pam_mysql依賴關係沒有(ldd /usr/local/sbin/vsftpd)
安裝vsftpd之前,安裝pam_mysql
配置vsftpd
cp vsftpd.conf /etc/ 配置文件一定要放在/etc下
cp RedHat/vsftpd.pam /etc/pam.d/vsftpd
下面是正在使用的線上ftp服務配置模板(參數的意思就不列出了)
vim vsftpd.conf
anonymous_enable=YES no_anon_password=YES ftp_username=ftp anon_root=/var/ftp anon_upload_enable=NO anon_world_readable_only=YES anon_mkdir_write_enable=NO anon_other_write_enable=NO anon_max_rate=0 #chown_uploads=YES/NO #chown_username=username #anon_umask=077 #deny_email_enable=YES/NO #banned_email_file=/etc/vsftpd/banner_emails #[local] #login name:local user, login passwd:local passwd, ftp dir:local path, exclude user in:/etc/vsftpd.ftpusers isolate_network=NO local_enable=YES local_root=/home/virtual local_umask=077 file_open_mode=0755 local_max_rate=0 #chroot_list_enable=YES,chroot_local_user=YES:vsftpd.chroot_list is allow #chroot_list_enable=YES,chroot_local_user=NO:vsftpd.chroot_list is deny #chroot_list_enable=NO,chroot_local_user=YES:all deny #chroot_list_enable=NO,chroot_local_user=NO:all allow chroot_list_enable=NO #chroot_list_file=/etc/vsftpd/chroot_list chroot_local_user=NO allow_writeable_chroot=YES #[welcome message] #message type:file or string #dirmessage_enable=YES #message_file=.message #banner_file=/etc/vsftpd/banner ftpd_banner=Welcome to test's FTP server #[other] text_userdb_names=NO ls_recurse_enable=NO hide_ids=NO download_enable=YES #[globle] #all config is about this globle config write_enable=NO #[transfer mode] #p_w_picpath or exec file:BINARY,CGI file or HTML file:ASCII #ascii_upload_enable=NO #ascii_download_enable=NO #[access control] #type:host control(hosts.allow) ,user control ftpusers level is gt vsftpd.user_list tcp_wrappers=YES userlist_enable=YES userlist_file=/etc/vsftpd/user_list userlist_deny=YES #[timeout] accept_timeout=60 connect_timeout=60 data_connection_timeout=120 idle_session_timeout=300 #[logfile] xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO log_ftp_protocol=YES #[ftp work type and work port] #work type:PORT FTP and PASV FTP listen_port=22 #connect_from_port_20=YES #ftp_data_port=20 #pasv_addr_resolve= #pasv_address= #pasv_promiscuous= pasv_enable=YES pasv_max_port=53001 pasv_min_port=52999 #[connect] listen=YES max_clients=100 max_per_ip=10 use_localtime=YES #listen_address=IP #setproctitle_enable=NO #[pam user] guest_enable=YES pam_service_name=vsftpd guest_username=virtual virtual_use_local_privs=NO user_config_dir=/etc/vsftpd/userconf
注:
1.refusing to run with writable root inside chroot()
allow_writeable_chroot=YES 加上這一句
創建虛擬宿主用戶:virtual dir:/home/virtual/
創建虛擬用戶test
用戶配置文件:/etc/vsftpd/vuser_conf/test
關於用戶配置文件,有很多參數都是可以設置的,這些功能可以在加強
local_root=/home/virtual/test
write_enable=YES
anon_upload_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
cmds_allowed=PASV,TYPE,LIST,CWD,PWD,SIZE,CDUP,TYPE,MKD,MDTM,NLST,PASS,QUIT,USER,REIN,RETR,STOR,RNTO,APPE,RNFR,DELE,RMD
注:
1.226 Transfer done (but failed to open directory)
test 用戶目錄權限設置必須爲7XX 第一個必須是7 (所有權限) chmod 700 test
配置pam_mysql
vim /etc/pam.d/vsftpd
補齊相關參數即可,pam_msyql 安裝包也有相關說明文件
auth required /lib/security/pam_mysql.so user= passwd= host= db= table= usercolumn= passwdcolumn= crypt=0
account required /lib/security/pam_mysql.so user= passwd= host= db= table= usercolumn= passwdcolumn= crypt=0
關於外網訪問:
外網訪問ftp時,有一點非常要注意,通過被動模式訪問,外網映射的數據傳輸端口必須是連續的,否則客戶端無法建立鏈接,我在鏈接時碰到過下面的錯誤:
Using host address instead of the one suggested by the server:
vsftpd +ssl 加密傳輸
目前尚未配置,因爲當時覺得申請證書特別麻煩