CentOS下ftp服務器安裝流程

一、CentOS安裝

1.查看是否安裝vsftpd rpm -qa | grep vsftpd

2.安裝服務器 yum -y install vsftpd

3.啓動FTP服務service vsftpd start

4.將FTP服務加入自動啓動systemctl enable vsftpd

5.查看ftp狀態 service vsftpd status

(ps:未裝yum請自行安裝)

二、建立本地虛擬用戶,本機測試

若不是超級用戶root,請使用 su 切換。區分root和普通用戶,請看命令起始標誌,若是# 則爲超級用戶root,若是$ 則爲普通用戶。

1.匿名用戶測試(本機測試,亦可用cmd測試,linux地址可用ifconfig查看)

若以下測試成功,則ftp服務器能夠使用,如出錯且無法在文檔內搜索到解決方案,請自覺在網絡上搜索並完善本文檔。
(1)vsftpd的匿名用戶默認只支持下載權限
[root@localhost /]# ftp 127.0.0.1 #測試ftp用匿名用戶登陸到本地服務器
(ps:未安裝ftp請自行安裝)

Connected to 127.0.0.1.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): anonymous #匿名用戶
331 Please specify the password.
Password: 直接回車
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

登陸成功(默認vsftp是開啓匿名登錄)
接下來測試匿名用戶上傳與下載

[root@localhost ~]# touch /var/ftp/pub/test.txt 先在匿名用戶下載目錄創建一個test.txt文件
[root@localhost /]# cd root(cd ~)
[root@localhost ~]# touch test1.txt 進入根目錄創建一個test1.txt文件,作爲上傳測試
pub只能用來下載文件,所有者爲root

ftp> cd pub
ftp> ls
227 Entering Passive Mode (127,0,0,12,92,5)
150 Here comes the directory listing.
-rw-r–r– 1 0 0 6 Dec 28 14:59 test.txt
226 Directory send OK.
ftp> mget test.txt 下載text.txt
mget test.txt?
227 Entering Passive Mode (127,0,0,12,123,33)
150 Opening BINARY mode data connection for test.txt (6 bytes).
226 File send OK.
6 bytes received in 0.0047 seconds (1.2 Kbytes/s)
ftp> !ls 測試是否下載到本地
anaconda-ks.cfg install.log install.log.syslog test1.txt test.txt 下載成功
ftp> put test1.txt 上傳test1.txt
local: test1.txt remote: test1.txt
200 PORT command successful. Consider using PASV.
550 Permission denied. 請求被拒絕,說明沒有上傳權限
ftp> delete test.txt
550 Permission denied. 請求被拒絕,說明沒有刪除權限

(2)讓匿名用戶支持上傳功能,下載,創建目錄文件的權限
要實現這個功能,必須做三件事情(測試環境是在關閉selinux情況下)
修改/etc/sysconfig/selinux(或 /etc/selinux/config)文件(用vi打開):
#SELINUX=enforcing 改成 permissive 或 disabled
•enforcing強制模式,只要SELinux不允許,就無法執行
•permissive警告模式,將該事件記錄,依然允許執行
•disabled關閉SELinux
•停用、啓用需要重啓計算機servic
•使用setenforce切換enforcing與permissive模式不需要重啓計算機
SELINUX=disabled
重啓生效,如果不想重啓,用命令
#setenforce 0
(ps:建議配置完config後重啓Linux)
(1修改/etc/vsftpd/vsftpd.conf 去掉註釋anon_upload_enable=YES
(2修改/etc/vsftpd/vsftpd.conf 去掉註釋anon_mkdir_write_enable=YES
以上兩個步驟如下:
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
(在修改主配置文件前,請一定記得!!!

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak)
25 # has an effect if the above global write enable is activated. Also, you will
26 # obviously need to create a directory writable by the FTP user.
27 anon_upload_enable=YES
28 #
29 # Uncomment this if you want the anonymous FTP user to be able to create
30 # new directories.
31 anon_mkdir_write_enable=YES
32 #
33 # Activate directory messages - messages given to remote users when they
34 # go into a certain directory.
35 dirmessage_enable=YES
(修改後可通過
#diff /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 比較
每行的值都不要有空格,否則啓動時會出現錯誤
舉個例子,假如在listen=YES後多了個空格,那我啓動時就出現如下錯誤:500 OOPS: bad bool value in config file for: listen )
(3文件系統中FTP匿名用戶對某個目錄有寫權限
[root@localhost ~]# cat /etc/passwd |grep ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin/var/ftp

#ftp用戶的家目錄 /sbin/nologin 不支持系統登錄,只能作爲虛擬用戶用來登錄vsftpd
#虛擬用戶和本地用戶的區別:虛擬用戶限制了功能,即只能使用ftp協議,不能登錄本機;本地用戶是用來登陸linux的,和root類似,只是有權限上的區別
創建一個名爲put目錄,並定義這個文件的所有者爲ftp

[root@localhost ftp]# mkdir put
[root@localhost ftp]# chown ftp put #修改文件所有者爲ftp
[root@localhost ftp]# ll #L的小寫字母,不是一!
總計 8
drwxr-xr-x 2 root root 4096 2007-12-13 pub
drwxr-xr-x 2 ftp root 4096 12-29 18:13 put
[root@localhost ftp]# service vsftpd restart 重啓vsftpd服務

修改 /etc/vsftpd/vsftpd.conf 後須重啓才能生效!
提示:要想讓匿名用戶支持刪除和更名權限,必須在vsftpd.conf加入以下參數anon_other_write_enable=YES 允許匿名賬號具有刪除.更名權限

put只能用來下載文件,所有者爲ftp
[root@uhome ~]# ftp 127.0.0.1 測試結果
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.0.5)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,116,27).
150 Here comes the directory listing.
drwxrwxrwx 2 0 0 4096 Mar 05 02:28 pub
drwxrwxrwx 2 14 0 4096 Mar 05 01:31 put
226 Directory send OK.
ftp> cd put
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (127,0,0,1,186,61).
150 Here comes the directory listing.
226 Directory send OK.
ftp> !ls
anaconda-ks.cfg install.log.syslog test.txt 模板 圖片 下載 桌面
install.log test1.txt 公共的 視頻 文檔 音樂
ftp> put test1.txt
local: test1.txt remote: test1.txt
227 Entering Passive Mode (127,0,0,1,240,27).
150 Ok to send data.
226 File receive OK.
ftp> ls
227 Entering Passive Mode (127,0,0,1,238,74).
150 Here comes the directory listing.
-rw——- 1 14 50 0 Mar 05 02:30 test1.txt
226 Directory send OK.

2.匿名用戶測試(windos cmd測試,linux地址可用ifconfig查看)

在win端訪問虛擬機端ftp服務器注意事項
首先,在shell下輸入“service vsftpd start”來啓動ftp。然後在shell下輸入“setup”,進入圖形界面的系統設置,點擊firewall configuration,讓它不阻止ftp,實在不行,就把firewall configuration給disable了。

①打開“cmd”命令窗口
②先用“ping”測試與服務器之間的連通性
這裏寫圖片描述
③用“ftp”連接服務器,並登錄賬戶
這裏寫圖片描述
④下載文件 get (默認有下載權限)
查看客戶端文件
這裏寫圖片描述
下載
這裏寫圖片描述
⑤上傳文件 put (需修改配置文件)
這裏寫圖片描述
報錯vsFTPd的553 Could not create file錯誤
由於是匿名用戶
(1檢查主配置文件vsftpd.conf文件:
18 write_enable=YES
31 anon_mkdir_write_enable=YES
anon_other_write_enable=YES
取消前面的註釋符 #
(2查看ftp目錄:

cat /etc/passwd | grep ftp
ftp:x:107:65534::/home/ftp:/bin/false
# ftp目錄爲/home/ftp
chown root:root /home/ftp #/home/ftp的所有者是root用戶
chmod -R 777 /home/ftp #修改/home/ftp的權限爲777(最大權限)
但這樣是不能上傳文件的。因爲這是匿名用戶,當前目錄所有者是root用戶; 真的要上傳文件在該目錄下建立一個文件夾如名字是upload,
mkdir /home/ftp/upload
chown ftp:root /home/ftp/upload
然後切換到upload 文件內,再試一次。
這裏寫圖片描述
⑥創建文件夾 mkdir
這裏寫圖片描述
⑦查看目錄及文件的權限 dir
這裏寫圖片描述
⑧刪除文件 del
這裏寫圖片描述

3.添加ftp測試帳號和目錄
(1)先檢查一下nologin的位置,通常在/usr/sbin/nologin或者/sbin/nologin下。使用下面的命令創建帳戶,該命令指定了 /home/ftp/www爲用戶username的家目錄,可以自己定義帳戶名和目錄:
#useradd -d /home/ftp/www -s /sbin/nologin username
地址 賬號性質 用戶名
#虛擬用戶和本地用戶的區別:虛擬用戶限制了功能,即只能使用ftp協議,不能登錄本機;本地用戶是用來登陸linux的,和root類似,只是有權限上的區別
賬號性質: 虛擬用戶 /sbin/nologin 本地用戶 /bin/bash
修改該帳戶密碼:
#passwd username
查看ftp用戶的家目錄:
通過/etc/passwd

(2)建立虛擬賬戶訪問FTP服務器
注意!!此方法爲redhat下的編程,請改成fedora的表達方式
1.創建用戶數據庫
(1)創建用戶文本文件先建立用戶文本文件vsftpd_login.txt
[root@red-hat-5 ~]# touch /etc/vsftpd/vsftpd_login.txt #文件名可更改
[root@red-hat-5 ~]# echo username >>/etc/vsftpd/vsftpd_login.txt #生成登錄賬號,可生成多個賬號,但是用戶的家目錄爲對應的虛擬用戶家目錄
[root@red-hat-5 ~]# echo PASSWD >>/etc/vsftpd/vsftpd_login.txt #生成登錄密碼
[root@red-hat-5 ~]# cat /etc/vsftpd/vsftpd_login.txt #查看數據庫文本內容
(2)生成數據庫
db_load:安裝 db4,db4-devel,db4-utils
#yum -y install db4*
#db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
保存虛擬帳號和密碼的文本文件無法被系統帳號直接調用,我們需要使用db_load命令生成db口令數據庫文件

db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
要使用db_load這個命令,需要安裝三個文件,
db4-4.3.29-9.fc6.i386.rpm
db4-devel-4.3.29-9.fc6.i386.rpm
db4-utils-4.3.29-9.fc6.i386.rpm
[root@red-hat-5 ~]# rpm -qa|grep db4 #查看已有db4
db4-4.3.29-9.fc6
[root@red-hat-5 mnt]# mount /dev/cdrom /mnt/cdrom/ #掛載光驅,可不掛載
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@red-hat-5 cdrom]# cd Server/
[root@red-hat-5 Server]# rpm -ivh db4-devel-4.3.29-9.fc6.i386.rpm
warning: db4-devel-4.3.29-9.fc6.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:db4-devel ########################################### [100%]
[root@red-hat-5 Server]# rpm -ivh db4-utils-4.3.29-9.fc6.i386.rpm
warning: db4-utils-4.3.29-9.fc6.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:db4-utils ########################################### [100%]
[root@red-hat-5 Server]# cd /
[root@red-hat-5 /]# rpm -qa|grep db4
db4-4.3.29-9.fc6
db4-utils-4.3.29-9.fc6
db4-devel-4.3.29-9.fc6
[root@red-hat-5/]#db_load -T -t hash –f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db(建議與1.用戶數據庫儘量同名)
[root@red-hat-5 /]# ll /etc/vsftpd/
總計 48
-rw-r–r– 1 root root 197 12-25 19:57 chroot_list
-rw——- 1 root root 126 12-25 20:06 ftpusers
-rw-r–r– 1 root root 32 12-25 22:22 vsftpd_login.txt
-rw——- 1 root root 367 12-25 20:37 user_list
-rw——- 1 root root 4449 12-25 20:34 vsftpd.conf
-rwxr–r– 1 root root 338 2007-12-13 vsftpd_conf_migrate.sh
-rw-r–r– 1 root root 12288 12-25 23:12 vsftpd_login.db 生成數據庫成功
-rw-r–r– 1 root root 32 12-25 22:42 vsftpd_login.txt
-rw-r–r– 1 root root 7 12-25 22:40 vtpd_login.txtsf
(3)修改數據庫文件訪問權限
數據庫文件中保存着虛擬帳號的密碼信息,爲了防止非法用戶盜取哈,我們可以修改該文件的訪問權限。生成的認證文件的權限應設置爲只對root用戶可讀可寫,即600
[root@red-hat-5 /]# chmod 600 /etc/vsftpd/vsftpd_login.db
[root@red-hat-5 /]# ll /etc/vsftpd/vsftpd_login.db
-rw——- 1 root root 12288 12-25 23:12 /etc/vsftpd/vsftpd_login.db
2.配置PAM文件
#vi /etc/pam.d/vsftpd
將原來的全部註釋掉,加入:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
注意:db=/etc/vsftpd/vsftpd_login 後面的.db必須去掉
爲了使服務器能夠使用數據庫文件,對客戶端進行身份驗證,需要調用系統的PAM模塊.PAM(Plugable Authentication Module)爲可插拔認證模塊,不必重新安裝應用系統,通過修改指定的配置文件,調整對該程序的認證方式。PAM模塊配置文件路徑爲/etc/pam.d/目錄,此目錄下保存着大量與認證有關的配置文件,並以服務名稱命名。

[root@red-hat-5 /]# vi /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
修改vsftpd對應的PAM配置文件/etc/pam.d/vsftpd,將默認配置使用“#”全部註釋,添加相應字段
[root@red-hat-5 /]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include system-auth
#account include system-auth
#session include system-auth
#session required pam_loginuid.so
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login(地址爲數據庫地址)
注意:db=/etc/vsftpd/vsftpd_login 格式是這樣的,去掉.db後綴

(3)使用創建的本地虛擬用戶測試
這裏寫圖片描述
①打開“cmd”命令窗口
②先用“ping”測試與服務器之間的連通性linux的ftp服務器地址可用ifconfig查看
這裏寫圖片描述
③用“ftp”連接服務器,並登錄剛剛註冊的賬戶
這裏寫圖片描述
此時請檢查防火牆 vi /etc/selinux/config ,若是以下狀態
SELINUX=disabled
使用 iptables -F 清空防火牆規則
這裏寫圖片描述
再次連接
這裏寫圖片描述
④測試以下功能
cd 服務器端路徑更改 lcd 本地路徑更改 pwd 顯示服務器端當前路徑
dir 顯示服務器端當前目錄中內容(顯示權限)
ls 顯示服務器端當前目錄中內容(在linux中使用時也顯示權限)
put 上傳 get 下載 mkdir 建文件夾 rmdir 刪除文件夾
rename 重命名 delete 刪除文件

在下載文件 get dh 時報錯,原因是賬號hhh在該文件夾下沒有權限。一般來說,非超級用戶都不會賦予虛擬用戶刪除權限,若想刪除,儘量在虛擬機上使用超級用戶刪除,以免分配出去的虛擬用戶誤刪重要文件。
這裏寫圖片描述

這裏寫圖片描述
舉例測試部分功能,其他功能可自測。
注意:刪除文件時須賦予用戶權限(從主配置文件vsftpd.conf 中修改),以及文件夾的權限也會影響(chown user:root /home/ftp chmod -R 777 /home/ftp)

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