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

55.exportfs命令 NFS客戶端問題 FTP介紹與使用vsftpd搭建ftp

14.4 exportfs命令

14.5 NFS客戶端問題

15.1 FTP介紹

15.2/15.3 使用vsftpd搭建ftp

 

 

 

 

14.4 exportfs命令:

 

 

exportfs命令是跟nfs-utils包一起安裝的

應用場景:我們共享了一個目錄,需要更改或者增加目錄,就需要更改配置檔案和重啟NFS服務。如果遠端客戶端正在掛載著使用著,如果停掉遠端客戶端就會掛起(nginx或者php),這個影響會很大。就是D程序不可中斷的程序。只能先解除安裝下來(umount)在重啟NFS,但有幾十臺機器就不合適了。就會使用exportfs

 

 

~~1.

exportfs常用選項

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

一般使用 -arv,就會讓配置檔案生效

-r 重新掛載

-u 解除安裝某一個目錄

-v 顯示共享目錄

以下操作在服務端上

vim /etc/exports //增加

/tmp/ 192.168.30.0/24(rw,sync,no_root_squash)

exportfs -arv //不用重啟nfs服務,配置檔案就會生效

 

~~2.

以下操作在客戶端

mount -t nfs 192.168.30.134:/tmp /tmp

或mount -t nfs -o nfsvers=3 192.168.30.134:/tmp/ /mnt/ #(為解決已經出現nobody,下一節有講)。要先umonut /mnt/

ls -l !$

-oremount,nfsvers=3 (-o重新掛在完以後,可以使用-oremount。不解除安裝的話不能直接-oremount)

 

 

 

 

例項:

~~1.

[root@afeilinux-01 ~]# vim /etc/exports 開啟那個配置檔案

/home/nfstestdir 192.168.30.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

/tmp/ 192.168.30.134(rw,sync,no_root_squash) 在下面加入一行配置,選了no_root_squash(不限制root)此時寫的是服務端的IP

[root@afeilinux-01 ~]# exportfs -arv 再exportfs -arv 重新載入顯示共享目錄

報錯

exportfs: No options for /home/nfstestdir : suggest (sync) to avoid warning
exportfs: No options for 192.168.30.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) : suggest (sync) to avoid warning
exportfs: No options for 192.168.30.134/24(rw,sync,no_root_squash,no_subtree_check) : suggest (sync) to avoid warning
exporting :192.168.30.134/24(rw,sync,no_root_squash,no_subtree_check)
exportfs: Failed to stat 192.168.30.134/24(rw,sync,no_root_squash,no_subtree_check): No such file or directory
exporting :192.168.30.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
exportfs: Failed to stat 192.168.30.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000): No such file or directory
exporting :/home/nfstestdir

檢查配置檔案

[root@afeilinux-01 ~]# vim /etc/exports

/home/nfstestdir 192.168.30.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
/tmp/ 192.168.30.134/24(rw,sync,no_root_squash)

發現第一行配置檔案只能寫成一行,兩行會報錯。第二行少了/。

exporting 192.168.30.134/24:/tmp
exporting 192.168.30.0/24:/home/nfstestdir

顯示有了

雙方關閉防火牆和selinux,不然會報錯

 cat /var/log/messages | grep mount
 

~~2.

[root@afeilinux-02 ~]# showmount -e 192.168.30.134 在02上showmount看一下有沒有

Export list for 192.168.30.134:
192.168.30.134/24(rw,sync,no_root_squash)                     *
192.168.30.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) *
/home/nfstestdir 

[root@afeilinux-02 ~]# mount -t nfs 192.168.30.134:/tmp/ /mnt/ 在02上掛載到/mnt(這時的IP寫的是服務端的,就是制定服務端的IP及共享的目錄)到本機的/mnt

此時,02的/mnt就是01的/tmp

mount.nfs: /mnt is busy or already mounted

[root@afeilinux-02 ~]# df -h 看一下有沒有這個掛載

檔案系統                         容量  已用  可用 已用% 掛載點
/dev/sda3                         46G  4.9G   41G   11% /
devtmpfs                         476M     0  476M    0% /dev
tmpfs                            487M  7.7M  479M    2% /run
tmpfs                            487M     0  487M    0% /sys/fs/cgroup
192.168.30.134:/home/nfstestdir   46G  4.9G   41G   11% /mnt

是有的

在[root@afeilinux-02 mnt]#下掛載

mount -t nfs 192.168.30.134:/tmp/ /mnt/

建立檔案報錯

 vi /mnt/1212.txt

檔案無法儲存

取消掛載

 [root@afeilinux-02 mnt]# umount -l  192.168.30.134:/tmp/ /mnt/

再掛載

[root@afeilinux-02 ~]# mount -t nfs 192.168.30.134:/tmp/ /mnt/

[root@afeilinux-02 ~]# vi /mnt/1212.txt 在02上測試一下,在02的掛載點/mnt下建個檔案

[root@afeilinux-02 ~]# ls -l /mnt/1212.txt 看一下

-rw-r--r--. 1 root root 0 7月  31 14:21 /mnt/1212.txt

屬主屬組為root

[root@afeilinux-01 ~]# ls -l /tmp/1212.txt 回到01上看一下

-rw-r--r--. 1 root root 0 7月  31 14:21 /tmp/1212.txt

屬主屬組也是root

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

14.5 NFS客戶端問題:

 

 

~~NFS 4版本會有該問題,尤其是centos6

~~應用場景:客戶端掛載共享目錄後,不管是root使用者還是普通使用者,建立新檔案時屬主、屬組為nobody。

方法如下兩種:

~1.

客戶端掛載時加上 -o nfsvers=3 #指定為3版本

 

~2.客戶端和服務端都需要

vim /etc/idmapd.conf //

把“#Domain = local.domain.edu” 改為 “Domain = xxx.com” (這裡的xxx.com,隨意定義吧),然後再重啟rpcidmapd服務(在centos7上是沒有rpcidmapd服務的,需要的話重啟rpcbind就可以)

 

 

 

例項:

客戶端和服務端都需要

vim /etc/idmapd.conf //

把“#Domain = local.domain.edu” 改為 “Domain = xxx.com” (這裡的xxx.com,隨意定義吧),然後再重啟rpcidmapd服務(在centos7上是沒有rpcidmapd服務的,需要的話重啟rpcbind就可以)

需要的話重啟rpcbind就可以

[root@afeilinux-02 ~]# umount /mnt/ 先解除安裝02的掛載點

[root@afeilinux-02 ~]# mount -t nfs -o,nfsvers=3 192.168.30.134:/tmp/ /mnt/ 再 -o,nfsvers=3

[root@afeilinux-02 ~]# mount -t nfs -oremount,nfsvers=3 192.168.30.134:/tmp/ /mnt/ 執行完上一步,才能-umount(沒什麼用,因為上一步已經掛載了,只是為了體現remount吧)

-rw-r--r--. 1 root root 0 7月  31 14:34 /mnt/1213.txt

不明白客戶端掛載共享目錄後,不管是root使用者還是普通使用者,建立新檔案時屬主、屬組為nobody。

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

15.1 FTP介紹:

 

 

應用場景:之前接觸過lrzsz(windows與linux互傳)。在檔案太大(超過4G)或者,使用阿里雲的機器存在跳板機(一臺機器調到另一臺機器,中間就有一個跳板機)的情況下,lrzsz會不好使。

FTP就可以解決。可以讓我們在linux伺服器上,搭建FTP服務。客戶端上(比如windows)安裝一個客戶端軟體。就可以連到服務端,吧本地的檔案傳到伺服器上去,也可以把伺服器的檔案下載到本地來。這就是FTP伺服器

 

~1.FTP是File Transfer Protocol(檔案傳輸協議,簡稱文傳協議)的英文簡稱,用於在Internet上控制檔案的雙向傳輸。

~2.FTP的主要作用就是讓使用者連線一個遠端計算機(這些計算機上執行著FTP伺服器程式),並檢視遠端計算機中的檔案,然後把檔案從遠端計算機複製到本地計算機,或把本地計算機的檔案傳送到遠端計算機。

~3.小公司用的多,大企業不用FTP,因為不安全 (使用自動化釋出的工具,可理解為版本的更新上線)

 

 

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

15.2/15.3 使用vsftpd搭建ftp:

 

 

 

centos上自帶的ftp服務軟體包就叫vsftpd

 

~1.centos上自帶vsftpd

~2.yum install -y vsftpd

~3.useradd -s /sbin/nologin virftp

因為建立普通使用者是可以通過ftp來登入系統的,這樣不安全。所以要要設定一個虛擬使用者,讓他無法登入系統

建立普通使用者的目的就是讓這些虛擬的使用者做一個對映的。就是在上傳或者下載的時候要有一個使用者去執行,就是我們再次建立的這個使用者

~4.vim /etc/vsftpd/vsftpd_login //內容如下,奇數行為使用者名稱,偶數行為密碼,多個使用者就寫多行

這個檔案為虛擬使用者的密碼檔案,定義使用者名稱和密碼

testuser1

aminglinux

~5.chmod 600 /etc/vsftpd/vsftpd_login

~6.db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db

db_load將這個密碼檔案轉換成計算機識別的二進位制檔案

.db這個檔案是不能直接cat的

~7.mkdir /etc/vsftpd/vsftpd_user_conf

建立虛擬使用者的配置檔案所在的目錄,也是自定義的

~8.cd /etc/vsftpd/vsftpd_user_conf

~9.vim testuser1 //加入如下內容 建立第一個使用者的配置檔案,使用者的名字要跟上面定義的使用者名稱保持一致(~4.)

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 #當我們連線ftp空閒時間段,超出600秒斷開(斷開後重新登入)

data_connection_timeout=120 #資料傳輸的超出時間

max_clients=10 #最大的客戶端是多少

~10. mkdir /home/virftp/testuser1 #建立虛擬使用者的家目錄

touch /home/virftp/testuser1/aming.txt #測試的時候會看到這個檔案(lftp)

chown -R virftp:virftp /home/virftp

vim /etc/pam.d/vsftpd //在最前面加上 #用來定義密碼檔案在哪裡(這個檔案是用來認證的一個檔案)。登入ftp需要有一個認證的過程,什麼樣的形式,去哪裡找密碼庫,比對輸入的使用者密碼對不對

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

紅色標記的這個檔案必須要是存在的,64位的

account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

~11.vim /etc/vsftpd/vsftpd.conf #編輯vsftpd的主配置檔案

將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 #虛擬使用者要對映到一個系統的使用者(就是我們之前操作的)。就使用guest_username

virtual_use_local_privs=YES #告訴服務我們現在使用的是虛擬服務

user_config_dir=/etc/vsftpd/vsftpd_user_conf #定義虛擬檔案配置檔案所在的路徑

allow_writeable_chroot=YES

~12.systemctl start vsftpd //啟動vsftpd服務

測試ftp:

~1.yum install -y lftp #為測試方便我們在linux上安裝測試軟體

也可以在windows上安裝ftp客戶端。filezilla client

lftp [email protected]

執行命令ls,看是否正常輸出

若不正常檢視日誌/var/log/messages和/var/log/secure

windows下安裝filezilla客戶端軟體,進行測試

 

 

 

例項:

[root@afeilinux-01 ~]# yum install -y vsftpd

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

[root@afeilinux-01 ~]# vim /etc/vsftpd/vsftpd_login

testuser1
aminglinux

[root@afeilinux-01 ~]# chmod 600 /etc/vsftpd/vsftpd_login

[root@afeilinux-01 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db

[root@afeilinux-01 ~]# ls -l /etc/vsftpd/

總用量 36
-rw-------. 1 root root   125 10月 31 2018 ftpusers
-rw-------. 1 root root   361 10月 31 2018 user_list
-rw-------. 1 root root  5116 10月 31 2018 vsftpd.conf
-rwxr--r--. 1 root root   338 10月 31 2018 vsftpd_conf_migrate.sh
-rw-------. 1 root root    38 7月  31 15:19 vsftpd_login
-rw-r--r--. 1 root root 12288 7月  31 15:23 vsftpd_login.db

[root@afeilinux-01 ~]# mkdir /etc/vsftpd/vsftpd_user_conf

[root@afeilinux-01 ~]# cd /etc/vsftpd/vsftpd_user_conf/

[root@afeilinux-01 vsftpd_user_conf]#

[root@afeilinux-01 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
data_connection_timeout=120
max_clients=10

[root@afeilinux-01 vsftpd__user_conf]# mkdir /home/virftp/testuser1

[root@afeilinux-01 vsftpd__user_conf]# touch /home/virftp/testuser1/aming.txt

[root@afeilinux-01 vsftpd__user_conf]# chown -R virftp:virftp /home/virftp

[root@afeilinux-01 vsftpd__user_conf]# vim /etc/pam.d/vsftpd

#%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

#%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
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      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

[root@afeilinux-01 vsftpd__user_conf]# ls /lib64/security/pam_userdb.so #檢查這個檔案是存在的

/lib64/security/pam_userdb.so

[root@afeilinux-01 vsftpd__user_conf]# vim /etc/vsftpd/vsftpd.conf

# Allow anonymous FTP? (Beware - allowed by default if you comment this out). #這一行的下一行修改

anonymous_enable=NO 修改為NO

# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access #這一行的下一行修改

anon_upload_enable=NO 註釋去掉,修改為NO

# new directories. #這一行的下一行修改

anon_mkdir_write_enable=NO #註釋去掉,修改為NO

主配置檔案的最下面加入:

chroot_local_user=YES

guest_enable=YES

guest_username=virftp

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftpd_user_conf

allow_writeable_chroot=YES

[root@afeilinux-01 vsftpd__user_conf]# systemctl start vsftpd

[root@afeilinux-01 vsftpd__user_conf]# ps aux |grep vsftpd

root       5647  0.0  0.0  53276   572 ?        Ss   15:46   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       5652  0.0  0.0 112724   988 pts/0    R+   15:49   0:00 grep --color=auto vsftpd

[root@afeilinux-01 vsftpd__user_conf]# netstat -lntp

tcp6 0 0 :::21 :::* LISTEN 2565/vsftpd vsftpd監聽21埠

測試:

tcp        0      0 0.0.0.0:36653           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      5532/rpc.mountd     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      864/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      981/master          
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:47234           0.0.0.0:*               LISTEN      4701/rpc.statd      
tcp6       0      0 :::3306                 :::*                    LISTEN      1128/mysqld         
tcp6       0      0 :::45100                :::*                    LISTEN      -                   
tcp6       0      0 :::39311                :::*                    LISTEN      4701/rpc.statd      
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::20048                :::*                    LISTEN      5532/rpc.mountd     
tcp6       0      0 :::21                   :::*                    LISTEN      5647/vsftpd         
tcp6       0      0 :::22                   :::*                    LISTEN      864/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      981/master          
tcp6       0      0 :::2049                 :::*                    LISTEN      -    

[root@afeilinux-01 ~]# yum install -y lftp

[root@afeilinux-01 ~]# lftp [email protected]

口令:

lftp [email protected]:~> ls

-rw-r--r--    1 1002     1002            0 Jul 31 07:34 aming.txt

lftp [email protected]:/> get testuser1/aming.txt

49 bytes transferred

lftp [email protected]:/> exit

[root@afeilinux-01 ~]# ls

testuser1

[root@afeilinux-01 ~]# cat aming.txt

dfsdfsgfsgfsdfsd

sdgfsdfsdfsd

sdfsdfsdfsdfsfsfsd

 

 

 

xshell怎麼實現跟ftp類似的功能:

兩種方法~1.與~2.

~1.

新建一個會話

進去以後可以ls看一下。我們get下來的檔案的路徑可以自定義(比如到桌面上)

 

~2.

使用xftp。在xshell介面按Ctrl+Alt+F,會提示安裝xftp

具體操作在