天天看點

Linux自學筆記——檔案共享服務之ftp

檔案共享服務:

 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)

示範:用一台主機ftp連接配接另一台vsftpd的伺服器主機;

安裝vsftpd;

#yum install vsftpd –y

開啟vsftpd服務并檢視端口是否開啟;

Linux自學筆記——檔案共享服務之ftp

遠端連接配接測試;

Linux自學筆記——檔案共享服務之ftp

發現目前目錄為目前使用者的家目錄;

Linux自學筆記——檔案共享服務之ftp

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

Linux自學筆記——檔案共享服務之ftp

示範:

1) 用匿名使用者遠端登入ftp伺服器,發現沒有上傳檔案權限和建立目錄權限;

Linux自學筆記——檔案共享服務之ftp

2) 修改ftp伺服器配置檔案如下;

Linux自學筆記——檔案共享服務之ftp

3) 重新開機服務;

#service vsftpd restart

4) 重新遠端ftp伺服器,發現建立目錄,上傳檔案等還是失敗;

Linux自學筆記——檔案共享服務之ftp

5) 因為ftp使用者對/var/ftp沒有寫權限,為了穩妥,我們在ftp伺服器上/var/ftp目錄下我們建立了pub,upload目錄,我們賦予子目錄權限;

Linux自學筆記——檔案共享服務之ftp

6) 重新測試,可以上傳檔案了;

Linux自學筆記——檔案共享服務之ftp

也可以删除檔案了;

Linux自學筆記——檔案共享服務之ftp

7) 下載下傳檔案,發現錯誤提示failed to open file;

Linux自學筆記——檔案共享服務之ftp

8) 編輯配置檔案,添加以下項;

Linux自學筆記——檔案共享服務之ftp

9) 重新開機服務後,重新測試,重新上傳檔案,重新下載下傳,會成功下載下傳;

Linux自學筆記——檔案共享服務之ftp

系統使用者的配置:

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) 編輯配置檔案,啟用如下選項;

Linux自學筆記——檔案共享服務之ftp

2) 編輯chroot_list_file;

Linux自學筆記——檔案共享服務之ftp

3) 測試,顯示已被鎖定;

Linux自學筆記——檔案共享服務之ftp

4) 用centos使用者登入,沒有被鎖定在家目錄;

Linux自學筆記——檔案共享服務之ftp

日志:

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

Linux自學筆記——檔案共享服務之ftp

可以看到使用者控制的檔案為/etc/vsftpd/ftpusers;

2) 編輯配置檔案/etc/vsftpd/vsftpd.conf,啟用使用者認證控制,其中userlist_deny=yes代表黑名單,no的話代表白名單;

Linux自學筆記——檔案共享服務之ftp

3) 編輯/etc/vsftpd/ftpusers配置檔案;

Linux自學筆記——檔案共享服務之ftp

4) 重載服務,測試,centos使用者登入不上ftp伺服器;

Linux自學筆記——檔案共享服務之ftp

是否啟用控制使用者登入的清單檔案

userlist_enable=yes

userlist_deny=yes|no #yes為黑名單,no為白名單;

預設檔案為/etc/vsftpd/user_list

1) 編輯/etc/vsftpd/user_list檔案;

Linux自學筆記——檔案共享服務之ftp

2) 測試;

Linux自學筆記——檔案共享服務之ftp

連接配接限制:

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. 在資料庫中建立虛拟使用者賬号;

Linux自學筆記——檔案共享服務之ftp

添加表内容;

Linux自學筆記——檔案共享服務之ftp

b. 建立pam認證所需檔案

Linux自學筆記——檔案共享服務之ftp

c. 建立虛拟使用者映射的本地使用者及對應的目錄;

Linux自學筆記——檔案共享服務之ftp

d. 修改vsftpd的配置檔案,使其使用mysql認證;

編輯/etc/vsftpd/vsftpd.conf檔案,首先確定已經啟用如下選項;

anon_upload_enable=no

anon_mkdir_write_enable=no

并添加以下選項:

guest_enable=yes #啟用虛拟使用者;

guest_username=vuser #指定映射到哪個本地使用者

pam_service_name=vsftpd.mysql

Linux自學筆記——檔案共享服務之ftp

e. 配置虛拟使用者具有不同的通路權限;

vsftpd可以在配置檔案中每一個使用者提供單獨的配置檔案以及定義設定服務通路權限,每個虛拟使用者的配置檔案名同虛拟使用者的使用者名。配置檔案目錄可以是任意未使用的目錄,隻需要在主配置檔案中指明路徑即可;

在主配置檔案中定義目錄;

Linux自學筆記——檔案共享服務之ftp

建立相關目錄及檔案:

Linux自學筆記——檔案共享服務之ftp

note:虛拟使用者對vsftpd服務的通路權限是通過匿名使用者的相關指令進行的。

f. 啟動服務并測試;

Linux自學筆記——檔案共享服務之ftp

note:如果是二進制安裝的mysql,可能會出現登入不了ftp伺服器的情況,因為其socket預設路徑不是/var/lib/mysql/msyql.socket,此時需要編輯/etc/my.cnf檔案修改socket路徑;