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
[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
[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 ~]# 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
}
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
[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>
# 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
SetEnv TZ :/etc/localtime
TimesGMT off
# 指定站台系統 Log 位置
SystemLog /var/log/proftpd/proftpd.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
# 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 "連線數超過上限!"
MaxClientsPerHost 5 "一台主機最多只允許 5 個登入!"
MaxHostsPerUser 2 "一個帳號最多允許 2 個登入!"
MaxClients 5 "連線數超過上限!"
# 限制upload目錄不給砍檔和更名,但是ftpadmin群組可以擁有最大權限
<Directory /home/ftp/upload>
<Limit RNFR RNTO RMD DELE>
AllowGroup ftpadmin
DenyAll
</Limit>
</Directory>
<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>
<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>
<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>
<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
[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
[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 ~]# 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 ~]# 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 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
[root@centos ~]# chmod 770 /home/ftp/upload
讓使用者帳號只能做ftp登入,在 /etc/passwd 中,將使用者的 /bin/bash 改成 /sbin/nologin 即可!(紅色字部份)
[root@centos ~]# vi /etc/passwd
[root@centos ~]# vi /etc/passwd
marcus:x:500:501::/home/marcus:/sbin/nologin
wisdom:x:501:501::/home/wisdom:/sbin/nologin
wisdom:x:501:501::/home/wisdom:/sbin/nologin
update:x:503:504::/home/ftp/update:/sbin/nologin
依需求修改家目錄的位置(紅色字部份)
[root@centos ~]# vi /etc/passwd
[root@centos ~]# vi /etc/passwd
marcus:x:500:501::/home/ftp:/sbin/nologin
wisdom:x:501:501::/home/ftp/wisdom:/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:是否允許登陸的權限
以下是各參數及其修改方式:
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
AllowUser 針對某個用戶允許的Limit
DenyUser 針對某個用戶禁止的Limit
AllowGroup 針對某個用戶組允許的Limit
DenyGroup 針對某個用戶組禁止的Limit
AllowAll 針對所有用戶組允許的Limit
DenyAll 針對所有用戶禁止的Limit
重新啟動 xinetd
[root@centos ~]# /etc/rc.d/init.d/xinetd restart
[root@centos ~]# /etc/rc.d/init.d/xinetd restart
設定開機啟動xinetd
[root@centos ~]# chkconfig xinetd on
[root@centos ~]# chkconfig xinetd on
察看目前在線上的使用者
[root@centos ~]# ftpwho
[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
[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
[root@centos ~]# repquota -auvs
如果有開防火牆的話,請在proftpd.conf加入下列這行
[root@linux /]# vi /usr/local/etc/proftpd.conf
PassivePorts 60000 61000
[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
[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
[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通訊協定,用來判斷此連線的使用者名稱。)
全站熱搜
留言列表