參考連接https://www.linuxprobe.comnode
Samba 跨平臺的文件共享 linux-linux linux-windows /etc/samba/smb.conf 裏面 []這個名字爲掛載時填寫的名字 vim /etc/fstab //192.168.161.40/database_test /ddd cifs credentials=/root/auth.smb 0 0 nfs vim /etc/exports /database 192.168.161.*(rw,sync,root_squash) showmount -e 192.168.161.40 vim /etc/fstab 192.168.161.40:/database /database nfs default 0 0 mount -a FTP文件傳輸服務確實可讓主機之間的文件傳輸變得簡單方便,可是FTP協議的本質是傳輸文件,而非共享文件,所以要想經過客戶端直接在服務器上修改文件內容仍是一件比較麻煩的事情。 SMB(Server Messages Block,服務器消息塊)協議,旨在解決局域網內的文件或打印機等資源的共享問題 Samba服務程序的配置方法與以前講解的不少服務的配置方法相似,首先須要先經過Yum軟件倉庫來安裝Samba服務程序(Samba服務程序的名字也恰巧是軟件包的名字): yum install samba 主配置文件 /etc/samba/smb.conf 因爲在Samba服務程序的主配置文件中,註釋信息行實在太多,不便於分析裏面的重要參數,所以先把主配置文件改個名字,而後使用cat命令讀入主配置文件,再在grep命令後面添加-v參數(反向選擇),分別去掉全部以井號(#)和分號(;)開頭的註釋信息行,對於剩餘的空白行可使用^$參數來表示並進行反選過濾,最後把過濾後的可用參數信息經過重定向符覆蓋寫入到原始文件名稱中。執行過濾後剩下的Samba服務程序的參數並不複雜,爲了更方便讀者查閱參數的功能,表12-1羅列了這些參數以及相應的註釋說明。 mv /etc/samba/smb.conf /etc/samba/smb.conf_bak cat /etc/samba/smb.conf.bak|grep -v "#"|grep -v ";"|grep -v "^$" > /etc/samba/smb.conf 表12-1 Samba服務程序中的參數以及做用 [global] #全局參數。 workgroup = MYGROUP #工做組名稱 server string = Samba Server Version %v #服務器介紹信息,參數%v爲顯示SMB版本號 log file = /var/log/samba/log.%m #定義日誌文件的存放位置與名稱,參數%m爲來訪的主機名 max log size = 50 #定義日誌文件的最大容量爲50KB security = user #安全驗證的方式,總共有4種 #share:來訪主機無需驗證口令;比較方便,但安全性不好 #user:需驗證來訪主機提供的口令後才能夠訪問;提高了安全性 #server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理帳戶) #domain:使用域控制器進行身份驗證 passdb backend = tdbsam #定義用戶後臺的類型,共有3種 #smbpasswd:使用smbpasswd命令爲系統用戶設置Samba服務程序的密碼 #tdbsam:建立數據庫文件並使用pdbedit命令創建Samba服務程序的用戶 #ldapsam:基於LDAP服務進行帳戶驗證 load printers = yes #設置在Samba服務啓動時是否共享打印機設備 cups options = raw #打印機的選項 [homes] #共享參數 comment = Home Directories #描述信息 browseable = no #指定共享信息是否在「網上鄰居」中可見 writable = yes #定義是否能夠執行寫入操做,與「read only」相反 [printers] #打印機共享參數 comment = All Printers path = /var/spool/samba #共享文件的實際路徑(重要)。 browseable = no guest ok = no #是否全部人可見,等同於"public"參數。 writable = no printable = yes Samba服務程序的主配置文件與前面學習過的Apache服務很類似,包括全局配置參數和區域配置參數。全局配置參數用於設置總體的資源共享環境,對裏面的每個獨立的共享資源都有效。區域配置參數則用於設置單獨的共享資源,且僅對該資源有效。建立共享資源的方法很簡單,只要將表12-2中的參數寫入到Samba服務程序的主配置文件中,而後重啓該服務便可。 12-2 用於設置Samba服務程序的參數以及做用 vim /etc/samba/smb.conf 參數 做用 [database] 共享名稱爲database comment = Do not arbitrarily modify the database file 警告用戶不要隨意修改數據庫 path = /home/database 共享目錄爲/home/database public = no 關閉「全部人可見」 writable = yes 第1步:建立用於訪問共享資源的帳戶信息。在RHEL 7系統中,Samba服務程序默認使用的是用戶口令認證模式(user)。這種認證模式能夠確保僅讓有密碼且受信任的用戶訪問共享資源,並且驗證過程也十分簡單。不過,只有創建帳戶信息數據庫以後,才能使用用戶口令認證模式。另外,Samba服務程序的數據庫要求帳戶必須在當前系統中已經存在,不然往後建立文件時將致使文件的權限屬性混亂不堪,由此引起錯誤 pdbedit命令用於管理SMB服務程序的帳戶信息數據庫,格式爲「pdbedit [選項] 帳戶」。在第一次把帳戶信息寫入到數據庫時須要使用-a參數,之後在執行修改密碼、刪除帳戶等操做時就再也不須要該參數了。pdbedit命令中使用的參數以及做用如表12-3所示。 表12-3 用於pdbedit命令的參數以及做用 參數 做用 -a 用戶名 創建Samba用戶 -x 用戶名 刪除Samba用戶 -L 列出用戶列表 -Lv 列出用戶詳細信息的列表 #systemctl restart smb #systemctl enable smb [root@linuxprobe ~]# pdbedit -a -u linuxprobe #必須是已經存在的用戶 useradd -d /home/liangjiancong -s /sbin/nologin ljc pdbedit -a -u ljc 第2步:建立用於共享資源的文件目錄。在建立時,不只要考慮到文件讀寫權限的問題,並且因爲/home目錄是系統中普通用戶的家目錄,所以還須要考慮應用於該目錄的SELinux安全上下文所帶來的限制。在前面對Samba服務程序配置文件中的註釋信息進行過濾時,這些過濾的信息中就有關於SELinux安全上下文策略的說明,咱們只需按照過濾信息中有關SELinux安全上下文策略中的說明中給的值進行修改便可。修改完畢後執行restorecon命令,讓應用於目錄的新SELinux安全上下文當即生效。 #ll -ldZ /etc/samba drwxr-xr-x. root root system_u:object_r:samba_etc_t:s0 /etc/samba/ mkdir /home/database chown -Rf linuxprobe:linuxprobe /home/database semanage fcontext -a -t samba_etc_t /home/database restorecon -Rv /home/database restorecon -Rv /home/database/* 第3步:設置SELinux服務與策略,使其容許經過Samba服務程序訪問普通用戶家目錄。執行getsebool命令,篩選出全部與Samba服務程序相關的SELinux域策略,根據策略的名稱(和經驗)選擇出正確的策略條目進行開啓便可: getsebool -a |grep samba setsebool -P samba_enable_home_dirs=on 第4步:在Samba服務程序的主配置文件中,根據表12-2所提到的格式寫入共享信息。在原始的配置文件中,[homes]參數爲來訪用戶的家目錄共享信息,[printers]參數爲共享的打印機設備。這兩項若是在從此的工做中不須要,能夠刪除 vim /etc/samba/smb.conf [root@linuxprobe ~]# vim /etc/samba/smb.conf [global] workgroup = MYGROUP server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = tdbsam load printers = yes cups options = raw [database] comment = Do not arbitrarily modify the database file path = /home/database public = no writable = yes 第5步:Samba服務程序的配置工做基本完畢。接下來重啓smb服務(Samba服務程序在Linux系統中的名字爲smb)並清空iptables防火牆,而後就能夠檢驗配置效果了。 [root@linuxprobe ~]# systemctl restart smb 2.1.2 Windows掛載共享 不管Samba共享服務是部署Windows系統上仍是部署在Linux系統上,經過Windows系統進行訪問時,其步驟和方法都是同樣的。下面假設Samba共享服務部署在Linux系統上,並經過Windows系統來訪問Samba服務。Samba共享服務器和Windows客戶端的IP地址能夠根據表12-4來設置。 Samba共享服務器和Linux客戶端各自使用的操做系統以及IP地址 yum -y install cifs-utils 在Linux客戶端,按照Samba服務的用戶名、密碼、共享域的順序將相關信息寫入到一個認證文件中。爲了保證不被其餘人隨意看到,最後把這個認證文件的權限修改成僅root管理員纔可以讀寫: [root@linuxprobe ~]# vim auth.smb username=linuxprobe password=redhat domain=MYGROUP [root@linuxprobe ~]# chmod -Rf 600 auth.smb 如今,在Linux客戶端上建立一個用於掛載Samba服務共享資源的目錄,並把掛載信息寫入到/etc/fstab文件中,以確保共享掛載信息在服務器重啓後依然生效: [root@linuxprobe ~]# mkdir /database [root@linuxprobe ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Wed May 4 19:26:23 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel-root / xfs defaults 1 1 UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2 /dev/mapper/rhel-swap swap swap defaults 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 //192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0 [root@linuxprobe ~]# mount -a Linux客戶端成功地掛載了Samba服務的共享資源。進入到掛載目錄/database後就能夠看到Windows系統訪問Samba服務程序時留下來的文件了(即文件Memo.txt)。固然,咱們也能夠對該文件進行讀寫操做並保存。 [root@linuxprobe ~]# cat /database/Memo.txt i can edit it . 出現問題?大膽提問! 因讀者們硬件不一樣或操做錯誤均可能致使實驗配置出錯,請耐心再仔細看看操做步驟吧,不要氣餒~ Linux技術交流請加A羣:560843(滿),B羣:340829(推薦),C羣:463590(推薦),點此查看全國羣。 *本羣特點:經過口令驗證確保每個羣員都是《Linux就該這麼學》的讀者,答疑更有針對性,不按期免費領取定製禮品。 12.2 NFS網絡文件系統 若是你們以爲Samba服務程序的配置太麻煩,並且恰巧須要共享文件的主機都是Linux系統,劉遄老師很是推薦你們在客戶端部署NFS服務來共享文件。NFS(網絡文件系統)服務能夠將遠程Linux系統上的文件共享資源掛載到本地主機的目錄上,從而使得本地主機(Linux客戶端)基於TCP/IP協議,像使用本地主機上的資源那樣讀寫遠程Linux系統上的共享文件。 因爲RHEL 7系統中默認已經安裝了NFS服務,外加NFS服務的配置步驟也很簡單,所以劉遄老師在授課時會將NFS戲謔爲Need For Speed。接下來,咱們準備配置NFS服務。首先請使用Yum軟件倉庫檢查本身的RHEL 7系統中是否已經安裝了NFS軟件包: [root@linuxprobe ~]# yum install nfs-utils Loaded plugins: langpacks, product-id, subscription-manager (1/2): rhel7/group_gz | 134 kB 00:00 (2/2): rhel7/primary_db | 3.4 MB 00:00 Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version Nothing to do 第1步:爲了檢驗NFS服務配置的效果,咱們須要使用兩臺Linux主機(一臺充當NFS服務器,一臺充當NFS客戶端),並按照表12-6來設置它們所使用的IP地址。 表12-6 兩臺Linux主機所使用的操做系統以及IP地址 主機名稱 操做系統 IP地址 NFS服務端 RHEL 7 192.168.10.10 NFS客戶端 RHEL 7 192.168.10.20 另外,不要忘記清空NFS服務器上面iptables防火牆的默認策略,以避免默認的防火牆策略禁止正常的NFS共享服務。 [root@linuxprobe ~]# iptables -F [root@linuxprobe ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] 第2步:在NFS服務器上創建用於NFS文件共享的目錄,並設置足夠的權限確保其餘人也有寫入權限。 [root@linuxprobe ~]# mkdir /nfsfile [root@linuxprobe ~]# chmod -Rf 777 /nfsfile [root@linuxprobe ~]# echo "welcome to linuxprobe.com" > /nfsfile/readme 第3步:NFS服務程序的配置文件爲/etc/exports,默認狀況下里面沒有任何內容。咱們能夠按照「共享目錄的路徑 容許訪問的NFS客戶端(共享權限參數)」的格式,定義要共享的目錄與相應的權限。 例如,若是想要把/nfsfile目錄共享給192.168.10.0/24網段內的全部主機,讓這些主機都擁有讀寫權限,在將數據寫入到NFS服務器的硬盤中後纔會結束操做,最大限度保證數據不丟失,以及把來訪客戶端root管理員映射爲本地的匿名用戶等,則能夠按照下面命令中的格式,將表12-7中的參數寫到NFS服務程序的配置文件中。 表12-7 用於配置NFS服務程序配置文件的參數 參數 做用 ro 只讀 rw 讀寫 root_squash 當NFS客戶端以root管理員訪問時,映射爲NFS服務器的匿名用戶 no_root_squash 當NFS客戶端以root管理員訪問時,映射爲NFS服務器的root管理員 all_squash 不管NFS客戶端使用什麼帳戶訪問,均映射爲NFS服務器的匿名用戶 sync 同時將數據寫入到內存與硬盤中,保證不丟失數據 async 優先將數據保存到內存,而後再寫入硬盤;這樣效率更高,但可能會丟失數據 請注意,NFS客戶端地址與權限之間沒有空格。 [root@linuxprobe ~]# vim /etc/exports /nfsfile 192.168.10.*(rw,sync,root_squash) 第4步:啓動和啓用NFS服務程序。因爲在使用NFS服務進行文件共享以前,須要使用RPC(Remote Procedure Call,遠程過程調用)服務將NFS服務器的IP地址和端口號等信息發送給客戶端。所以,在啓動NFS服務以前,還須要順帶重啓並啓用rpcbind服務程序,並將這兩個服務一併加入開機啓動項中。 [root@linuxprobe ~]# systemctl restart rpcbind [root@linuxprobe ~]# systemctl enable rpcbind [root@linuxprobe ~]# systemctl start nfs-server [root@linuxprobe ~]# systemctl enable nfs-server ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service' NFS客戶端的配置步驟也十分簡單。先使用showmount命令(以及必要的參數,見表12-8)查詢NFS服務器的遠程共享信息,其輸出格式爲「共享的目錄名稱 容許使用客戶端地址」。 表12-8 showmount命令中可用的參數以及做用 參數 做用 -e 顯示NFS服務器的共享列表 -a 顯示本機掛載的文件資源的狀況NFS資源的狀況 -v 顯示版本號 [root@linuxprobe ~]# showmount -e 192.168.10.10 Export list for 192.168.10.10: /nfsfile 192.168.10.* 而後在NFS客戶端建立一個掛載目錄。使用mount命令並結合-t參數,指定要掛載的文件系統的類型,並在命令後面寫上服務器的IP地址、服務器上的共享目錄以及要掛載到本地系統(即客戶端)的目錄。 [root@linuxprobe ~]# mkdir /nfsfile [root@linuxprobe ~]# mount -t nfs 192.168.10.10:/nfsfile /nfsfile 掛載成功後就應該可以順利地看到在執行前面的操做時寫入的文件內容了。若是但願NFS文件共享服務能一直有效,則須要將其寫入到fstab文件中: [root@linuxprobe ~]# cat /nfsfile/readme welcome to linuxprobe.com [root@linuxprobe ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Wed May 4 19:26:23 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel-root / xfs defaults 1 1 UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2 /dev/mapper/rhel-swap swap swap defaults 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0 12.3 AutoFs自動掛載服務 不管是Samba服務仍是NFS服務,都要把掛載信息寫入到/etc/fstab中,這樣遠程共享資源就會自動隨服務器開機而進行掛載。雖然這很方便,可是若是掛載的遠程資源太多,則會給網絡帶寬和服務器的硬件資源帶來很大負載。若是在資源掛載後長期不使用,也會形成服務器硬件資源的浪費。可能會有讀者說,「能夠在每次使用以前執行mount命令進行手動掛載」。這是一個不錯的選擇,可是每次都須要先掛載再使用,您不以爲麻煩嗎? autofs自動掛載服務能夠幫咱們解決這一問題。與mount命令不一樣,autofs服務程序是一種Linux系統守護進程,當檢測到用戶試圖訪問一個還沒有掛載的文件系統時,將自動掛載該文件系統。換句話說,咱們將掛載信息填入/etc/fstab文件後,系統在每次開機時都自動將其掛載,而autofs服務程序則是在用戶須要使用該文件系統時纔去動態掛載,從而節約了網絡資源和服務器的硬件資源。 [root@linuxprobe ~]# yum install autofs Loaded plugins: langpacks, product-id, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. rhel | 4.1 kB 00:00 Resolving Dependencies --> Running transaction check ---> Package autofs.x86_64 1:5.0.7-40.el7 will be installed --> Processing Dependency: libhesiod.so.0()(64bit) for package: 1:autofs-5.0.7-40.el7.x86_64 --> Running transaction check ---> Package hesiod.x86_64 0:3.2.1-3.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: autofs x86_64 1:5.0.7-40.el7 rhel 550 k Installing for dependencies: hesiod x86_64 3.2.1-3.el7 rhel 30 k Transaction Summary ================================================================================ Install 1 Package (+1 Dependent package) Total download size: 579 k Installed size: 3.6 M Is this ok [y/d/N]: y Downloading packages: -------------------------------------------------------------------------------- Total 9.4 MB/s | 579 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : hesiod-3.2.1-3.el7.x86_64 1/2 Installing : 1:autofs-5.0.7-40.el7.x86_64 2/2 Verifying : hesiod-3.2.1-3.el7.x86_64 1/2 Verifying : 1:autofs-5.0.7-40.el7.x86_64 2/2 Installed: autofs.x86_64 1:5.0.7-40.el7 Dependency Installed: hesiod.x86_64 0:3.2.1-3.el7 Complete! 處於生產環境中的Linux服務器,通常會同時管理許多設備的掛載操做。若是把這些設備掛載信息都寫入到autofs服務的主配置文件中,無疑會讓主配置文件臃腫不堪,不利於服務執行效率,也不利於往後修改裏面的配置內容,所以在autofs服務程序的主配置文件中須要按照「掛載目錄 子配置文件」的格式進行填寫。掛載目錄是設備掛載位置的上一級目錄。例如,光盤設備通常掛載到/media/cdrom目錄中,那麼掛載目錄寫成/media便可。對應的子配置文件則是對這個掛載目錄內的掛載設備信息做進一步的說明。子配置文件須要用戶自行定義,文件名字沒有嚴格要求,但後綴建議以.misc結束。具體的配置參數如第7行的加粗字所示。 [root@linuxprobe ~]# vim /etc/auto.master # # Sample auto.master file # This is an automounter map and it has the following format # key [ -mount-options-separated-by-comma ] location # For details of the format look at autofs(5). # /media /etc/iso.misc /misc /etc/auto.misc # # NOTE: mounts done from a hosts map will be mounted with the # "nosuid" and "nodev" options unless the "suid" and "dev" # options are explicitly given. # /net -hosts # # Include /etc/auto.master.d/*.autofs # +dir:/etc/auto.master.d # # Include central master map if it can be found using # nsswitch sources. # # Note that if there are entries for /net or /misc (as # above) in the included master map any keys that are the # same will not be seen as the first read key seen takes # precedence. # +auto.master 在子配置文件中,應按照「掛載目錄 掛載文件類型及權限 :設備名稱」的格式進行填寫。例如,要把光盤設備掛載到/media/iso目錄中,可將掛載目錄寫爲iso,而-fstype爲文件系統格式參數,iso9660爲光盤設備格式,ro、nosuid及nodev爲光盤設備具體的權限參數,/dev/cdrom則是定義要掛載的設備名稱。配置完成後再順手將autofs服務程序啓動並加入到系統啓動項中: [root@linuxprobe ~]# vim /etc/iso.misc iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom [root@linuxprobe ~]# systemctl start autofs [root@linuxprobe ~]# systemctl enable autofs ln -s '/usr/lib/systemd/system/autofs.service' '/etc/systemd/system/multi-user.target.wants/autofs.service' 接下來將發生一件很是有趣的事情。咱們先查看當前的光盤設備掛載狀況,確認光盤設備沒有被掛載上,並且/media目錄中根本就沒有iso子目錄。可是,咱們卻可使用cd命令切換到這個iso子目錄中,並且光盤設備會被當即自動掛載上。咱們也就能順利查看光盤內的內容了。 [root@linuxprobe ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.0G 15G 17% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 140K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot [root@linuxprobe ~]# cd /media [root@linuxprobe media]# ls [root@linuxprobe media]# cd iso [root@linuxprobe iso]# ls -l total 812 dr-xr-xr-x. 4 root root 2048 May 7 2017 addons dr-xr-xr-x. 3 root root 2048 May 7 2017 EFI -r--r--r--. 1 root root 8266 Apr 4 2017 EULA -r--r--r--. 1 root root 18092 Mar 6 2012 GPL dr-xr-xr-x. 3 root root 2048 May 7 2017 images dr-xr-xr-x. 2 root root 2048 May 7 2017 isolinux dr-xr-xr-x. 2 root root 2048 May 7 2017 LiveOS -r--r--r--. 1 root root 108 May 7 2017 media.repo dr-xr-xr-x. 2 root root 774144 May 7 2017 Packages dr-xr-xr-x. 24 root root 6144 May 7 2017 release-notes dr-xr-xr-x. 2 root root 4096 May 7 2017 repodata -r--r--r--. 1 root root 3375 Apr 1 2017 RPM-GPG-KEY-redhat-beta -r--r--r--. 1 root root 3211 Apr 1 2017 RPM-GPG-KEY-redhat-release -r--r--r--. 1 root root 1568 May 7 2017 TRANS.TBL [root@linuxprobe ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.0G 15G 17% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 140K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/cdrom 3.5G 3.5G 0 100% /media/iso /dev/sda1 497M 119M 379M 24% /boot 1.要想實現linux與windows之間文件共享,可使用Samba, NFS僅能實現Linux系統之間文件共享 2.pdbedit命令是用於管理Samba服務程序的帳戶信息數據庫 3.Linux系統中使用Samba程序來共享資源的步驟:首先應該建立密碼認證文件以及掛載目錄,而後把掛載信息寫入到/etc/fstab文件中,最後執行mount -a 4.須要安裝NFS,yum -y install nfs-utils 5.客戶端查看遠程NFS服務器上的共享資源使用 showmount命令來查看 6.autofs服務程序,實現動態靈活的設備掛載操做,並且只有檢測到用戶視圖訪問一個還沒有掛載的文件系統,才自動掛載