close

雖然之前是安裝vsftpd但是用到後來發現在許多不便的地方

後有發現資深的mis都是使用proftp

因此就上網查了一下他的裝法、主要是參考熊的急救站-安裝proftp

先安裝好gcc、gcc-c++、make、xinetd
[root@centos ~]# yum -y install gcc
[root@centos ~]# yum -y install gcc-c++
[root@centos ~]# yum -y install make
[root@centos ~]# yum -y install xinetd
 
下載 proftpd:
proftpd-1.3.2c.tar.gz
http://www.proftpd.org/
 
安裝proftpd
[root@centos ~]# tar -zxvf proftpd-1.3.2c.tar.gz
[root@centos ~]# cd proftpd-1.3.2c
[root@centos proftpd-1.3.2c]# ./configure --enable-shadow
[root@centos proftpd-1.3.2c]# make
[root@centos proftpd-1.3.2c]# make install
 
備份設定檔
[root@centos proftpd-1.3.2c]# cp /usr/local/etc/proftpd.conf /usr/local/etc/proftpd.bak

啟動ProFTP
ProFTP啟動方式有兩種,一種是standalone,另一種則為inetd,若此Server為專門之FTP則建議採用Standalone方式啟動,若還有其他服務則建議採inetd啟動其效能較佳。以下為inetd方式作為範例:
在 /etc/xinetd.d/ 下建立 proftpd 檔,內容為 :
[root@centos proftpd-1.3.2c]# vi /etc/xinetd.d/proftpd
Service ftp
        {
        disable     = no
        socket_type = stream
        wait        = no
        user        = root
        server      = /usr/local/sbin/proftpd
        }
要先建立一個proftpd的資料夾
[root@centos ~]# mkdir /var/log/proftpd
 
設定proftpd.conf
[root@centos ~]# vi /usr/local/etc/proftpd.conf
ServerName "Marcus FTP Server"
ServerType inetd
Group nobody
Defaultroot ~ !ftpadmin
# ftpadmin是群組,在這群組內的使用者都可以離開家目錄,”~ ”和” ! ”中間要有空格。
沒有” ! ”代表該群組內的使用者都不能離開家目錄。
 
不允許匿名登入(以下部份make掉)
# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.

#<Anonymous ~ftp>
#  User                         ftp
#  Group                                ftp
#
#  # We want clients to be able to login with "anonymous" as well as "ftp"
#  UserAlias                    anonymous ftp
#
#  # Limit the maximum number of anonymous logins
#  MaxClients                   10
#
#  # We want 'welcome.msg' displayed at login, and '.message' displayed
#  # in each newly chdired directory.
#  DisplayLogin                 welcome.msg
#  DisplayChdir                 .message
#
#  # Limit WRITE everywhere in the anonymous chroot
#  <Limit WRITE>
#    DenyAll
#  </Limit>
#</Anonymous>
 
# 使用本地時間
  SetEnv TZ :/etc/localtime
  TimesGMT off
 
# 指定站台系統 Log 位置
  SystemLog   /var/log/proftpd/proftpd.log
 
# 自己定義 Log 格式,紀錄登入 (login.log) 和傳檔 (transfer.log) 的細節
# TransferLog /var/log/proftpd/xferlog

  LogFormat myxfer "%{%Y/%m/%d %H:%M:%S}t [%u] \"%m %f\" (%bB/%TS)"
  LogFormat myauth  "%{%Y/%m/%d %H:%M:%S}t [%u] \"%r\": %S (%a)"
  ExtendedLog /var/log/proftpd/login.log auth myauth
  ExtendedLog /var/log/proftpd/transfer.log read,write myxfer
 
# 同主機只允許 5 個登入、同帳號只允許 2 個登入、最多只允許 5 個連線
  MaxClientsPerHost 5 "一台主機最多只允許 5 個登入!"
  MaxHostsPerUser 2 "一個帳號最多允許 2 個登入!"
  MaxClients 5 "連線數超過上限!"
 
# 限制upload目錄不給砍檔和更名,但是ftpadmin群組可以擁有最大權限
<Directory /home/ftp/upload>
  <Limit RNFR RNTO RMD DELE>
    AllowGroup ftpadmin
    DenyAll
  </Limit>
</Directory>
 
#限制marcus目錄只給marcus使用者進入
<Directory /home/ftp/marcus>
  <Limit All>
    AllowUser marcus
  </Limit>
</Directory>
 
# 限制wisdom目錄只給wisdom使用者和ftpadmin群組進入
<Directory /home/ftp/wisdom>
  <Limit All>
    AllowGroup ftpadmin 
    AllowUser wisdom
    DenyAll
  </Limit>
</Directory>
 
# 限制upload目錄只能上傳,不能改檔名和刪除,但ftpadmin群組擁有最大權限
<Directory /home/ftp/upload>
  <Limit WRITE>
    AllowAll
  </Limit>
  <Limit DELE RMD RNFR>
    DenyAll
    AllowGroup ftpadmin
  </Limit>
</Directory>

 

在home底下建立一個755的ftp資料夾
[root@linuxftp /]# mkdir -m 755 /home/ftp
 
建立ftpadmin、ftpuser群組
[root@centos ~]# groupadd ftpadmin
[root@centos ~]# groupadd ftpuser
 
建立marcus使用者,加入到ftpadmin群組
[root@centos ~]# adduser marcus
[root@centos ~]# passwd macus
[root@centos ~]# gpasswd -a marcus ftpadmin
建立wisdom和upload使用者,加入到ftpuser群組
[root@centos ~]# adduser wisdom
[root@centos ~]# passwd wisdom
[root@centos ~]# gpasswd -a wisdom ftpuser
[root@centos ~]# adduser upload
[root@centos ~]# passwd upload
[root@centos ~]# gpasswd -a upload ftpuser
※如果有其他一般使用者就加到ftpuser群組內
建立相關的資料夾權限
[root@centos ~]# mkdir /home/ftp/marcus
[root@centos ~]# chown marcus:root /home/ftp/marcus
[root@centos ~]# chmod 700 /home/ftp/marcus
[root@centos ~]# mkdir /home/ftp/wisdom
[root@centos ~]# chown wisdom:ftpadmin /home/ftp/wisdom
[root@centos ~]# chmod 770 /home/ftp/wisdom
[root@centos ~]# chown upload:ftpadmin /home/ftp/upload
[root@centos ~]# chmod 770 /home/ftp/upload
 
 
讓使用者帳號只能做ftp登入,在 /etc/passwd 中,將使用者的 /bin/bash 改成 /sbin/nologin 即可!(紅色字部份)
[root@centos ~]# vi /etc/passwd
marcus:x:500:501::/home/marcus:/sbin/nologin
wisdom:x:501:501::/home/wisdom:/sbin/nologin
update:x:503:504::/home/ftp/update:/sbin/nologin
 
依需求修改家目錄的位置(紅色字部份)
[root@centos ~]# vi /etc/passwd
marcus:x:500:501::/home/ftp:/sbin/nologin
wisdom:x:501:501::/home/ftp/wisdom:/sbin/nologin
update:x:503:504::/home/ftp/upload:/sbin/nologin
 
proftp還有其他更細微的權限設定。
以下是各參數及其修改方式:
CMD:Change Working Directory 改變目錄
MKD:MaKe Directory建立目錄的權限
RNFR: ReName FRom 更改目錄名的權限
DELE:DELEte 刪除文件的權限
RMD:ReMove Directory 刪除目錄的權限
RETR:RETRieve 從服務端下載到客戶端的權限
STOR:STORe 從客戶端上傳到服務端的權限
READ:可讀的權限,不包括列目錄的權限,相當於RETR,STAT等
WRITE:寫文件或者目錄的權限,包括MKD和RMD
DIRS:是否允許列目錄,相當於LIST,NLST等權限,還是比較實用的
ALL:所有權限
LOGIN:是否允許登陸的權限
 
針對上面這個Limit所應用的對象,又包括以下範圍
AllowUser       針對某個用戶允許的Limit
DenyUser        針對某個用戶禁止的Limit
AllowGroup    針對某個用戶組允許的Limit
DenyGroup     針對某個用戶組禁止的Limit
AllowAll          針對所有用戶組允許的Limit
DenyAll           針對所有用戶禁止的Limit
 
重新啟動 xinetd
[root@centos ~]# /etc/rc.d/init.d/xinetd restart
 
設定開機啟動xinetd
[root@centos ~]# chkconfig xinetd on
 
察看目前在線上的使用者
[root@centos ~]# ftpwho
 
有其他需要新增使用者的步驟(一般權限使用者)
[root@centos ~]# adduser 使用者
[root@centos ~]# passwd 使用者
[root@centos ~]# gpasswd -a 使用者 ftpuser
[root@centos ~]# mkdir /home/ftp/使用者
[root@centos ~]# chmod 750 /home/ftp/使用者
[root@centos ~]# chown 使用者:ftpuser /home/ftp/使用者
在 /etc/passwd 中,將使用者的 /bin/bash 改成 /sbin/nologin
請參考設定quota
[root@centos ~]# edquota -p test -u 使用者
[root@centos ~]# repquota -auvs
 
如果有開防火牆的話,請在proftpd.conf加入下列這行
[root@linux /]# vi /usr/local/etc/proftpd.conf
PassivePorts            60000   61000
 
編輯iptables並加入這幾行
[root@linux /]# vi /etc/sysconfig/iptables
-A INPUT -p tcp --dport 60000:61000 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport    20 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport    21 -j ACCEPT
 
檢查port 21是否有LISTEN
[root@linux /]# netstat -na | grep :21
tcp      0    0 0.0.0.0:21             0.0.0.0:*          LISTEN

ProFTPD作為主機的FTP Server,不過經常覺得ProFTPD登入的速度很慢,在Google上找了一下發現原來很多人都有ProFTPD登入過慢的問題。
會造成登入速度非常慢的原因是ProFTPD預設在登入的時候會作「反查」的動作,也因此如果user用來登入的機器沒有在DNS上登記Domain就會造成連線非常緩慢(無法找到對應的Domain name record.)
解決方法
修改proftpd.conf,加入下列兩行
UseReverseDNS off
IdentLookups off

這兩個設定分別的意義如下:
UseReverseDNS:在使用者登入時反查對方的DNS記錄。
IdentLookups:在使用者登入時反查對方的Username。(RFC1413:ident通訊協定,用來判斷此連線的使用者名稱。)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 result945 的頭像
    result945

    隨風而行

    result945 發表在 痞客邦 留言(0) 人氣()