CentOS release 6.9 (Final)源碼安裝vsftpd服務並且配置虛擬多用戶(有圖有真相)

一、安裝vsftpd(火狐瀏覽器或者谷歌瀏覽器查看最好)

#安裝vsftpd
yum -y install vsftpd
#設置開機啓動
chkconfig vsftpd on
#查看服務狀態
service vsftpd status
#默認是關閉的,如下
#vsftpd is stopped

二,修改系統保留FTP用戶信息

#創建指定訪問目錄
mkdir -p /www/wwwroot
#更換組ID
groupmod -g 1002 ftp
#更換默認用戶id
usermod -d /www/wwwroot/ -g ftp -s /sbin/nologin -u 1002 ftp
#更改權限
chown ftp:ftp /www/wwwroot
chmod -R 775 /www/wwwroot

三、修改配置文件

#備份原文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.txt
#生成新的配置文件
touch /etc/vsftpd/vsftpd.conf
#編輯配置文件
vim /etc/vsftpd/vsftpd.conf

粘貼配置選項進去

# Example config file /etc/vsftpd/vsftpd.conf
#
# 如果vsftpd處於獨立模式,則這是它將偵聽傳入FTP連接的端口。
listen_port=21
#
# 登入目錄
local_root=/www/wwwroot
#
# 是否允許匿名用戶登錄
anonymous_enable=NO
#
# 設定本地用戶可以訪問。注:如使用虛擬宿主用戶,在該項目設定爲NO的情況下所有虛擬用戶將無法訪問
local_enable=YES
#
# 設定允許進行寫操作(上傳、刪除),默認爲YES
write_enable=YES
#
# 使用本地時間,如果不設置的話默認時間是GMT格林時間,會慢8個小時
#use_localtime=YES
#
# 此參數在VSFTPD使用單獨(standalone)模式下有效。此參數定義了FTP服務器最大的併發連接數,當超過此連接數時,服務器拒絕客戶端連接。默認值:0(無限制)。
max_clients=5
#
# 此參數在VSFTPD使用單獨(standalone)模式下有效。此參數定義每個IP地址最大的併發連接數目。超過這個數目將會拒絕連接。此選項的設置將影響到象網際快車這類的多進程下載軟件。默認值爲0,表示不限制。
max_per_ip=3
#
# 掩飾碼
local_umask=022
#
# 是否允許匿名FTP用戶上傳文件。
#anon_upload_enable=YES
#
# 是否允許匿名FTP用戶能夠創建新目錄
#anon_mkdir_write_enable=YES
#
# 激活目錄消息 - 當遠程用戶進入某個目錄時發送的消息。
dirmessage_enable=YES
#
# 設置爲yes時,用戶上傳和下載文件都會被記錄下來,記錄文件位置與xferlog_file=/var/log/vsftpd/xferlog
xferlog_enable=YES
#
# 在vsftpd_log_file和xferlog_file文件之間切換登錄文件信息,NO 寫入 vsftpd_log_file, YES 寫入 xferlog_file
xferlog_std_format=YES
#
# 設置另外一個vsftpd的日記文件,也可以不設置
dual_log_enable=YES
xferlog_file=/var/log/vsftpd/xferlog
#
# 設置日誌目錄
vsftpd_log_file=/var/log/vsftpd/vsftpd.log
#
# 端口樣式連接始發的端口(只要名稱不正確的 connect_from_port_20 啓用),默認值:20
#connect_from_port_20=YES
#
# 是否修改匿名用戶所上傳文件的所有權。YES,匿名用戶所上傳的文件的所有權將改爲另外一個不同的用戶所有,用戶由chown_username參數指定。此選項默認值爲NO。 
#chown_uploads=YES
#
# 指定擁有匿名用戶上傳文件所有權的用戶
#chown_username=whoever
#
# 遠程客戶端建立與PASV樣式數據連接的連接的超時(以秒爲單位),默認值:60。
#accept_timeout=60
#
# 遠程客戶端響應我們的端口樣式數據連接的超時時間(秒)。默認值:60。
#connect_timeout=60
#
# 遠程客戶端可能在FTP命令之間花費的最長時間(以秒爲單位)。如果超時觸發,遠程客戶端將被啓動。默認值:300
#idle_session_timeout=300
#
# 超時時間(以秒爲單位),大概是允許數據傳輸停止而無進度的最大時間。如果超時觸發,遠程客戶端將被啓動。默認值:300
#data_connection_timeout=300
#
# 本地認證用戶允許的最大數據傳輸速率(以字節爲單位)。默認值:0(無限制)
#local_max_rate=0
#
# 建議您在系統上定義一個唯一的用戶,ftp服務器可以用作完全獨立且無特權的用戶。
#nopriv_user=ftpsecure
#
# 是否啓動異步傳輸功能
#async_abor_enable=YES
#
# 是否啓用ASCII功能
ascii_upload_enable=YES
ascii_download_enable=YES
#
# 自定義登錄顯示的字符串
#ftpd_banner=Welcome to blah FTP service.
#
# 指定某個純文本作爲用戶登錄時顯示的歡迎字眼,也可以放置一些讓用戶知道本FTP服務器的目錄架構
#banner_file=/etc/vsftpd/welcome.txt
#
# 您可以指定一個不允許的匿名電子郵件地址的文件。 顯然有助於打擊某些DoS攻擊。
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# 鎖定某些用戶在自家目錄中。即當這些用戶登錄後,不可以轉到系統的其他目錄,只能在自家目錄(及其子目錄)下。
#chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# 此選項默認值爲NO , 此時ftpusers 文件中的用戶禁止登錄FTP 服務器;若此項設爲YES ,則 user_list 文件中的用戶允許登錄 FTP 服務器,而如果同時設置了 userlist_deny=YES ,則 user_list 文件中的用戶將不允許登錄FTP 服務器,甚至連輸入密碼提示信息都沒有,直接被FTP服務器拒絕
#userlist_enable=YES
#
# 此項默認爲YES ,設置是否阻扯user_list 文件中的用戶登錄FTP 服務器,設置爲NO時只允許user_list 當中的用戶使用ftp,對於後新建的用戶起到屏蔽作用,如果想要使用ftp則必須加入這個列表文件中
#userlist_deny=NO
#
# 當啓用“listen”指令時,vsftpd以獨立模式運行,並在IPv4套接字上偵聽。 該指令不能與listen_ipv6指令一起使用。
listen=YES
#
# 此指令允許偵聽IPv6套接字。 要監聽IPv4和IPv6套接字,您必須運行兩個vsftpd副本和兩個配置文件。請確保其中一個listen選項被註釋!
#listen_ipv6=YES
#
# 設置 PAM 外掛模塊提供的認證服務所使用的配置文件名 ,即/etc/pam.d/vsftpd 文件
pam_service_name=vsftpd
#
# 是否開啓用虛擬用戶功能
guest_enable=YES
#
# 指定虛擬用戶的宿主用戶,CentOS中已經有內置的ftp用戶了
guest_username=ftp
#
# 匿名客戶端允許的最大數據傳輸速率(以字節爲單位)。默認值:0(無限制)
#anon_max_rate=0
#
# 爲匿名用戶設置文件創建的umask的值。注意!如果要指定八進制值,請記住“0”前綴,否則該值將被視爲基數10整數!默認值:077
#anon_umask=022
#
# 設定虛擬用戶個人vsftp的CentOS FTP服務文件存放路徑。存放虛擬用戶個性的CentOS FTP服務文件(配置文件名=虛擬用戶名)
user_config_dir=/etc/vsftpd/virtual_conf
#
# 如果要禁止PASV方法獲取數據連接,請設置爲NO。
pasv_enable=YES
#
# 設定在PASV模式下,建立數據傳輸所可以使用port範圍的下界和上界,0 表示任意。默認值爲0。把端口範圍設在比較高的一段範圍內
pasv_min_port=50000
pasv_max_port=50020
#
# 默認值爲NO。爲YES時,將關閉PASV模式的安全檢查。
pasv_promiscuous=YES
#
# 如果您不想使用PORT方法獲取數據連接,則設置爲NO。
#port_enable=YES
#
# 默認值爲NO。如果要禁用PORT安全檢查,確保傳出數據連接只能連接到客戶端,請設置爲YES。
#port_promiscuous=YES
#
# 表明服務器使用 tcp_wrappers 作爲主機訪問控制方式,tcp_wrappers 可以實現linux 系統中網絡服務的基於主機地址的訪問控制,在/etc 目錄中的hosts.allow 和hosts.deny 兩個文件用於設置tcp_wrappers 的訪問控制,前者設置允許訪問記錄,後者設置拒絕訪問記錄。例如想限制某些主機對FTP 服務器12.36.126.141 的匿名訪問,編緝/etc/hosts.allow 文件,如在下面增加兩行命令:vsftpd:192.168.2.1:DENY 和vsftpd:192.168.2.20:DENY 表明限制IP 爲192.168.2.1/192.168.2.20 主機訪問IP 爲12.36.126.141 的FTP 服務器,此時FTP 服務器雖可以PING 通,但無法連接
tcp_wrappers=YES




四、安裝Berkeley DB進行認證

#安裝Berkeley DB工具,很多人找不到db_load的問題就是沒有安裝這個包
yum -y install db4 db4-utils

#創建用戶列表,注意奇行是用戶名,偶行是密碼
vim /etc/vsftpd/virtual_user.txt

#添加用戶
neo
666666
test2
123456

生成虛擬用戶認證的db文件

db_load -T -t hash -f /etc/vsftpd/virtual_user.txt /etc/vsftpd/virtual_user.db

編輯認證文件

vim /etc/pam.d/vsftpd

保留第一行註釋其他,在最後增加以下兩句

# 32位系統
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/virtual_user
account required /lib/security/pam_userdb.so db=/etc/vsftpd/virtual_user

# 64位系統
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_user

四、創建虛擬用戶配置文件

#生成配置文件
mkdir -p /etc/vsftpd/virtual_conf

#添加賬戶,文件名等於virtual_user.txt裏面的賬戶名,否則下面設置無效
vim /etc/vsftpd/virtual_conf/neo

# 每個虛擬用戶的單獨配置,會覆蓋模板配置文件配置
local_root=/www/wwwroot/neo
anon_umask=022
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

五、設置FTP根目錄權限

#建立限制用戶訪問目錄的空文件
touch /etc/vsftpd/chroot_list

#創建日誌文件
mkdir -p /var/log/vsftpd
touch /var/log/vsftpd/xferlog
touch /var/log/vsftpd/vsftpd.log

六、開啓防火牆50000到50020端口

# 查看防火牆是否有端口,有就退出編輯,沒有就執行下句
vim /etc/sysconfig/iptables

#添加端口
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 50000:50020 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

#保存
/etc/init.d/iptables save

#另外需要注意,如果是阿里雲的,還需要登錄阿里雲在安全組裏面添加入方向規則

#重啓iptables 服務
service iptables restart

七、重啓vsftpd服務

#啓動vsftpd 服務
service vsftpd start

#重啓vsftpd 服務
service vsftpd restart

可以查看ftp端口是否已經給佔用,一般情況下是21端口

netstat -lnp|grep 21

八、連不上問題解決彙總

  1. 連接被拒絕
    有兩個原因,vsftpd進程沒有啓動,或者服務器防火牆的端口沒有打開。
    可以用
    telnet 服務器IP地址 21
    這個命令來測試。
  2. 500 OOPS: priv_sock_get_cmd
    增加這個配置應該就可以解決:
    seccomp_sandbox=NO
  3. 錯誤: GnuTLS 錯誤 -15: An unexpected TLS packet was received.
    增加這個配置可以解決:
    allow_writeable_chroot=YES
  4. 響應: 425 Security: Bad IP connecting.
    這個一般是因爲pasv端口沒有設置,或者防火牆上對應的端口沒有打開。
    防火牆上打開40000~40100端口,然後設置
    pasv_min_port=40000
    pasv_max_port=40100
    pasv_promiscuous=YES
    就可以解決了。
  5. 響應: 553 Could not create file.:chmod 權限問題。
  6. 備註一些權限問題:“admin”文件內容如下:
    local_root=/home/ftp  #默認就是/var/ftproot,可不寫
    anon_world_readable_only=NO
    write_enable=YES (寫權限)
    anon_mkdir_write_enable=YES (新建目錄權限)
    anon_upload_enable=YES(上傳權限)
    anon_other_write_enable=YES(刪除/重命名的權限)

    “web”文件內容如下:

    local_root=/var/www
    anon_world_readable_only=NO
    anon_umask=022 (由於web頁面的特殊性,故單獨設置上傳文件權限爲755,此掩碼值可根據具體情況更改)
    write_enable=YES (寫權限)
    anon_mkdir_write_enable=YES (新建目錄權限)
    anon_upload_enable=YES(上傳權限)
    anon_other_write_enable=YES(刪除/重命名的權限)

     

    “download”文件內容如下:
    local_root=/home/ftp (當然,你高興也可以設置成其它,但要注意virtual用戶對此目錄的權限)
    anon_world_readable_only=NO (使download用戶的能下載,也只能下載;寫成YES,將不能列出文件和目錄)
    #下面這句可以不寫,不寫時同樣不能新建文件夾(若需要可以NO–> YES)
    anon_mkdir_write_enable=NO

    “upload”文件內容如下:
    local_root=/home/ftp (當然,目錄也可以設置成其它,但要注意virtual用戶對此目錄的權限)
    virtual_use_local_privs=NO(虛擬用戶和匿名用戶有相同的權限,默認是NO;本地用戶是YES)
    anon_world_readable_only=NO (寫成YES,將不能列出文件和目錄)
    write_enable=YES
    anon_upload_enable=YES

  7. 如下截圖:、

END


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章