1、Proftpd介紹
Proftpd的全稱是Professional FTP daemon,是針對Wu-FTP的弱項而開發的,軟件在通過多年的發展以後完善了不少功能,ProFTP已經成爲繼Wu-FTP以後最爲流行的FTP服務器軟件,愈來愈多的站點選用它構築安全高效的FTP站點。Proftpd軟件和vsftpd同樣是一個開放源代碼的ftp服務器軟件,可是可配置項比vsftpd要多,是目前比較流行的ftp軟件,Proftpd的配置和apache的配置類似,所以該軟件也十分容易配置和管理。linux
Proftpd和VSftpd兩者區別
===== vsftpd =====
全稱Very secure FTP daemon。比ProFTPD 具備更高的安全性。vsftpd使用通常身份啓動服務,下降了FTP服務的PID權限,使該服務即便被入侵也沒法獲得有效的系統管理權限。同時vsftpd利用chroot軟件來改變登陸者的根目錄,使登錄者只能在這個目錄中活動,限制了登陸者的執行權限。vsftpd經過配置vsftpd.conf文件來完成部署,設定簡單,登陸者僅分爲anonymous和real user 兩種。可使用standalone和super daemon的方式啓動。vsftpd沒法控制每一個目錄的流量、不能控制上傳和下載的比例、不能針對不一樣的登錄者進行不一樣的權限設定。web
===== Proftpd=====
因爲Proftpd在自身的原始碼中已經包含了所須要的執行指令,不須要Linux系統本機的執行程序的支持,因此在系統安全上更爲安全。配置簡單且靈活,安裝後只須要設定proftpd.conf一個配置文件便可,可配置性更強。可使用stand-alone或者super daemon方式來啓動ftp服務。Proftpd能夠控制上下傳比例,實現流量控制,針對不一樣的目錄設定不一樣的權限。登陸者分爲anonymous和real user兩種。shell
Proftpd比較好用的功能有如下幾點:
1)目錄訪問權限配置靈活,配置簡單。
2)可以不依賴系統用戶,可使用獨立的虛擬用戶系統(使用過Serv-U的朋友應該深有體會,配置很是方便,對原有系統環境影響較小)
3)對中文的支持良好,完美解決vsftpd中文引號bug。由於vsftpd在中文支持方面存在bug,對中文中一些字符的支持不是很好(好比對中文的雙引號支持不是很好)。apache
FTP部署的背景
公司四個部門分別爲運維部、開發部、銷售部、行政部:
1)各部門用戶訪問FTP後能夠看到全部目錄,僅能夠訪問本部門的目錄;
2)須要FTP日誌功能;
3)FTP認證方式基於文件認證方式;
4)共享目錄:/var/ftp;vim
2、Proftpd 安裝記錄緩存
測試機器爲Centos7.5,iptables和selinux均關閉 1)下載ProFTP [root@localhost ~]# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.6.tar.gz [root@localhost ~]# tar -zvxf proftpd-1.3.6.tar.gz -C /usr/src/ [root@localhost ~]# cd /usr/src/proftpd-1.3.6/ [root@localhost proftpd-1.3.6]# ./configure --prefix=/usr/local/proftpd --sysconfdir=/etc/ --enable-nls --enable-openssl --enable-shadow ================================================================================================================== 編譯參數說明(可經過"./configure --help" 查看幫助選項): --prefix=PREFIX 指定安裝路徑(--prefix=/usr/local/) --sysconfdir=DIR 指定FTP服務配置文件路徑(--sysconfdir=/etc) --localstatedir=DIR 指定運行狀態的文件存放位置(默認/var/proftpd) --with-modules=mod_ldap 指定加載功能模塊 --enable-memcache 支持緩存功能 --enable-nls 支持多語言環境(如中文),安裝完成後在主配置文件中須要指定字符編碼(UseEncoding UTF-8 CP936) --enable-openssl 支持TLS加密FTP服務 --enable-shadow 支持使用/etc/shadow驗證用戶密碼 ================================================================================================================== 注意須要GCC編譯器 [root@localhost proftpd-1.3.6]# make [root@localhost proftpd-1.3.6]# make install 2)添加環境變量 [root@localhost proftpd-1.3.6]# vim /etc/profile ........ PATH=$PATH:/usr/local/proftpd/bin [root@localhost proftpd-1.3.6]# source /etc/profile 3)建立啓動用戶及組(該用戶沒法登陸系統,沒有宿主目錄) [root@localhost ~]# useradd proftp -s /sbin/nologin -M 4)創建共享目錄 [root@localhost ~]# mkdir -p /var/ftp/運維部 [root@localhost ~]# mkdir -p /var/ftp/開發部 [root@localhost ~]# mkdir -p /var/ftp/銷售部 [root@localhost ~]# mkdir -p /var/ftp/行政部 [root@localhost ~]# useradd -M -s /sbin/nologin yunwei [root@localhost ~]# useradd -M -s /sbin/nologin kaifa [root@localhost ~]# useradd -M -s /sbin/nologin xiaoshou [root@localhost ~]# useradd -M -s /sbin/nologin xingzheng [root@localhost ~]# chmod 777 /var/ftp/運維部 [root@localhost ~]# chmod 777 /var/ftp/開發部 [root@localhost ~]# chmod 777 /var/ftp/銷售部 [root@localhost ~]# chmod 777 /var/ftp/行政部 ================proftpd配置原文件解釋============== [root@localhost ~]# cat /etc/proftpd.conf|grep -v "#"|grep -v "^$" ServerName "ProFTPD Default Installation" #客戶端鏈接後顯示的字符 ServerType standalone #服務啓動模式 DefaultServer on Port 21 #端口 UseIPv6 off #禁用IPv6 Umask 022 #權限掩碼 MaxInstances 30 #併發進程30個(防DoS攻擊) User nobody #啓動服務的用戶 Group nogroup #啓動服務的組 #DefaultRoot ~ #共享根目錄(默認爲用戶家目錄) AllowOverwrite on #是否容許使用文件覆寫權限 <Limit SITE_CHMOD> #權限設置 DenyAll </Limit> <Anonymous ~ftp> User ftp Group ftp UserAlias anonymous ftp #用戶別名 MaxClients 10 #最大客戶端鏈接數 DisplayLogin welcome.msg #顯示登陸信息 DisplayChdir .message <Limit WRITE> #權限設置 DenyAll </Limit> </Anonymous> =================該文件格式=================== ########################################################################## # 全局設置 參數值 # # <Directory "路徑"> 指定路徑相關設置,可使用Limit語法限制目錄權限 # ... ... # ... ... # </Directory> # # # # <anonymouse "路徑"> 匿名共享路徑相關設置(包括權限設置) # </anonymouse> ######################################################################### ==============Limit權限說明================ ######################################################################### # CWD:改變所在目錄 (即Change Working Directory 表示進入該目錄) # MKD/XMKD:新建目錄 # RNFR/RNTO:重命名目錄的(一塊兒使用) ,即改名 # DELE:刪除文件 # RMD/XRMD:刪除目錄 (即Remove Directory) # RETR:下載 # STOR:上傳 # LOGIN:容許登錄 # READ: 可讀,包括了RETR,SITE,SIZE,STAT # WRITE: 可寫,包括包括了APPE, DELE, MKD, RMD, RNTO, STOR, XMKD, XRMD # DIRS: 容許列出目錄,包括了DUP, CWD, LIST, MDTM, NLST, PWD, RNFR, XCUP, XCWD, XPWD # ALL:包括了READ WRITE DIRS #######################以上權限結合動做一塊兒使用##################### # AllowUser:容許某個用戶 # DenyUser:禁止某個用戶 # AllowGroup:容許某個用戶組 # DenyGroup:禁止某個用戶組 # AllowAll:容許全部用戶 # DenyAll:禁止全部用戶 ######################################################################### 5)修改/etc/proftpd.conf文件,部份內容爲添加內容 [root@localhost ~]# cat /etc/proftpd.conf ServerName "ProFTPD Default Installation" ServerType standalone DefaultServer on UseEncoding UTF-8 CP936 #支持的編碼格式(中文) Port 21 AllowRetrieveRestart on #容許斷點繼傳(上傳) AllowStoreRestart on #容許斷點繼傳(下載) UseIPv6 off Umask 022 RootLogin off #禁止root登陸ftp MaxInstances 30 SystemLog /var/log/proftp.log #產生獨立的日誌文件. (若是想指定本身的日誌格式能夠結合(ExtendLog,LogFormat)兩個選項設置) TransferLog /var/log/proftp.log #記錄用戶下載的日誌信息 User proftp #設置啓動用戶爲proftp Group proftp #設置啓動組爲proftp DefaultRoot /var/ftp #指定共享根目錄爲/var/ftp AllowOverwrite on #<Anonymous ~ftp> #該部分所有#註釋,取消匿名訪問功能 # User ftp # Group ftp # UserAlias anonymous ftp # MaxClients 10 # DisplayLogin welcome.msg # DisplayChdir .message # <Limit WRITE> # DenyAll # </Limit> #</Anonymous> #如下內容爲設置權限,爲手動添加內容 #全部用戶能夠看到全部部門的文件夾,僅能夠訪問本身部門的目錄 RequireValidShell off #用戶登陸是否須要shell(對虛擬用戶很重要) AuthUserFile /usr/local/proftpd/ftpd.passwd #經過文件認證用戶登陸,須要ftpasswd命令建立該文件 <Directory "/var/ftp/*"> <Limit CWD READ> #容許全部人能夠查看根目錄 AllowAll </Limit> </Directory> <Directory "/var/ftp/運維部"> <Limit CWD MKD RNFR READ WRITE STOR RETR> DenyAll #拒絕全部人往該目錄下執行Limit後的操做指令 </Limit> <Limit DELE> DenyAll #禁止任何人在該目錄下刪除文件 </Limit> <Limit CWD MKD RNFR READ WRITE STOR RETR> AllowUser yunwei #僅容許yunwei用戶能夠執行Limit後的全部指令 </Limit> </Directory> <Directory "/var/ftp/開發部"> <Limit CWD MKD RNFR READ WRITE STOR RETR> DenyAll </Limit> <Limit DELE> DenyAll </Limit> <Limit CWD MKD RNFR READ WRITE STOR RETR> AllowUser kaifa </Limit> </Directory> <Directory "/var/ftp/行政部"> <Limit CWD MKD RNFR READ WRITE STOR RETR> DenyAll </Limit> <Limit DELE> DenyAll </Limit> <Limit CWD MKD RNFR READ WRITE STOR RETR> AllowUser xingzheng </Limit> </Directory> <Directory "/var/ftp/銷售部"> <Limit CWD MKD RNFR READ WRITE STOR RETR> DenyAll </Limit> <Limit DELE> DenyAll </Limit> <Limit CWD MKD RNFR READ WRITE STOR RETR> AllowUser xiaoshou </Limit> </Directory> 6)用ftpasswd命令創建虛擬帳號(下面命令也能夠直接用於修改用戶密碼) ftpasswd命令格式說明 (該命令能夠建立用戶文件、組文件,默認建立的用戶文件爲ftpd.passwd): --passwd 建立密碼文件,即AuthUserFile指定的文件 --group 建立組文件 --name 指定建立的用戶名 --uid 指定用戶虛擬UID --gid 指定虛擬GID --home 指定用戶家目錄 --shell 指定用戶Shell --file 指定建立的文件名 [root@localhost ~]# ftpasswd --passwd --file=/usr/local/proftpd/ftpd.passwd --name=yunwei --uid=1000 --home=/home/nohome --shell=/bin/false ftpasswd: using alternate file: /usr/local/proftpd/ftpd.passwd ftpasswd: --passwd: missing --gid argument: default gid set to uid ftpasswd: creating passwd entry for user yunwei ftpasswd: /bin/false is not among the valid system shells. Use of ftpasswd: "RequireValidShell off" may be required, and the PAM ftpasswd: module configuration may need to be adjusted. Password: Re-type password: ftpasswd: entry created 用戶認證文件建立後的權限是440 [root@localhost ~]# ll /usr/local/proftpd/ftpd.passwd -r--r-----. 1 root root 77 Jul 12 10:59 /usr/local/proftpd/ftpd.passwd [root@localhost ~]# cat /usr/local/proftpd/ftpd.passwd yunwei:$1$UEKjLwfY$FXV4SHlLeAOGEc2wrZa.M/:1000:1000::/home/nohome:/bin/false 7)啓動FTP服務 檢查配置文件是否正常 [root@localhost ~]# /usr/local/proftpd/sbin/proftpd -t6 Checking syntax of configuration file Syntax check complete. [root@localhost ~]# /usr/local/proftpd/sbin/proftpd [root@localhost ~]# ps -ef|grep proftpd proftp 13438 1 0 11:01 ? 00:00:00 proftpd: (accepting connections) root 13440 13349 0 11:01 pts/2 00:00:00 grep --color=auto proftpd [root@localhost ~]# lsof -i:21 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME proftpd 13438 proftp 0u IPv4 2066796 0t0 TCP *:ftp (LISTEN) 這裏僅以用戶爲實驗環境,還能夠實現組功能,這裏就不作過多介紹了! ===================================================================================== 若是配置組功能,則建立虛擬帳號組的命令以下 # ftpasswd --group --file=/usr/local/proftpd/ftpd.group --name=admin --gid=99 # ftpasswd --group --name=admin --gid=99 --member=ftpadmin ===================================================================================== 8)ProFtpd啓動腳本 [root@localhost ~]# mkdir /usr/local/proftpd/etc [root@localhost ~]# ln -s /etc/proftpd.conf /usr/local/proftpd/etc/ [root@localhost ~]# ll /usr/local/proftpd/etc/ total 0 lrwxrwxrwx. 1 root root 17 Jul 12 11:21 proftpd.conf -> /etc/proftpd.conf [root@localhost ~]# cat /etc/rc.d/init.d/proftpd #!/bin/bash # # chkconfig: 2345 85 15 # description: ProFTPd is an FTP server # processname: proftpd # Author: jingyihome # E-mail: webmaster@zhanghaijun.com # Website: https://www.zhanghaijun.com # ProFTPd Settings PROFTPD="/usr/local/proftpd/sbin/proftpd" PROCONF="/usr/local/proftpd/etc/proftpd.conf" PROPID="/usr/local/proftpd/var/proftpd.pid" RETVAL=0 prog="ProFTPd" start() { echo -n $"Starting $prog... " $PROFTPD -c $PROCONF if [ "$?" = 0 ] ; then echo " done" else echo " failed" fi } stop() { echo -n $"Stopping $prog... " if [ ! -e $PROPID ]; then echo -n $"$prog is not running." exit 1 fi kill `cat $PROPID` if [ "$?" = 0 ] ; then echo " done" else echo " failed" fi } restart(){ echo $"Restarting $prog..." $0 stop sleep 2 $0 start } status(){ if [ -e $PROPID ]; then echo $"$prog is running." else echo $"$prog is not running." fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" esac 授予執行權限 [root@localhost ~]# chmod 755 /etc/rc.d/init.d/proftpd [root@localhost ~]# ll /etc/rc.d/init.d/proftpd -rwxr-xr-x. 1 root root 1370 Jul 12 11:20 /etc/rc.d/init.d/proftpd [root@localhost ~]# ll /etc/init.d/proftpd -rwxr-xr-x. 1 root root 1370 Jul 12 11:20 /etc/init.d/proftpd 測試proftpd腳本啓停 [root@localhost ~]# /etc/init.d/proftpd stop Stopping ProFTPd... done [root@localhost ~]# lsof -i:21 [root@localhost ~]# [root@localhost ~]# /etc/init.d/proftpd start Starting ProFTPd... done [root@localhost ~]# lsof -i:21 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME proftpd 13503 proftp 0u IPv4 2066913 0t0 TCP *:ftp (LISTEN) 9)若是鏈接FTP時速度慢,能夠在proftpd配置文件proftpd.conf中加入如下內容: # Slow logins # This is probably caused by a firewall or DNS timeout. By default ProFTPD will try to do both DNS and ident lookups against the # incoming connection. If these are blocked or excessively delayed a slower than normal login will result. To turn off DNS and ident # use: UseReverseDNS off IdentLookups off