CentOS下Proftpd環境部署並使用虛擬用戶登陸 - 運維筆記

 

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

相關文章
相關標籤/搜索