一、安裝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
八、連不上問題解決彙總
- 連接被拒絕
有兩個原因,vsftpd進程沒有啓動,或者服務器防火牆的端口沒有打開。
可以用
telnet 服務器IP地址 21
這個命令來測試。 - 500 OOPS: priv_sock_get_cmd
增加這個配置應該就可以解決:
seccomp_sandbox=NO - 錯誤: GnuTLS 錯誤 -15: An unexpected TLS packet was received.
增加這個配置可以解決:
allow_writeable_chroot=YES - 響應: 425 Security: Bad IP connecting.
這個一般是因爲pasv端口沒有設置,或者防火牆上對應的端口沒有打開。
防火牆上打開40000~40100端口,然後設置
pasv_min_port=40000
pasv_max_port=40100
pasv_promiscuous=YES
就可以解決了。 - 響應: 553 Could not create file.:chmod 權限問題。
- 備註一些權限問題:“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 - 如下截圖:、