Related Posts Plugin for WordPress, Blogger...

2012年8月16日

Pure-ftpd在Ubuntu 12.04中 安裝設定

Pure-ftpd在Ubuntu 12.04中 安裝設定

#安裝
sudo apt-get install pure-ftpd

#先變為 root
sudo -i 

#建立ftp的用戶與組
# 因為要創建虛擬用戶,所以不給ftpuser在系統中留home目錄,同時也不能讓它登陸shell。
# -s /bin/false 是指定不能以shell方式登陆
# -d /dev/null 是指定家目录(为null就为空)

groupadd ftpgroup 
useradd ftpuser -g ftpgroup -s /bin/false -d /dev/null 
#接下來輸入用戶密碼 

#產生密碼檔:
pure-pw mkdb
#下面指令很重要,告訴系統如何驗證用戶。沒設定會出現530 Login authentication failed
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/60puredb
新增使用者 meya
sudo pure-pw useradd meya -u ftpuser -g ftpgroup -d /var/www/story -m
修改 meya 的密碼:
sudo pure-pw passwd meya -m
刪除 meya 帳號:
pure-pw userdel meya -m
修改 meya的home目錄
pure-pw usermod meya -d /var/www/story -m
# 執行完虛擬用户的操作後要執行下列指令,這樣操作才會生效
# -m 參數會幫我們自動更新資料庫,因此使用了這個參數後,即不必再執行 "pure-pw mkdb" 了
pure-pw mkdb 


#重啟ftp服務器
/etc/init.d/pure-ftpd restart


當FTP Server 位於NAT內部,就需要設定PassivePortRange 參數,再根據此參數去設定防火牆


How to set the PassivePortRange in pure-ftpd on Debian and Ubuntu Linux
If you run a firewall on your Linux server and want to use passive FTP connections, you have to define the passive port range in pure-ftpd and your firewall to ensure that the connections dont get blocked. The following example is for pure-ftpd on Debian or Ubuntu Linux and ISPConfig 3:
1) Configure pure-ftpd
echo "40110 40210″ > /etc/pure-ftpd/conf/PassivePortRange
/etc/init.d/pure-ftpd-mysql restart
2) Configure the firewall. If you use ISPConfig 3 on my server to configure the bastille firewall, you can add the nescessera port range in the ISPConfig firewall settings.
Change the list of Open TCP ports from:
20,21,22,25,53,80,110,143,443,3306,8080,10000
20,21,22,25,53,80,110,143,443,3306,8080,10000,40110:40210
and then click on "Save".



pure-ftpd在Debian下默認是由inetd託管改為standalone
修改 /etc/default/pure-ftpd-common
將"STANDALONE_OR_INETD=inetd"替換成"STANDALONE_OR_INETD=standalone"
修改/etc/inetd.conf
找到下面一行並註釋掉:
#ftp    stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
重新啟動pure-ftpd 
ftptest是虛擬用户,这个用户的ftpdir属主必须是ftpuser,否则会没有权限
虚拟用户生成的passwd文件在/etc/pure-ftpd/pureftpd.passwd
當啟用虛擬帳號的功能後,平常存在於 /etc/passwd 中的帳號還是可以正常登入 FTP,但若虛擬帳號設定成與一般登入帳號相同時,則是會以虛擬帳號為主的。

MinUID調整到一個很大的數字,比如說5000,如此一來所有小於5000的帳號都無法使用pure-ftpd,
一般帳號都由1000開始,因此要使用pure-ftpd的帳號,在 /etc/passwd 中將UID改為5000以上即可

參考網址
http://www.libertyvps.com/thread-19-1-1.html
http://hi.baidu.com/tonyty163/blog/item/fc975f026e103d7e3912bbd4.html
http://sysapp.51cto.com/art/200512/13180.htm
http://xuchengji.blog.51cto.com/160472/372181/
http://wiki.ubuntu.org.cn/index.php?title=Pure-ftpd%E6%9C%8D%E5%8A%A1%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE&variant=zh-tw
http://forum.ubuntu.org.cn/viewtopic.php?t=28052&highlight=pure-ftpd
http://paching.myweb.hinet.net/lesson18.htm
http://ceasarfree.blogspot.tw/2010_12_01_archive.html
http://xuchengji.blog.51cto.com/160472/372181/
http://www.libertyvps.com/thread-19-1-1.html


FTP 的連線流程


 在還沒開始介紹流程之前,要先來了解一下兩台電腦間 TCP 連線建立的過程:
  
 當 Client 向 Server 提出主動連線請求時,會送出連線過程的第一個 TCP 封包給對方,而此時 TCP 封包中的 SYN (同步旗標) 位元值設定為 1,代表的是一個連線的啟動 ﹔接著 Server 端也必須啟動自己的連線並做回應的確認,因此會向 Client 端送出連線過程的第二個封包,此時該封包的 SYN 及 ACK (回應確認旗標) 位元值皆設定為 1 ﹔最後在 Client 端收到對方的封包後,必須做回應確認的動作,因此會送出連線過程的第三個封包給 Server,此時封包的 ACK 位元值設定為 1。至此雙方的連線才正式建立起來,這就是所謂的 TCP Three-Way Handshake ( TCP 三段式交握 )。

 了解了 TCP 連線建立的觀念後,底下就來說明 FTP 連線的過程。不過在此之前,要先了解的是,FTP Client 能採取的連線模式有兩種,分別是主動模式 (Active mode) 及被動模式 (Passive mode),所以接著會以這兩種不同模式來敘述連線過程。
主動模式下的 FTP 連線
當 FTP Client 一開始要連上 FTP Server 時,會先隨機產生一個大於 1024 的 port ( 假設 3000 port ),來主動對 FTP Server 的 21 port 做連線,等完成了 TCP 三段式交握後,連線才正式建立起來,而這個 3000 port 與 21 port 所建立的連線通道,就叫做命令通道 (command channel )。之所以會稱其為命令通道,當然是只能執行一些基本指令而已囉。

現在若是 Client 端想要下載或上傳資料時,還要另外建立起一條資料通道 (data channel ) 來作為資料傳輸使用。由於 Client 是採取主動模式 (可以想像 Client 要求 Server 做主動連線,也就是 Server 主動連 Client ),因此本身會再開啟另一個大於 1024 的 port ( 假設 5000 port ),然後透過命令通道通知 Server 已準備好這個 data channel 的連接埠,接著 Server 就以 20 port 來主動與 Client 端的 5000 port 建立連線,就在完成了另一次的三段式交握後,此 data channel 便建立起來,至此 Client 方可開始做資料傳輸。
被動模式下的 FTP 連線
一開始 command channel 的建立,與上面所述相同,不再重複,這裡只針對 data channel 的建立做說明。由於此時 Client 是希望採取被動模式 (可以想像 Client 要求 Server 做被動連線,也就是 Client 主動連 Server),所以會先透過 command channel 來通知 Server 這個訊息,Sever 收到後就隨機開啟一個大於 1024 的 port (假設 8000 port),並經由 command channel 知會 Client 已準備好 data channel 的連接埠,接著 Client 也隨機開啟一個大於 1024 的 port (假設 9000 port) 來主動與 Server 建立連線,而完成的三段式交握後,此 8000 port 與 9000 port 之間的 data channel 便建立起來了。



18.2.2 設定 Pure-ftpd Server

 一般登入 FTP 最常見的兩種身分,一為匿名 (Anonymous) 登入,一為使用真實帳號 (Real User) 登入。

 如果以匿名使用者來說,其登入 FTP 時的預設根目錄位置,就是自己的家目錄,您可以觀察在 /etc/passwd 中 ftp (anonymous) 帳號的家目錄在哪,查到了嗎,沒錯,就是 /srv/ftp 啦。

 那 Real User 又如何呢 ? 由於 SuSE 預設是不允許使用真實帳號來登入系統的,因此就算您透過認證的方式來登入 FTP 也沒用,因為最後還是會變成以匿名身分來登入的 ﹔當然也可以藉由修改設定檔來讓 Real User 登入,不過記得還是要把 Real User 限定在根目錄 (預設為自己的家目錄)下活動噢,比如使用者 barry 連線進來後,他就只能對 /home/barry 做存取,而無法存取其他的目錄 。

 那為何要限制使用者所能存取的目錄呢 ? 理由很簡單,因為您不能保證 Real User 對其他目錄不會亂搞一通啊,當您取消了這個限制之後,就等於讓使用者可以自由存取系統上的任何目錄,這樣在無形之中,也會對系統安全構成一大威脅。

 有了以上的基本認知之後,接著就來設定 Pure-ftpd 了。
# Cage in every user in his home directory
ChrootEveryone    yes
# 限定每一個使用者都只能在自己家目錄下活動。當設定成 no 時,則 Real User 就能對# 其他的目錄做存取,不過還要搭配 "AnonymousOnly no" 來使用才行。

# If the previous option is set to "no", members of the following group
# won't be caged. Others will be.If you don't want chroot()ing anyone,
# just comment out ChrootEveryone and TrustedGID.

# TrustedGID     100
# 當您將註解拿掉後,GID 100 的群組成員,會被視為信任的使用者,因此可以存取家目錄
# 以外的其他目錄。此時無論 ChrootEveryone 設定為何,都是一樣的結果。


# Maximum number of simultaneous users
MaxClientsNumber   10
# 限定最大連線數為 10。

# Maximum number of sim clients with the same IP address
MaxClientsPerIP     3
# 限定同一來源端位址的最大連線數為 3。

# List dot-files even when the client doesn't send "-a".
DisplayDotFiles     yes
# 這個參數設定成 yes 時,則 Client 可以看到檔名是以 "." 作開始的隱藏檔。

# Don't allow authenticated users - have a public anonymous FTP only.
AnonymousOnly    yes
# 是否只允許匿名登入。當您希望 Real User 也能登入時,就設定成 no。

# Disallow anonymous connections. Only allow authenticated users.
NoAnonymous     no
# 是否不允許匿名登入。當設定成 no,表示允許匿名登入,但如果希望只有 # Real User 能經由認證登入時,這裡就設定成 yes 吧。

# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# The default facility is "ftp". "none" disables logging.

SyslogFacility     ftp
# 您可以在 /etc/syslog.conf 裡使用 ftp 這個 facility,來告知 syslogd 要將 ftp 的
 
# 相關訊息紀錄到哪裡


# Don't resolve host names in log files. Logs are less verbose, but it
# uses less bandwidth. Set this to "yes" on very busy servers or

# if you don't have a working DNS.
DontResolve      yes
# 紀錄檔內容是否不需解析來源端 ip 所對應的主機名稱。

# Maximum idle time in minutes (default = 15 minutes)
MaxIdleTime      15
# 設定 FTP Client 端的閒置時間為 15 分鐘。

# PureDB user database (see README.Virtual-Users)
# PureDB   /etc/pure-ftpd/pureftpd.pdb
# 這是使用虛擬帳號登入時,所依據的認證資料庫。


# If you want to enable PAM authentication, uncomment the following line.
PAMAuthentication    yes
# 是否使用 PAM 認證模組,來對使用者作認證。

# If you want simple Unix (/etc/passwd) authentication, uncomment this.
# UnixAuthentication  yes
# 是否依照 UNIX 傳統的 /etc/passwd 來做認證。
# Are anonymous users allowed to create new directories ?
AnonymousCanCreateDirs  no
# 是否允許 anonymous 建立目錄。

# Port range for passive connections replies. - for firewalling.
# PassivePortRange 30000 50000
# 當 Client 端採用被動模式來建立資料通道時,FTP Server 預計所要使用 data channel # 連接埠的範圍。

# Upload/download ratio for anonymous users.
# AnonymousRatio   1 10
# 設定 anonymous 上傳/下載比率。# 如以 1:10 而言,當 anonymous 上傳了 1MB 的資料後,就能夠下載 10MB 的資料。
# Upload/download ratio for all users. This directive superscedes
# the previous one.
# UserRatio      1 10
# 設定 All User 上傳/下載比率。當 AnonymousRatio 及 UserRatio 都做設定時,# 是以 UserRatio 為主。

# Disallow downloading of files owned by "ftp", ie.
# files that were uploaded but not validated by a local admin.

AntiWarez       yes
# 匿名使用者要下載檔案時,如檔案擁有者是 ftp 的話,則不允許被下載。# 當 FTP 站台開放 anonymous 上傳時 (上傳之後的檔案擁有者為 ftp),為了防止有些人
# 可能會上傳一些有問題的檔案來供人下載,所以才會使用這個參數來做控管 ; 而在管理者# 確認上傳的檔案沒問題後,就可以把此檔的擁有者做個改變,這樣就能提供正常下載了,
# 當然相關權限還是要設定好就是了。


# IP address/port to listen to (default=all IP and port 21).
# Bind       127.0.0.1,21
# 設定 FTP Server 要在哪個介面位址監聽哪個 port。預設是允許在所有介面位址監聽 21 port。

# Maximum bandwidth for anonymous users in KB/s
# AnonymousBandwidth 8
# 設定 anonymous 最大上傳、下載頻寬,單位為KB/s。

# Maximum bandwidth for *all* users (including anonymous) in KB/s.
# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.

# UserBandwidth    8
# 設定 All User 最大上傳、下載頻寬。當 AnonymousBandwidth 及 UserBandwidth # 都做設定時,是以 UserBandwidth 為主。

# File creation mask. <umask for files>:<umask for dirs> .
# 177:077 if you feel paranoid.

Umask        177:077
# 設定使用者所上傳檔案、目錄 (含建立新目錄) 的預設權限。# 177:077 表示檔案的預設權限為 600,目錄為 700。


# Minimum UID for an authenticated user to log in.
MinUID        40
# 設定能允許 Real User 認證登入的最小 UID 為 40,也就是說 UID 40 以上 (含40) # 的使用者方可認證登入。
# 如果您想要允許 root 登入的話,那這個地方請先註解起來,並且在 /etc/ftpusers 檔案# ,將 root 帳號移除。/etc/ftpusers 是用來設定拒絕登入 FTP 的使用者名單。


# Users can't delete/write files beginning with a dot ('.')
# even if they own them. If TrustedGID is enabled, this group
# will have access to dot-files, though.

ProhibitDotFilesWrite   yes
# 是否要禁止使用者刪除或修改隱藏檔,即使使用者就是該隱藏檔的擁有者。# 設定 yes 就表示要禁止啦。

# Prohibit *reading* of files beginning with a dot (.history, .ssh...)
ProhibitDotFilesRead  no
# 是否要禁止使用者讀取隱藏檔內容。


# Never overwrite files. When a file whoose name already exist is uploaded,
# it get automatically renamed to file.1, file.2, file.3, ...

AutoRename       yes
# 是否開啟自動更名的功能。當設定成 yes ,表示上傳檔案時,若對方目錄內已經存在# 一個同檔名的檔案,則會將上傳的那個檔案,作自動更名的動作。

# Disallow anonymous users to upload new files (no = upload is allowed)
AnonymousCantUpload yes
# 是否要拒絕 anonymous 上傳。如要開放匿名使用者上傳檔案的話,就設定成 no。# 另外要允許上傳目錄時,除了這裡要設定成 no 以外,AnonymousCanCreateDirs 參數# 需設定成 yes 才行。

# Disallow the CHMOD command. Users can't change perms of their files.
# NoChmod       yes
# 是否要拒絕使用者執行 chmod 指令來修改權限。

# Allow users to resume and upload files, but *NOT* to delete them.
# KeepAllFiles     yes
# 當設定成 yes 時,表示使用者無法刪除伺服器上的檔案

# Automatically create home directories if they are missing
# CreateHomeDir    yes
# 當使用者家目錄不存在時,是否要自動建立起來。

# This option is useful with servers where anonymous upload is
# allowed. As /var/ftp is in /var, it save some space and protect
# the log files. When the partition is more that X percent full,
# new uploads are disallowed.

MaxDiskUsage     99
# 假使我們將 anonymous 的家目錄改成 /var/ftp (修改 /etc/passwd ),然後又設定允許# 匿名使用者上傳,那這個參數就很好用了,因為當 /var partition 的使用空間達 99% 時,# 就不允許匿名使用者再上傳資料,不然 /var/log 目錄下的那些記錄檔可就無法持續# 記錄一些重要資訊了。

# Set to 'yes' if you don't want your users to rename files.
NoRename        yes
# 是否要拒絕使用者對檔案重新命名。 
 
設定虛擬帳號
(Virtual User)


 您可以為 pure-ftpd 的用戶端建立虛擬帳號,這個帳號有別於一般使用者登入系統的帳號。而設立虛擬帳號的好處是,除了可與一般帳號做個區隔外,還可以針對每個虛擬帳號設定其個別的上下載頻寬、可使用檔案數、使用空間大小、限制連線時間及來源端控管等等,有意思吧。

 接著就開始來設定虛擬帳號,請參考以下的步驟。

步驟一:設定 pure-ftpd.conf
suse:~ # vi /etc/pure-ftpd/pure-ftpd.conf
# 找到以下兩個參數,並確定前面的註解符號有拿掉。
PureDB     /etc/pure-ftpd/pureftpd.pdb
CreateHomeDir      yes

# 重新啟動 pure-ftpd 服務:
suse:~ # rcpure-ftpd restart

步驟二:建立虛擬帳號所共用的 ftp 專屬帳號
# 先新增專屬帳號的主要群組:
suse:~ # groupadd virtualgrp

# 建立 ftp 專屬帳號:
suse:~ # useradd -g virtualgrp -m virtualuser

步驟三:使用 pure-pw 指令來建立虛擬帳號
suse:~ # pure-pw useradd tina -u virtualuser -d /home/virtualuser/tina
Password:
Enter it again:
#
一開始先新增一個 tina 的虛擬帳號,並指定其家目錄位置。新增完畢後,您應可以
#
/etc/pure-ftpd/ 目錄下找到一個叫 pureftpd.passwd 的檔案,而這個檔案就類似於
#
/etc/passwd 啦,只不過它是屬於虛擬帳號的 password file。

suse:~ # pure-pw mkdb
#
依據 pureftpd.passwd 來建立認證資料庫 /etc/pure-ftpd/pureftpd.pdb。
# 將來要是 pureftpd.passwd 有異動,須執行 "pure-pw mkdb",以更新資料庫內容。

# 其實您在建立虛擬帳號的同時,就可以使用 -m 參數來把 pureftpd.pdb 給順便建立起來:
suse:~ # pure-pw useradd tina -u virtualuser -d /home/virtualuser/tina -m
#
-m 參數會幫我們自動更新資料庫,因此使用了這個參數後,即不必再執行 "pure-pw mkdb" 了。

 設定完成後,趕快用 tina 這個虛擬帳號來登入看看。如果沒問題的話,再來看 pure-pw 指令的其他用法:
suse:~ # pure-pw usermod tina -t 100 -T 50 -q 1 -Q 10 -n 30 -N 2 \
> -z 1400-2230 -r 192.168.5.0/24,192.168.1.0/24 -m
#
參數說明:
# -t、-T:設定下載及上傳頻寬。
# -q、-Q:設定上傳/下載比率。
# -n:限定可使用的檔案數
# -N:限制可使用的空間大小(MB)。
# -z:限定連線時間。
# -r:允許存取的來源端。

# 檢驗一下設定後的結果:
suse:~ # pure-pw show tina
Login       : tina
Password      : $2a$07$m72FgmY91h39TISEorGy3sotL5ufknZ2O
UID        : 1010 (virtualuser)
GID        : 2001 (virtualgrp)
Directory     : /home/virtualuser/tina/./
Full name     :
Download bandwidth : 100 Kb (enabled)
Upload bandwidth  : 50 Kb (enabled)
Max files     : 30 (enabled)
Max size      : 2 Mb (enabled)
Ratio       : 1:10 (enabled:enabled)
Allowed client IPs : 192.168.5.0/24,192.168.1.0/24
Time restrictions : 1400-2230 (enabled)

# 修改 tina 的密碼:
suse:~ # pure-pw passwd tina -m
Password:
Enter it again:

# 刪除 tina 帳號:
suse:~ # pure-pw userdel tina -m


0 意見: