關於ftp的選擇:vsftpd 和proftpd

他們之間的比較

vsftpdhtml

  1. vsftp中文支持很弱
  2. 支持多個用戶使用同一個目錄
  3. 支持虛擬用戶
  4. 穩定,起碼比proftpd穩定點

proftpdlinux

  1. 中文支持很好
  2. 不支持多個用戶使用同一個目錄,看配置能夠看出來
  3. 支持虛擬用戶
  4. 不太穩定,偶爾會掛掉,不過用自動重啓腳本也能勉強繼續用下去,畢竟ftp要求不高(緣由不明)

須要實現需求:

  1. 個別文件須要所有用戶均可以看到,不能編輯
  2. 個別文件只能局部用戶能夠看到和編輯
  3. 須要方便管理

根據需求進行權限設計

目錄 /app/ftpdata /app/ftpdata/public_team /app/ftpdata/public_all
用戶 a用戶(管理員) b用戶(某些能夠看的人) c用戶(所有人)
權限 r/w r/w r

採用樹結構來控制權限實現不一樣級別管理不一樣目錄shell

目錄 /app/ftpdata 管理員admin(所有權限,可管理所有目錄)
/app/ftpdata/team 通常高級用戶team(當前文件夾和下層文件夾public內的上傳,下載,修改,刪除,可管理public目錄)
/app/ftpdata/team/public 大衆用戶public(當前文件夾內的上傳,下載,但不能夠修改和刪除)

若是用vsftpd的話

1.使用虛擬用戶,主配置文件修改以下:數據庫

vsftpd.confsession

local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vuserconfig
  1. local_umask用022的意義是這個配置的權限設計邏輯是用linux的文件權限777減去這個配置值獲得最終ftp用戶的可以使用權限,777-022就等於了755了,755權限表明用戶rwx,用戶所屬組權限rx,other用戶rx(讀、寫、運行三項權限能夠用數字表示,就是r=4,w=2,x=1,詳情參考鳥哥私房菜
  2. user_config_dir可使用我的定製的配置文件
  3. 其餘都是默認配置了,詳情man vsftpd。

2.配置虛擬帳戶app

編輯好一個存放用戶帳戶密碼信息的文件,在vsftpd的文件夾裏面,一行帳戶一行密碼less

cat vsftpd_virtualuser.txt

admin
XXXXX
team
XXXXX
public
XXXXX

安裝db4-utils軟件,而後將帳戶密碼文件寫入到vsftpdusr.db裏面tcp

yum install db4-utils
db_load -T -t hash -f vsftpd_virtualuser.txt /etc/vsftpd/vftpuser.db

配置對應不一樣帳戶的配置文件(三個用戶的配置文件)ui

cat vuserconfig/admin
guest_enable=yes
guest_username=ftp
local_root=/app/ftp_data
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES


cat vuserconfig/team
guest_enable=yes
guest_username=ftp
local_root=/app/ftp_data/team
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES


cat vuserconfig/public
guest_enable=yes
guest_username=ftp
local_root=/app/ftp_data/team/public
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_upload_enable=YES
  1. 主要是local_root,分別將不一樣的用戶鎖定在不停的目錄,而由於目錄是樹結構,因此能夠上層訪問下層
  2. guest_username是指使用一個實體用戶來虛擬出虛擬用戶,至關於將虛擬用戶與實體用戶作綁定,用戶使用的是虛擬帳戶,但其實系統最終調用的是實體用戶
  3. 其餘都是權限配置,參考官方文件便可。

3.配置vsftpd的pam驗證模塊使用spa

cat /etc/pam.d/vsftpd


#%PAM-1.0
#sessionoptional pam_keyinit.soforce revoke
#auth   required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth   required pam_shells.so
#auth   include password-auth
#accountinclude password-auth
#sessionrequired pam_loginuid.so
#sessioninclude password-auth
authrequired/lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required/lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
  1. 註釋掉原來的項,添加新的2項,這2項意思是使用單獨的db庫來作帳戶驗證,就是以前建立帳戶db文件

若是用proftpd的話

使用虛擬用戶

1.編輯(目錄自定義)/etc/proftpd.conf文件,修改成如下配置

1. ServerType是控制proftpd以什麼形式啓動,有兩種,standalone標準模式和xint模式,xint要使用xint控制,須要配置xint的啓動腳本,麻煩一點,其實區別不大。
2. 這裏的user是指proftpd運行的user,跟訪問目錄沒有關係,不過我這裏跟虛擬用戶相對應的實體帳號保持一致,不一致也不要緊。
3. AuthOrder和AuthUserFile是一塊兒使用的,由於這是配置虛擬帳戶驗證的必須物,改變驗證模塊使用,而且驗證數據庫指向某個文件
4. 主要關注3個`<directory>`和`<limit>`,前者負責控制範圍,後者負責控制權限,在權限裏面使用先alow後deny的順序,匹配第一條就不會匹配第二條,如此類推,而且limit裏支持ftp命令控制,MKD,READ等能夠寫在limit裏面,比通常的read和write要精細,詳細能夠參考[http://www.proftpd.org/docs/howto/Directory.html](http://www.proftpd.org/docs/howto/Directory.html)
命令 解釋
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 全部權限

2.建立虛擬帳戶

/app/proftp/bin/ftpasswd --passwd --file=/app/proftpd/ftpd.passwd --name=admin --uid=14 --home=/app/ftp_data/ --shell=/sbin/nologin

  /app/proftpd/bin/ftpasswd --passwd --file=/app/proftpd/ftpd.passwd --name=team --uid=14 --home=/app/ftp_data/team --shell=/sbin/nologin
  /app/proftpd/bin/ftpasswd --passwd --file=/app/proftpd/ftpd.passwd --name=public --uid=14 --home=/app/ftp_data/team/public --shell=/sbin/nologin
  1. 命令在proftpd安裝目錄,找不到的話就搜索。
  2. 這裏uid14 是由於我要映射的是ftp帳號,這個帳號的uid就是14
  3. 由於是虛擬帳號,因此不許登陸 nologin
  4. 由於須要有個登陸目錄,因此不一樣用戶使用各自的目錄

不管是vsftpd仍是proftpd,須要注意的是隻要是使用虛擬帳號的話,就要注意ftp文件目錄的權限是否可以被虛擬帳號所映射的實體用戶的權限對上,例如我是使用ftp這個實體用戶的話

ls -lh /app/ftp_data
總用量 8.0K
drwx------ 2 ftp ftp 4.0K 8月  27 15:04 ads
drwxr-xr-x 4 ftp ftp 4.0K 8月  28 11:46 team

須要有ftp可以訪問ftp_data這個目錄的權限。

謝謝。

原文:http://www.godblessyuan.com/2015/01/21/proftp_vsftp_use/

相關文章
相關標籤/搜索