1. 程式人生 > >exportfs命令、NFS客戶端問題、FTP介紹、使用vsftpd搭建ftp服務

exportfs命令、NFS客戶端問題、FTP介紹、使用vsftpd搭建ftp服務

奇數 嚴重 lib64 filezilla 文件中 屬組 int 服務器程序 ftp服務器

exportfs命令

exportfs命令用來管理當前NFS共享的文件系統列表。

常用選項

  • -a:全部卸載或全部掛載
  • -r:重新掛載
  • -u:卸載某個目錄
  • -v:顯示共享目錄

  • 常用組合:exportfs -arv
  • 服務端更改配置文件後,不重啟服務,直接執行該命令就可以使更改後的配置文件生效。

註意: 在重啟nfs服務之前需要先將所有掛載點卸載,否則將發生程序錯誤,嚴重者會拖垮系統。

以上操作都在服務端進行!

測試

在服務端的/etc/exports配置文件中,增加一行。把/tmp/目錄單獨共享給192.168.159.132這個ip。

[root@localhost ~]# vim /etc/exports
......
/tmp 192.168.159.132(rw.sync,no_root_squash)

重新使配置文件生效:
[root@localhost ~]# exportfs -arv
exporting 192.168.159.132:/tmp
exporting 192.168.159.0/24:/home/nfstestdir

檢查客戶端是否有權限訪問服務端文件:
[root@localhost ~]# showmount -e 192.168.159.131
Export list for 192.168.159.131:
/home/nfstestdir 192.168.159.0/24
/tmp             192.168.159.132
// 發現並沒有重啟nfs服務,配置就已經生效了

在客戶端上將tmp目錄掛載到mnt目錄下
[root@localhost ~]# mount -t nfs 192.168.159.131:/tmp/ /mnt/

[root@localhost ~]# df -h
文件系統              容量  已用  可用 已用% 掛載點
......
192.168.159.131:/tmp   16G  5.2G   11G   33% /mnt

// 現在客戶端服務器上的/mnt/目錄就是服務端服務器的/tmp/目錄

在客戶端的/mnt/目錄下創建文件,並查看目錄下的文件,能看到新建的文件1.txt和2.txt文件的屬組屬主都是root
[root@localhost ~]# touch /mnt/1.txt
[root@localhost ~]# ls -l /mnt
總用量 0
-rw-r--r--. 1 root root  0 1月  17 21:15 1.txt

再看服務端的/tmp/目錄,1.txt文件的屬組和屬主也都是root
[root@localhost ~]# ls -l /tmp/
總用量 0
-rw-r--r--. 1 root root  0 1月  17 21:15 1.txt
  • 這是因為服務端的配置文件中,使用了no_root_squash,所以root用戶就不受約束,在客戶端上的掛載點下就可以想在本地盤使用root用戶一樣,是不受限制的(通常情況下,不限制root用戶的比較多。)

NFS客戶端問題

  • NFS 4版本會有該問題
  • 客戶端掛載共享目錄後,不管是root用戶還是普通用戶,創建新文件時屬主、屬組為nobody
  • 客戶端掛載時加上 -o nfsvers=3
  • 客戶端和服務端都需要
  • vim /etc/idmapd.conf //
  • 把“#Domain = local.domain.edu” 改為 “Domain = xxx.com” (這裏的xxx.com,隨意定義吧),然後再重啟rpcidmapd服務

在centos6中,遇到的問題比較多,針對的NFS 4版本有這個問題

  • 問題:客戶端掛載共享目錄後,不管是root用戶還是普通用戶,創建新文件時屬主、屬組為nobody,雖然已經定義了 no_root_squash 不在限制root用戶,最終創建完文件後發現屬主和屬組不是root或者是限定的1000,而是顯示的是 nobody ,這就是NFS 4版本出現的問題,尤其是在centos6 系統上
  • 解決辦法:

    • 方法一:是在客戶端掛載的時候,加上-o nfsvers=3 ,意思就是指定NFS的版本為 3 ,不在用4的版本

      • mount -t nfs -o nfsvers=3 192.168.202.130:/tmp/ /mnt/
        • 若是不想卸載,直接掛載,可以使用mount -t nfs -oremount,nfsvers=3 192.168.202.130:/tmp/ /mnt/ (前提是先掛載上去)
    • 方法二:更改配置文件vim /etc/idmapd.conf ,把“#Domain = local.domain.edu” 改為 “Domain = xxx.com” (這裏的xxx.com,隨意定義吧),然後再重啟rpcidmapd服務
      • 在cnetos7中,本身是沒有rpcidmapd服務的,只需要重啟rpcbind服務就可以了

FTP 介紹

FTP(file transfer protocol)文件傳輸協議,用於在Internet上控制文件的雙向傳輸。FTP主要作用是讓用戶連接一個遠程計算機(這些計算機上運行著FTP服務器程序)查看遠程計算機有哪些文件,然後把文件從遠程計算機上拷貝到本地計算機,或把本地文件傳送到遠程計算機。
該服務在小公司用的比較多,由於FTP服務的安全性較差,所以大公司不使用該服務。

使用vsftpd 搭建ftp服務

centos 上自帶vsftpd 軟件包

  • 安裝

    [root@localhost ~]# yum install -y vsftpd

  • 創建用戶

    vsftpd可以使用系統級別的用戶進行登錄,但是這樣做不安全,所以需要使用vsftpd創建一個虛擬用戶。在此創建一個系統普通用戶的作用是使vsftpd的虛擬用戶來進行映射,然後完成數據的傳輸。

    [root@localhost ~]# useradd -s /sbin/nologin virftp

  • 編輯虛擬用戶的密碼文件

    [root@localhost ~]# vim /etc/vsftpd/vsftpd_login
    testuser1
    123456
    user1
    112233
    // 註意,配置文件中的奇數行為用戶名,偶數行為密碼。

    配置完需要給密碼文件配置權限
    [root@localhost ~]# chmod 600 /etc/vsftpd/vsftpd_login

  • 將文本形式的密碼文件轉化成計算機識別的二進制文件

    [root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
    [root@localhost ~]# ls -l /etc/vsftpd/
    ......
    -rw-------. 1 root root 30 1月 17 15:08 vsftpd_login
    -rw-r--r--. 1 root root 12288 1月 17 15:12 vsftpd_login.db
    // 生成了一個vsftpd_login.db 文件,這個文件是不能cat的

  • 創建虛擬用戶配置文件

    創建配置文件目錄:
    [root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf

    切換到新建目錄下:
    [root@localhost ~]# cd /etc/vsftpd/vsftpd_user_conf/

    創建第一個用戶的配置文件:
    [root@localhost vsftpd_user_conf]# vim testuser1
    // 虛擬用戶的配置文件名要和虛擬用戶名稱保持一致。
    // 將下面的內容放到配置文件中。
    local_root=/home/virftp/testuser1
    // 定義虛擬用戶家目錄
    anonymous_enable=NO
    // 是否允許匿名用戶登錄
    write_enable=YES
    // 是否可寫
    local_umask=022
    // 定義創建新文件時的默認權限
    anon_upload_enable=NO
    // 是否允許匿名用戶上傳文件
    anon_mkdir_write_enable=NO
    // 是否允許匿名用戶創建目錄文件
    idle_session_timeout=600
    // 空閑用戶保留時間,600秒無操作自動斷開。
    data_connection_timeout=120
    // 數據傳輸超時時間
    max_client=10
    // 客戶端最大連接數量

  • 創建虛擬用戶家目錄

    創建虛擬用戶家目錄:
    [root@localhost vsftpd_user_conf]# mkdir /home/virftp/testuser1

    創建一個文件,登錄時可以看見
    [root@localhost vsftpd_user_conf]# touch /home/virftp/testuser1/testftp.txt

    修改虛擬用戶家目錄的屬主屬組:
    [root@localhost vsftpd_user_conf]# chown -R virftp:virftp /home/virftp

    編輯vsftpd的認證文件:
    [root@localhost vsftpd_user_conf]# vim /etc/pam.d/vsftpd
    // 這個是登錄ftp時的認證文件。
    // 將下面兩行代碼加在文件開頭
    #%PAM-1.0
    auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
    account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

    // 這兩行代碼用於指定用戶密碼文件位置

    // 在centos6中因為區分32位和64版本,所以註意文件是在lib32還是lib64中。如果是32位,路徑寫了lib64,導致服務啟動失敗。

  • 編輯vsftpd主配置文件

    [root@localhost vsftpd_user_conf]# vim /etc/vsftpd/vsftpd.conf
    ......
    anonymous_enable=NO
    // 由YES改成NO。不允許匿名用戶登錄
    anon_upload_enable=NO
    // 取消前面的註釋,由YES改成NO。不允許匿名用戶上傳文件。
    anon_mkdir_write_enable=NO
    // 取消前面的註釋,由YES改成NO。不允許創建目錄
    ......
    在文件最後加入下面內容:
    chroot_local_user=YES
    guest_enable=YES
    guest_username=virftp
    // 開啟虛擬用戶和系統用戶的映射
    virtual_use_local_privs=YES
    // 告訴服務使用虛擬用戶
    user_config_dir=/etc/vsftpd_user_conf
    // 定義虛擬用戶配置文件路徑
    allow_writeable_chroot=YES

  • 啟動服務

    啟動服務:
    [root@localhost vsftpd_user_conf]# systemctl start vsftpd

    查看進程:
    [root@localhost vsftpd_user_conf]# ps aux | grep vsftp
    root 2795 0.0 0.0 53216 572 ? Ss 16:11 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
    root 2797 0.0 0.0 112680 976 pts/0 R+ 16:11 0:00 grep --color=auto vsftp
    // 進程已經存在

    查看監聽端口:
    [root@localhost vsftpd_user_conf]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp6 0 0 :::21 :::* LISTEN 2795/vsftpd

    // vsftpd 服務監聽21端口
    // FTP服務監聽21端口;sshd監聽22端口;telnet監聽23端口。

  • 測試

    安裝linux下的ftp客戶端:
    [root@localhost ~]# yum install -y lftp

    使用虛擬用戶登錄ftp客戶端:
    [root@localhost ~]# lftp [email protected]
    口令:

    lftp [email protected]:~> ls
    drwxr-xr-x 2 1004 1005 25 Jan 17 07:24 testuser1
    lftp [email protected]:/> ls testuser1
    -rw-r--r-- 1 1004 1005 0 Jan 17 07:24 testftp.txt
    // 使用ls命令查看虛擬用戶家目錄下的文件有哪些,發現之前創建的文件。
    // ls 報錯500,沒有關閉selinux

    lftp [email protected]:/> ?
    // ? 可以查看ftp支持哪些命令。

    將testftp.txt 傳輸到本機:
    lftp [email protected]:/> get testuser1/testftp.txt
    lftp [email protected]:/> quit
    [root@localhost ~]# ls
    testftp.txt

    // 接受文件的目錄為當前目錄,即進入ftp服務的目錄。
    // 常用的命令put、get

windows 上可以使用filezilla 軟件測試ftp服務。

  • 使用xshell實現FTP功能

    • 方法一:使用sftp

    新建會話→名稱自定→協議選擇SFTP→主機為遠程主機ip→端口號默認22。

    連接遠程主機,使用常用的用戶名密碼,即可登錄ftp。

    右鍵遠程連接屬性,sftp可以設置下載的文件存放位置

    • 方法二:使用xftp
      在xshell中退出當前會話使用組合鍵:Ctrl+Alt+F,提示下載,下載安裝後即可使用。

exportfs命令、NFS客戶端問題、FTP介紹、使用vsftpd搭建ftp服務