文件共享服務:
ftp:應用層,C/S架構,文件共享;
nfs,cifs:文件系統接口,網絡文件系統;
nfs:(network file system)是unix和linux系統上常見的內核的網絡文件共享服務;
cifs:(common Internet file system),是Windows上常見的網絡文件共享服務;
samba:是在linux之上實現cifs協議來解決跨平臺的文件共享服務;
ftp:file transfer protocol
應用層協議:tcp,21/tcp
C/S:
Client:客戶端
Server:服務器
數據:
命令連接:文件管理類命令,始終在線的連接;
數據連接:數據傳輸,按需創建及關閉的連接
數據傳輸格式:
文本傳輸;
二進制傳輸;
主動:由服務器創建連接
命令:client:5000 server:21
數據:server:20/tcp client: 5000+1
被動:由客戶端創建連接
命令:Client:50000 --> Server: 21
數據:Client:50000+1 --> Server: 隨機端口
C/S:服務及工具
Server:
wu-ftpd
proftpd
pureftpd
vsftpd:very secure
ServU
Client:
ftp
lftp,lftpget
wget,curl
filezilla
gftp(Linux GUI)
flashfxp
cuteftp
響應碼:
1xx:信息;
2xx:成功類的狀態碼;
3xx:提示需進一步提供補充類信息的狀態碼
4xx:客戶端錯誤;
5xx:服務端錯誤;
用戶認證:
虛擬用戶:僅用於訪問某特定服務中的資源
nsswitch:network server switch,名稱解析框架
配置文件:/etc/nsswitch.conf
模塊:/lib64/libnss*,/usr/lib64/libnss*
Pam:pluggable authentication module,用戶認證框架
演示:用一臺主機ftp連接另一臺vsftpd的服務器主機;
- 安裝vsftpd;
#yum install vsftpd –y - 開啓vsftpd服務並查看端口是否開啓;
- 遠程連接測試;
發現當前目錄爲當前用戶的家目錄;
Centos6.6:vsftpd
用戶認證配置文件:/etc/pam.d/vsftpd
服務腳本:/etc/tc.d/init.d/vsftpd
配置文件目錄:/etc/vsftpd
主配置文件:vsftpd.conf
匿名用戶(映射爲ftp用戶)共享資源位置:/var/ftp
系統用戶通過ftp訪問的資源的位置:用戶自己的家目錄
虛擬用戶通過ftp訪問的資源的位置:給虛擬用戶指定的映射稱爲的系統用戶的家目錄; - 匿名用戶的配置:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
演示:
1) 用匿名用戶遠程登錄ftp服務器,發現沒有上傳文件權限和創建目錄權限;
2) 修改ftp服務器配置文件如下;
3) 重啓服務;
#service vsftpd restart
4) 重新遠程ftp服務器,發現創建目錄,上傳文件等還是失敗;
5) 因爲ftp用戶對/var/ftp沒有寫權限,爲了穩妥,我們在ftp服務器上/var/ftp目錄下我們創建了pub,upload目錄,我們賦予子目錄權限;
6) 重新測試,可以上傳文件了;
也可以刪除文件了;
7) 下載文件,發現錯誤提示failed to open file;
8) 編輯配置文件,添加以下項;
9) 重啓服務後,重新測試,重新上傳文件,重新下載,會成功下載; - 系統用戶的配置:
local_enable=YES
write_enable=YES
local_unmask=022
禁錮所有的ftp本地用戶於其家目錄中:
chroot_local_user=YES
禁錮文件中指定的ftp本地用戶於其家目錄中:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
示例:
1) 編輯配置文件,啓用如下選項;
2) 編輯chroot_list_file;
3) 測試,顯示已被鎖定;
4) 用centos用戶登錄,沒有被鎖定在家目錄; - 日誌:
xferlog_enable=YES #是否啓用傳輸日誌;
xferlog_std_format=YES
xferlog_file=/var/log/xferlog #日誌文件,需要手動創建 - 改變上傳文件的屬主:
chown_uploads=YES
chown_username=whoever - vsftpd使用pam完成用戶認證,其用到的pam配置文件:/etc/pam.d/vsftpd
pam_servcie_name=vsftpd
演示:
1) vsftpd使用pam完成認證;使用配置文件/etc/pam.d/vsftpd
可以看到用戶控制的文件爲/etc/vsftpd/ftpusers;
2) 編輯配置文件/etc/vsftpd/vsftpd.conf,啓用用戶認證控制,其中userlist_deny=YES代表黑名單,NO的話代表白名單;
3) 編輯/etc/vsftpd/ftpusers配置文件;
4) 重載服務,測試,centos用戶登錄不上ftp服務器; - 是否啓用控制用戶登錄的列表文件
userlist_enable=YES
userlist_deny=YES|NO #YES爲黑名單,NO爲白名單;
默認文件爲/etc/vsftpd/user_list
演示:
1) 編輯/etc/vsftpd/user_list文件;
2) 測試; - 連接限制:
max_clients:最大併發連接數;
max_per_ip:每個ip可同時發起的併發請求數; - 傳輸速率:
anon_max_rate:匿名用戶的最大傳輸速率,單位是“字節/秒”;
local_max_rate:本地用戶的… - 虛擬用戶:
所有的虛擬用戶會被統一映射爲一個指定的系統賬號,訪問的共享位置即爲此係統賬號的家目錄;
各虛擬用戶可被賦予不同的訪問權限:
通過匿名用戶的權限控制參數進行指定;
各虛擬用戶賬號的存儲方式:
1) 存於文件中:編輯文件
奇數行爲用戶名;
偶數行爲密碼;
此文件需要被編碼爲hash格式;
2) 存於關係型數據庫中的表中:
即時查詢數據庫完成用戶認證;
Mysql庫,pam要依賴與pam_mysql
#yum –y insatall pam_mysql
具體步驟:
a. 在數據庫中創建虛擬用戶賬號;
添加表內容;
b. 建立pam認證所需文件
c. 建立虛擬用戶映射的本地用戶及對應的目錄;
d. 修改vsftpd的配置文件,使其使用mysql認證;
編輯/etc/vsftpd/vsftpd.conf文件,首先確保已經啓用如下選項;
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
並添加以下選項:
Guest_enable=YES #啓用虛擬用戶;
Guest_username=vuser #指定映射到哪個本地用戶
Pam_service_name=vsftpd.mysql
e. 配置虛擬用戶具有不同的訪問權限;
Vsftpd可以在配置文件中每一個用戶提供單獨的配置文件以及定義設置服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用的目錄,只需要在主配置文件中指明路徑即可;
在主配置文件中定義目錄;
創建相關目錄及文件:
Note:虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。
f. 啓動服務並測試;
Note:如果是二進制安裝的mysql,可能會出現登錄不了ftp服務器的情況,因爲其socket默認路徑不是/var/lib/mysql/msyql.socket,此時需要編輯/etc/my.cnf文件修改socket路徑;