天天看點

linux下NFS、FTP使用講解

一、NFS 

1、NFS簡介

NFS全稱是network file system 網絡檔案系統nfs依賴網絡帶寬的支援

NFS允許一個系統在網絡上與他人共享目錄和檔案。通過使用NFS使用者和程式可以像通路本地檔案一樣通路遠端系統上的檔案。

假如有三台機器A, B, C它們需要通路同一個目錄目錄中都是圖檔傳統的做法是把這些圖檔分别放到A, B, C. 但是使用NFS隻需要放到A上然後A共享給B和C即可。通路的時候B和C是通過網絡的方式去通路A上的那個目錄的。

2、安裝、配置NFS服務

需要安裝兩個包(nfs-utils和rpcbind)

#yum install -y nfs-utils  會同時安裝上依賴包rpcbind

提供nfs服務的機器上 vim /etc/exports 輸入以下内容

/home/ 192.168.20.0/24(rw,sync,all_squash,anonuid=501,anongid=501)

共分為三部分

/home/    第一部分是本地要共享出去的目錄

192.168.20.0/24    第二部分為允許通路的主機可以是一個IP也可以是一個IP段

(rw,sync,all_squash,anonuid=501,anongid=501)    第三部分就是小括号裡面的為一些權限選項。權限為讀寫同步限定所有使用者并且限定的uid和gid都為501501賬号必須真實存在。

啟動nfs服務先啟動rpcbind再啟動nfs啟動順序錯誤的話會導緻後面出錯

/etc/init.d/rpcbind start

/etc/init.d/nfs start  

3、NFS配置的一些選項說明

rw 可讀可寫

ro 隻讀

sync 同步模式記憶體中資料時時寫入磁盤

async 不同步把記憶體中資料定期寫入磁盤中

no_root_squash squash的意思為擠壓壓制字面意思為不壓制root的權限加上這個選項後root使用者就會對共享的目錄擁有至高的權限控制就像是對本機的目錄操作一樣。不安全不建議使用

root_squash和上面的選項對應root使用者對共享目錄的權限不高隻有普通使用者的權限即限制了root

all_squash不管使用NFS的使用者是誰他的身份都會被限定成為一個指定的普通使用者身份

anonuid/anongid 要和root_squash 以及all_squash一同使用用于指定使用NFS的使用者限定後的uid和gid前提是本機的/etc/passwd中存在這個uid和gid。

4、用戶端上挂載NFS

用戶端機器也同樣需要安裝nfs包# yum install -y nfs-utils

同時需要檢查iptables清空iptables

關閉selinux防火牆

檢視伺服器端都共享了哪些目錄    #showmount -e 192.168.20.30nfs伺服器的ip位址

用戶端使用showmount -e 時報錯RPC程式沒有注冊

clnt_create: RPC: Program not registered

出錯原因是rpcbind服務與NFS服務啟動順序不對先停止服務重新啟動先啟動rpcbind服務再啟動nfs服務

1

2

<code>[root@localhost ~]</code><code># /etc/init.d/nfs stop</code>

<code>[root@localhost ~]</code><code># /etc/init.d/rpcbind stop</code>

重新啟動後執行顯示正确

3

4

5

<code>[root@localhost ~]</code><code># /etc/init.d/rpcbind start</code>

<code>[root@localhost ~]</code><code># /etc/init.d/nfs start</code>

<code>[root@yong ~]</code><code># showmount -e 192.168.20.30</code>

<code>Export list </code><code>for</code> <code>192.168.20.30:</code>

<code>/home</code> <code>192.168.20.0</code><code>/24</code>

在用戶端上挂載服務端的nfs指令

 mount -t nfs  -o nolock,nfsvers=3 192.168.20.30:/home/ /mnt/     

//如果不加 -onolock,nfsvers=3 則在挂載目錄下的檔案屬主群組都是nobody如果指定nfsvers=3則顯示root

-o nolock    不上鎖指定nfsvers版本是3預設是4

df -h  檢視挂載的情況

實驗測試nfs

伺服器端共享/home目錄允許192.168.20.0網段的機器通路指定使用nfs使用者的身份為501

6

7

8

9

10

11

<code>[root@localhost home]</code><code># cat /etc/exports </code>

<code>/home/</code> <code>192.168.20.0</code><code>/24</code><code>(rw,</code><code>sync</code><code>,all_squash,anonuid=501,anongid=501)</code>

<code>[root@localhost /]</code><code># ls -ld home/</code>

<code>drwxr-xr-x. 8 root root 4096 5月  22 11:33 home/</code>

<code>[root@localhost home]</code><code># ls -ld</code>

<code>rwxr-xr-x  2 root    root    4096 5月  15 15:54 logs</code>

<code>drwx------. 3 mysql   mysql   4096 5月  11 14:47 mysql</code>

<code>drwx------. 4 php-fpm php-fpm 4096 5月  13 14:24 php-fpm</code>

<code>drwx------  2 </code><code>test</code>    <code>test</code>    <code>4096 5月  22 11:40 </code><code>test</code>

<code>[root@localhost home]</code><code># mkdir 111</code>

<code>[root@localhost home]</code><code># chmod 777 111</code>

用戶端機器建立立檔案夾nfs挂載nfs伺服器的/home目錄到nfs目錄挂載後使用df -h檢視已挂載的nfs

<code>[root@yong ~]</code><code># mkdir nfs</code>

<code>[root@yong ~]</code><code># mount -t nfs 192.168.20.30:/home/ /root/nfs/</code>

<code>[root@yong ~]</code><code># df -h</code>

<code>Filesystem            Size  Used Avail Use% Mounted on</code>

<code>/dev/mapper/VolGroup-lv_root</code>

<code>                       </code><code>19G  2.9G   15G  17% /</code>

<code>tmpfs                 250M     0  250M   0% </code><code>/dev/shm</code>

<code>/dev/sda1</code>             <code>477M   46M  407M  11% </code><code>/boot</code>

<code>/dev/sdb2</code>             <code>6.0G   93M  5.6G   2% </code><code>/data</code>

<code>192.168.20.30:</code><code>/home/</code>   <code>18G  2.1G   15G  13% </code><code>/root/nfs</code>

ls -l 列出來共享的目錄的檔案所屬主、組全部為nobody在nfs目錄建立目錄或檔案提示權限被拒絕

<code>[root@yong nfs]</code><code># ls -l</code>

<code>drwxr-xr-x 2 nobody nobody 4096 May 15 15:54 logs</code>

<code>drwx------ 3 nobody nobody 4096 May 11 14:47 mysql</code>

<code>drwx------ 4 nobody nobody 4096 May 13 14:24 php-fpm</code>

<code>drwx------ 2 nobody nobody 4096 May 22 11:40 </code><code>test</code>

<code>[root@yong nfs]</code><code># mkdir abc</code>

<code>mkdir</code><code>: cannot create directory `abc': Permission denied</code>

<code>[root@yong nfs]</code><code># touch 1.txt</code>

<code>touch</code><code>: cannot </code><code>touch</code> <code>`1.txt': Permission denied</code>

伺服器端/home目錄建立111目錄并設定權限為777用戶端進入111目錄下可以建立目錄或檔案建立的檔案所屬主、組都為nobodoy

<code>[root@yong 111]</code><code># ls -l</code>

<code>-rw-r--r-- 1 nobody nobody       0 May 22 13:40 1.txt</code>

取消挂載重新挂載添加參數-o nolock,nfsvers=3 顯示的所屬主則為root進入111目錄建立立檔案檔案所屬主、組權限為501因為用戶端已經存在501 對應賬号為user1是以這裡顯示賬号為user1

<code>[root@yong ~]</code><code># umount /root/nfs/</code>

<code>[root@yong ~]</code><code># mount -t nfs -o nolock,nfsvers=3 192.168.20.30:/home/ /root/nfs/</code>

12

<code>drwxrwxrwx 2 root    root      4096 May 22 14:18 111</code>

<code>drwxr-xr-x 2 root    root      4096 May 15 15:54 logs</code>

<code>drwx------ 3 500   testgroup   4096 May 11 14:47 mysql</code>

<code>drwx------ 4 user1   user1     4096 May 13 14:24 php-fpm</code>

<code>drwx------ 2 php-fpm php-fpm   4096 May 22 11:40 </code><code>test</code>

<code>[root@yong nfs]</code><code># cd 111</code>

<code>[root@yong 111]</code><code># touch 2.txt</code>

<code>-rw-r--r-- 1 user1 user1 0 May 22  2015 2.txt</code>

<code>[root@yong 111]</code><code># id -u user1</code>

<code>501</code>

5、exportfs 指令的使用

-a 全部挂載或者解除安裝

-r 重新挂載

-u 解除安裝某一個目錄

-v 顯示共享的目錄

 /home/ 192.168.20.0/24(rw,sync,no_root_squash) 不限制root使用者用戶端再建立的使用者的所屬主組都是root

可以進行更改權限删除檔案。

改變/etc/exports配置檔案後不用重新開機nfs服務執行指令#exportfs -arv  使/etc/exports配置檔案生效

我們還可以把要挂載的nfs目錄寫到client上的/etc/fstab檔案中  192.168.20.10:/tmp/ /test nfs nolock 0 0  然後 mount -a

實驗測試伺服器端更改nfs配置不壓制root的權限

<code>/home/</code> <code>192.168.20.0</code><code>/24</code><code>(rw,</code><code>sync</code><code>,no_root_squash)</code>

<code>[root@localhost home]</code><code># exportfs -arv</code>

<code>exporting 192.168.20.0</code><code>/24</code><code>:</code><code>/home</code>

用戶端挂載nfs不指定nfsvers版本顯示的賬号還是為nobody但是可以直接建立檔案已經有root權限

<code>[root@yong ~]</code><code># cd nfs/</code>

<code>drwxrwxrwx 2 nobody nobody 4096 May 22 14:25 111</code>

<code>-rw-r--r-- 1 nobody nobody    0 May 22  2015 1.txt</code>

取消挂載nfs重新指定參數挂載挂載後顯示賬号為root

<code>drwxrwxrwx 2 root    root      4096 May 22 14:25 111</code>

<code>-rw-r--r-- 1 root    root         0 May 22  2015 1.txt</code>

二、ftp

1、什麼是ftp

FTP 是File Transfer Protocol檔案傳輸協定的英文簡稱而中文簡稱為 “文傳協定” 用于Internet上的控制檔案的雙向傳輸。

FTP的主要作用就是讓使用者連接配接上一個遠端計算機這些計算機上運作着FTP伺服器程式檢視遠端計算機有哪些檔案然後把檔案從遠端計算機上拷到本地計算機或把本地計算機的檔案送到遠端計算機去。

在CentOS或者RedHat Linux上有自帶的ftp軟體叫做vsftpd。

2、使用pure-ftpd搭建FTP服務

pure-ftpd 官網 http://www.pureftpd.org/project/pure-ftpd  

pure-ftpd 是服務端工具

先安裝epel擴充源然後安裝pure-ftpd包

#yum install -y epel-release

#yum install -y pure-ftpd

yum list 可以檢視包所在的源

<code>[root@pma ~]</code><code># yum list |grep pure-ftpd</code>

<code>pure-ftpd.i686                        1.0.30-1.el6                  epel   </code>

<code>pure-ftpd-selinux.i686                1.0.30-1.el6                  epel</code>

pure-ftpd 配置模闆參考

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<code>cat</code> <code>/etc/pure-ftpd/pure-ftpd</code><code>.conf</code>

<code>ChrootEveryone              </code><code>yes</code>

<code>BrokenClientsCompatibility  no</code>

<code>MaxClientsNumber            50</code>

<code>Daemonize                   </code><code>yes</code>

<code>MaxClientsPerIP             8</code>

<code>VerboseLog                  no</code>

<code>DisplayDotFiles             </code><code>yes</code>

<code>AnonymousOnly               no</code>

<code>NoAnonymous                 </code><code>yes</code>

<code>SyslogFacility              </code><code>ftp</code>

<code>DontResolve                 </code><code>yes</code>

<code>MaxIdleTime                 15</code>

<code>PureDB                       </code><code>/etc/pure-ftpd/pureftpd</code><code>.pdb</code>

<code>LimitRecursion              3136 8</code>

<code>AnonymousCanCreateDirs      no</code>

<code>MaxLoad                     4</code>

<code>AntiWarez                   </code><code>yes</code>

<code>Umask                       133:022</code>

<code>MinUID                      10</code>

<code>AllowUserFXP                no</code>

<code>AllowAnonymousFXP           no</code>

<code>ProhibitDotFilesWrite       no</code>

<code>ProhibitDotFilesRead        no</code>

<code>AutoRename                  no</code>

<code>AnonymousCantUpload         no</code>

<code>CustomerProof              </code><code>yes</code>

生成随機字元串使用者名長度為5沒有特殊字元沒有數字沒有大寫字母密碼沒有特殊字元然後重定向到一個檔案中

如果沒有mkpasswd指令需要安裝expect包# yum install -y expect

user=`mkpasswd -l 5 -s 0 -d 0 -C 0`

pass=`mkpasswd -s 0`

echo $user $pass &gt; /tmp/ftp.pass

<code>[root@localhost ~]</code><code># cat /tmp/ftp.pass </code>

<code>zwdlc EEoz14swg</code>

建立ftp服務的目錄用于共享

#mkdir /data/ftp  

#echo -e "$pass\n$pass"|pure-pw useradd $user -u test -d /data/ftp/

pure-pw 建立一個使用者

-u test 映射一個使用者系統裡必須存在的使用者。使用建立的随機使用者映射到系統裡的使用者

pure-pw mkdb    #建立密碼檔案把使用者和密碼儲存到一個二進制的檔案中。路徑在/etc/pure-ftpd/pure-ftpd.conf配置檔案裡PureDB指定的路徑中

<code>[root@localhost ~]</code><code># ls -l /etc/pure-ftpd/pureftpd.pdb</code>

<code>-rw------- 1 root root 2141 5月  22 15:24 </code><code>/etc/pure-ftpd/pureftpd</code><code>.pdb</code>

pure-pw list     #列出使用者

<code>[root@localhost ~]</code><code># pure-pw list</code>

<code>zwdlc               </code><code>/data/ftp/</code><code>./</code>

pure-pw userdel $user     #删除賬号

/etc/init.d/pure-ftpd  start  #啟動服務監聽端口為21

ftp用戶端需要安裝lftp包#yum install -y lftp

輸入指令 #lftp 使用者名@ftp伺服器ip位址     

使用者名為伺服器建立的随機使用者名ftp伺服器ip位址輸入密碼就登入ftp伺服器

put 檔案 上傳到ftp服務端

get 檔案 下載下傳到本地用戶端目錄

<code>[root@yong nfs]</code><code># lftp [email protected]</code>

<code>Password: </code>

<code>lftp [email protected]:/&gt; get nginx-1.6.2.</code><code>tar</code><code>.gz </code>

<code>804164 bytes transferred</code>

2、vsftp配置ftp服務

服務端安裝yum install -y vsftpd db4-utils

建立虛拟賬号相關聯的系統賬号 useradd virftp -s /sbin/nologin  

建立虛拟賬戶相關的檔案  vim  /etc/vsftpd/vsftpd_login //内容如下

    test1

    123456

    test2

    abcdef

chmod 600 /etc/vsftpd/vsftpd_login

生成對應的庫檔案 db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db

db_load指令可以将使用者文本資訊檔案轉換為db資料庫并使用hash加密。

選項-T允許應用程式能夠将文本檔案轉譯載入進資料庫。由于我們之後是将虛拟使用者的資訊以檔案方式存儲在檔案裡的為了讓Vsftpd這個應用程式能夠通過文本來載入使用者資料必須要使用這個選項。

指定了選項-T那麼一定要追加子選項-t ;    子選項-t追加在在-T選項後用來指定轉譯載入的資料庫類型。

hash就是使用hash碼加密。

-f 參數後面接包含使用者名和密碼的文本檔案檔案的内容是:奇數行使用者名、偶數行密碼

如果更改密碼更改檔案後還需要db_load一下并重新開機ftp服務使其生效

建立虛拟賬号相關的目錄以及配置檔案 mkdir  /etc/vsftpd/vsftpd_user_conf

cd   /etc/vsftpd/vsftpd_user_conf  建立和使用者對應的配置檔案

vim test1 内容如下

<code>local_root=</code><code>/home/virftp/test1</code>

<code>anonymous_enable=NO</code>

<code>write_enable=YES</code>

<code>local_umask=022</code>

<code>anon_upload_enable=NO</code>

<code>anon_mkdir_write_enable=NO</code>

<code>idle_session_timeout=600</code>

<code>data_connection_timeout=120</code>

<code>max_clients=10</code>

<code>max_per_ip=5</code>

<code>local_max_rate=50000</code>

mkdir /home/virftp/test1

修改權限 chown -R virftp:virftp /home/virftp

vim /etc/pam.d/vsftpd   使用者認證的配置檔案在最開頭添加兩行

auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login   //如果是64位系統則改為/lib64/security/pam_userdb.so

account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login   //如果是64位系統則改為/lib64/security/pam_userdb.so

再修改vsftpd主配置檔案

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES改為anonymous_enable=NO    匿名使用者

#anon_upload_enable=YES 改為 anon_upload_enable=NO    匿名上傳禁止

#anon_mkdir_write_enable=YES 改為 anon_mkdir_write_enable=NO 匿名建立目錄禁止

再增加

chroot_local_user=YES

guest_enable=YES

guest_username=virftp

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftpd_user_conf

啟動vsftpd服務/etc/init.d/vsftpd start  

啟動vsftp服務報錯vsftp.conf主配置檔案guest_enable這一行錯誤的變量值。查找原因是因為這一行最後有空格所有配置檔案末尾不能有空格删除空格後正常啟動服務

為 vsftpd 啟動 vsftpd500 OOPS: bad bool value in config file for: guest_enable

用戶端實驗驗證

ftp用戶端需要安裝lftp包yum install -y lftp

登入指令lftp test1@ftp服務端的ip位址 

用戶端通路ftp伺服器故意輸錯密碼竟然也能登入但是執行ls就提示登入失敗使用正确密碼登入使用ls正常

<code>[root@localhost ~]</code><code># lftp </code>

<code>[email protected]</code>

<code>密碼: </code>

<code>lftp [email protected]:~&gt; </code><code>ls</code>          

<code>ls</code><code>: 登入失敗: 530 Login incorrect.              </code>

<code>lftp [email protected]:~&gt; </code><code>exit</code>

<code>[root@localhost ~]</code><code># lftp [email protected]</code>

<code>-rw-r--r--    1 0        0               0 May 24 15:21 1.txt</code>

put上傳一個檔案ls檢視檔案的所屬主、組為501在ftp伺服器檢視顯示為virftp賬号對應的uid即501

<code>lftp [email protected]:/&gt; put 1.sql </code>

<code>1851 bytes transferred</code>

<code>lftp [email protected]:/&gt; </code><code>ls</code> <code>-l</code>

<code>-rw-r--r--    1 501      501          1851 May 24 15:23 1.sql</code>

<code>[root@yonglinux test1]</code><code># ls -l</code>

<code>-rw-r--r-- 1 virftp virftp 1851 5月  24 23:23 1.sql</code>

<code>-rw-r--r-- 1 root   root      0 5月  24 23:21 1.txt</code>

<code>[root@yonglinux ~]</code><code># tail -1 /etc/passwd</code>

<code>virftp:x:501:501::</code><code>/home/virftp</code><code>:</code><code>/sbin/nologin</code>

本文轉自 模範生 51CTO部落格,原文連結:http://blog.51cto.com/mofansheng/1654731,如需轉載請自行聯系原作者

繼續閱讀