一、前述
企業中linux搭建ftp服務器還是很實用的,所以本文針對CentOS7和CentOS6搭建服務器教程做個總結。
二、安裝過程
1、顯示如下圖則表示已安裝 vsftp 軟件。如果未顯示則需要安裝 vsftpd 軟件。
如果沒有則通過 yum 源進行安裝:
yum install -y vsftp
yum -y install lftp # 本地 ftp 客戶端
2、安裝完成之後
進入到ftp的根目錄默認是 /etc/vsftpd/ 文件中進行配置
文件名 | 含義 |
/etc/vsftpd/vsftpd.conf | vsftpd 的核心配置文件 |
/etc/vsftpd/ftpusers | 用於指定哪些用戶不能訪問FTP 服務器。 黑名單 |
/etc/vsftpd/user_list | 指定允許使用vsftpd 的用戶列表文件。 白名單 |
/etc/vsftpd/chroot_list | 指定允許使用vsftpd 的用戶列表文件。 控制名單下的目錄能不能離開ftp根目錄 |
配置項目名 | 含義 |
anonymous_enable=NO | # 允許匿名用戶訪問爲了安全選擇關閉 |
local_enable=YES | # 允許本地用戶登錄 |
write_enable=YES | # 是否允許寫入 |
local_umask=022 | # 本地用戶上傳文件的umask |
dirmessage_enable=YES | # 爲YES則進入目錄時顯示此目錄下由message_file選項指定的文本文件(,默認爲.message)的內容 |
xferlog_enable=YES | # 開啓日誌 |
xferlog_std_format=YES | # 標準格式 |
connect_from_port_20=YES | # 從端口20連接 |
xferlog_file=/var/log/xferlog | # ftp日誌目錄 |
idle_session_timeout=6000 | # 設置客戶端連接時間 |
data_connection_timeout=1200 | # 設置數據連接時間 針對上傳,下載 |
chroot_list_file=/etc/vsftpd/chroot_list | # 改變根目錄 |
chroot_list_enable=YES | # 若爲NO,則記錄在chroot_list_file所指定的文件(默認是/etc/vsftpd.chroot_list)中的用戶將被chroot在登錄後所在目錄中,無法離開.如果爲YES,則所記錄的用戶將不被chroot這裏YES。 |
chroot_local_user=YES | # 本地用戶 |
userlist_deny=NO | # 若設置爲YES則記錄在userlist_file選項指定文件(默認是/etc/vsftpd.user_list)中的用戶將無法login,並且將檢察下面的userlist_deny選項。 |
userlist_enable=YES | # 若爲NO,則僅接受記錄在userlist_file選項指定文件(默認是/etc/vsftpd.user_list)中的用戶的login請求,若爲YES則不接受這些用戶的請求。 |
userlist_file=/etc/vsftpd/user_list | # 白名單 |
local_root=/var/ftp/pub | # 根目錄 |
listen=YES | # 監聽端口 |
pam_service_name=vsftpd | |
tcp_wrappers=YES |
3、創建白名單 useradd xxx passwd xxx 並添加到 user_list 和 chroot_list 中去
4、關閉防火牆
centos 7操作爲 systemctl stop firewalld.service
centos 6操作位 service stop iptables
5.啓動ftp服務器
centos 7操作爲 /bin/systemctl restart vsftpd.service
centos 6操作爲 service vsftpd restart
6.賦權,將ftp指定的根目錄賦權爲777權限
chmod 777 /var/ftp/pub
7.檢查SElinux狀態並關閉
getsebool -a | grep ftp
若centos 7 到此結束用ftp工具即可訪問或者本地 ftp 服務器測試,通過 rpm -ivh 安裝包,安裝ftp客戶端配置。
若centos 6 則在設置幾個權限:
通過:setsebool httpd_enable_ftp_server 1 設置成如下狀態即可。通過 getsebool - a | grep ftp 查看。
至此搭建成功!!!!
三、VSFTP服務器實戰
實戰1:
公司技術部準備搭建一臺功能簡單的FTP 服務器,允許所有員工上傳和下載文件,並允許創建用戶自己的目錄。
分析:
允許所有員工上傳和下載文件需要設置成允許匿名用戶登錄並且需要將允許匿名用戶上傳功能。
開啓,anon_mkdir_write_enable 字段可以控制是否允許匿名用戶創建目錄。
備份原配置文件:
[root@python vsftpd]# cp vsftpd.conf vsftpd.conf_bak
[root@python ~]# vim /etc/vsftpd/vsftpd.conf
允許匿名用戶訪問:
anonymous_enable=YES
允許匿名用戶上傳文件並可以創建目錄:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
啓動服務:
[root@python ~]# service vsftpd restart
[root@python pub]# chown ftp.ftp /var/ftp/pub/
然後測試,是可以新建文件夾了,但是不能重命名,不能刪除!
[root@python ~]# mkdir /var/ftp/pythondata
[root@python ~]# chown ftp.ftp /var/ftp/pythondata
[root@python ~]# ll -d !$
ll -d /var/ftp/pythondata
drwxr-xr-x 2 ftp ftp 4096 Mar 16 14:34 /var/ftp/pythondata
[root@python ~]#
重啓服務:
[root@python ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@python ~]#
現在匿名上傳的文件是禁止刪除的。
這樣匿名用戶的上傳就算成功了。
注:工作中,匿名用戶只是只讀訪問,寫的權限也沒有的。
補充:
如果想讓匿名用戶可以重命名或者刪除的權限,添加如下一條配置參數:
重啓服務:
[root@python ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: 500 OOPS: bad bool value in config file for: anon_other_write_enable [FAILED]
根據提示,說明剛纔添加的那一行匿名寫權限的參數有問題
[root@python ~]# vim /etc/vsftpd/vsftpd.conf
也就是說參數後面不能有多餘的空格,重新啓動就可以重新命名和刪除文件夾了,匿名用戶可以刪除和修改,非常不安全,慎重使用這個參數。
注意:默認匿名用戶目錄的權限是755,這個權限是不能改變的。切記!
[root@python ~]# service vsftpd restart
實戰2:
公司內部現在有一臺FTP 和WEB 服務器,FTP 的功能主要用於維護公司的網站內容,包括上傳文件、創建目錄、更新網頁等等。公司現有兩個部門負責維護任務,他們分別適用team1 和team2帳號進行管理。先要求僅允許team1 和team2 帳號登錄FTP 服務器,但不能登錄本地系統,並將這兩個帳號的根目錄限制爲/var/www/html,不能進入該目錄以外的任何目錄。
ftp 和 www web服務器相結合。
www web服務器根目錄:/var/www/html
只允許:team1和team2兩用戶可以上傳。 vsftp禁止匿名。
分析:
將FTP 和WEB 服務器做在一起是企業經常採用的方法,這樣方便實現對網站的維護,爲了增強安全性,首先需要使用僅允許本地用戶訪問,並禁止匿名用戶登錄。其次使用chroot 功能將team1和team2 鎖定在/var/www/html 目錄下。如果需要刪除文件則還需要注意本地權限
解決方案:
1)建立維護網站內容的ftp 帳號team1 和team2 並禁止本地登錄,然後設置其密碼
[root@python ~]# useradd -s /sbin/nologin team1
[root@python ~]# useradd -s /sbin/nologin team2
[root@python ~]# echo "123456" | passwd --stdin team1
Changing password for user team1.
passwd: all authentication tokens updated successfully.
[root@python ~]# echo "123456" | passwd --stdin team2
Changing password for user team2.
passwd: all authentication tokens updated successfully.
2)配置vsftpd.conf 主配置文件並作相應修改
[root@python vsftpd]# cp vsftpd.conf_bak vsftpd.conf
cp: overwrite `vsftpd.conf'? y
[root@python vsftpd]# vim vsftpd.conf
#anonymous_enable=YES
anonymous_enable=NO 禁止匿名用戶登錄
# Uncomment this to allow local users to log in.
local_enable=YES 允許本地用戶登錄
繼續將:
修改爲:
local_root=/var/www/html:設置本地用戶的根目錄爲/var/www/html
chroot_list_enable=YES:激chroot 功能
chroot_list_file=/etc/vsftpd/chroot_list:設置鎖定用戶在根目錄中的列表文件。此文件存放要鎖定的用戶名。
保存退出
3)建立 /etc/vsftpd/chroot_list 文件,添加team1 和team2 帳號
[root@python vsftpd]# touch /etc/vsftpd/chroot_list
[root@python vsftpd]# ll !$
ll /etc/vsftpd/chroot_list
-rw-r--r-- 1 root root 0 Mar 16 15:13 /etc/vsftpd/chroot_list
[root@python vsftpd]# vim /etc/vsftpd/chroot_list # 寫入以下內容,一行,一個用戶名
team1
team2
4)重啓vsftpd 服務使配置生效 service vsftpd restart
5)修改本地權限
[root@python vsftpd]# mkdir -p /var/www/html/
[root@python vsftpd]# ll -d /var/www/html/
drwxr-xr-x 2 root root 4096 Mar 16 15:16 /var/www/html/
[root@python vsftpd]# chmod -R o+w /var/www/html/
[root@python vsftpd]# ll -d /var/www/html/
drwxr-xrwx 2 root root 4096 Mar 16 15:16 /var/www/html/
6)測試:
[root@python ~]# lftp 192.168.31.10 -uteam1,123456
lftp [email protected]:~> ls
drwxr-xr-x 2 500 500 4096 Mar 16 07:24 web
lftp [email protected]:~>