Pure-ftpd在Ubuntu 12.04中 安裝設定
#安裝
sudo apt-get install pure-ftpd
#先變為 root
sudo -i
sudo -i
#建立ftp的用戶與組
# 因為要創建虛擬用戶,所以不給ftpuser在系統中留home目錄,同時也不能讓它登陸shell。
# -s /bin/false 是指定不能以shell方式登陆
# -d /dev/null 是指定家目录(为null就为空)
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
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
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
修改/etc/inetd.conf
找到下面一行並註釋掉:
#ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
重新啟動pure-ftpd
#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,但若虛擬帳號設定成與一般登入帳號相同時,則是會以虛擬帳號為主的。
參考網址
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
虚拟用户生成的passwd文件在/etc/pure-ftpd/pureftpd.passwd
當啟用虛擬帳號的功能後,平常存在於 /etc/passwd 中的帳號還是可以正常登入 FTP,但若虛擬帳號設定成與一般登入帳號相同時,則是會以虛擬帳號為主的。
MinUID調整到一個很大的數字,比如說5000,如此一來所有小於5000的帳號都無法使用pure-ftpd,
一般帳號都由1000開始,因此要使用pure-ftpd的帳號,在 /etc/passwd 中將UID改為5000以上即可
一般帳號都由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),所以接著會以這兩種不同模式來敘述連線過程。
了解了 TCP 連線建立的觀念後,底下就來說明 FTP 連線的過程。不過在此之前,要先了解的是,FTP Client 能採取的連線模式有兩種,分別是主動模式 (Active mode) 及被動模式 (Passive mode),所以接著會以這兩種不同模式來敘述連線過程。
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 意見:
張貼留言