(openssh、telnet、vsftpd、nfs、rsync、inotify、samba)

(openssh、telnet、vsftpd、nfs、rsync、inotify、samba)

一:OpenSSH服務與Telnet服務(必須掌握)css

前言:OpenSSH是加密傳輸,Telnet是明文傳輸。這兩個服務都是用來登入其餘的主機的。

  • (一)服務進程的類型介紹(瞭解) 
    • 服務進程有兩種類型 
      • 第一類是用戶不多訪問的服務:瞬時守護進程, 如:telnet服務託管給超級守護進程:xinetd 
        • CentOS 5/6 :服務託管給超級守護進程,xinetd 
          • xinetd其配置文件爲: /etc/xinetd.conf , /etc/xinetd.d/託管的服務進程名 
            • 例如:/etc/xinetd.d/rsync服務是託管到xinetd下的。
            • 啓用某個瞬時守護進程
            • disable = yes:每個託管服務都是禁用的,若是要託管,直接將disable = no, 這就是啓用某個瞬時守護進程的方式
            • 或者使用chkconfig 命令 
              • chkconfig NAME on | off
            • 重啓超級守護進程會重讀配置文件:service xinetd restart
      • 第二類是用戶大量訪問的訪問:獨立守護進程,如:httpd、xinetd
  • (二)telnet命令(必須掌握) 
    • 遠程登入服務
    • C/S架構,監聽在23/tcp
    • 明文的協議:認證等均爲非加密過程
    • linux上:禁止root用戶直接使用登入Telnet客戶端登入到其餘主機,只能是使用普通用戶登入,而後再使用su命令切換到root用戶
    • CentOS 6上 telnet服務介紹 
      • Sever:服務端程序 telnet-server
      • Client: 客戶端程序 telnet
      • 在centos6上安裝了telnet-server,會將xinetd做爲依賴被安裝,若是須要啓動被xinetd管控的服務,須要在/etc/xinetd.d/telnet配置文件中將disable改成no,而後重啓xinetd服務,就會看到23號端口被監聽了。 
        • 可是使用telnet登入其餘的主機的時候必須使用普通用戶登入,而後再經過su 命令切換到root用戶,例如:在安裝了telnet客戶端的主機上,登入其餘主機
      • [root@dns2 ~]# telnet 192.168.23.4 
        Trying 192.168.23.4... 
        Connected to 192.168.23.4. 
        Escape character is '^]'. 
        CentOS release 6.6 (Final) 
        Kernel 2.6.32-504.el6.x86_64 on an x86_64 
        login: yhy 
        Password: 
        Last login: Sun Aug 20 02:40:41 from 192.168.23.11 
        [yhy@6 ~]$
    • CentOS 7上 telnet服務介紹 
      • Sever:服務端程序 telnet-server 
        • 主程序的名字爲: /usr/sbin/in.telnetd
        • rpm -ql telnet-server 
          • /usr/lib/systemd/system/telnet.socket 說明監聽的只是一個端口 
            /usr/lib/systemd/system/telnet@.service 
            /usr/sbin/in.telnetd 
            /usr/share/man/man5/issue.net.5.gz 
            /usr/share/man/man8/in.telnetd.8.gz 
            /usr/share/man/man8/telnetd.8.gz
        • systemctl start telnet.socket 啓動telnet服務 
          • netstat -lntup 顯示以下:
          • tcp6 0 0 :::23 :::* LISTEN 1/systemd顯示是systemd 幫助netstat監聽的23端口
          • Client: 客戶端程序 telnet 
            • 注意:在客戶端經過telnet登入遠程的服務端不能使用root的帳號和密碼登入,只能經過普通用戶進行登入
            • telnet 192.168.23.12:23 指定某個端口登入,默認就是23號端口
  • (三)OpenSSH:Secure Shell:安全的shell,ssh是一種協議,OpenSSH是ssh協議的實現 
    • C/S架構模式,監聽在22/tcp
    • 協議: 
      • ssh v1:有漏洞,很是容易收到攻擊
      • ssh v2:經過公鑰加密(數字簽名和密鑰交換)的方式進行的,確保服務器端的身份識別,經過對稱密鑰確保傳輸的數據不被竊取 
        • 公鑰加密經常使用的有三種算法:RSA,DSA,橢圓曲線算法
      • 主機認證:須要用到主機認證密鑰,由服務器端維護和提供
      • 用戶遠程登入兩種方式 
        • 基於口令的認證 
          • 輸入帳號密碼
        • 基於密鑰的認證 
          • 由用戶提供一對密鑰,私鑰留存於客戶端,公鑰保存於遠程服務器端的某用戶的家目錄的特定文件中
    • OpenSSH:ssh協議的開源實現 
      • sshd:服務端程序,ssh的daemon守護進程 
        • 配置文件爲:/etc/ssh/sshd_config
      • ssh:客戶端程序 
        • 配置文件爲:/etc/ssh/ssh_config
      • scp:客戶端程序
      • sftp:客戶端程序
    • (1)ssh客戶端的使用(必須掌握) 
      • ssh [選項] [用戶名@]host [命令] 
        • 例如:ssh root@192.168.23.12 ifconfig
        • 例如:ssh -l root 192.168.23.12 ifconfig 切換到root用戶執行ifconfig命令
        • 省略用戶名意味:使用本地用戶名做爲遠程登入的用戶
      • 經常使用的選項 [options] 
        • -l :以自定用戶的身份進行遠程登入
        • -p:指明遠程服務器的端口號
        • -o option: 
          • StrictHostKeyChecking
        • -X:支持轉發X11
        • -Y:只支持信任的X11轉發
        • -b bind_address:指定源地址
        • -i identify_file:基於密鑰的認證執行認證操做時使用的本地密鑰 
          • ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, 
            ~/.ssh/id_ed25519 and ~/.ssh/id_rsa
      • 配置文件:/etc/ssh/ssh_config(對於寫腳本很重要) 
        • 爲了不第一次登入其餘主機的時候輸入yes,修改StrictHostKeyChecking no便可
      • SSH支持的認證的方式 
        • 基於口令
        • 基於密鑰 
          • (1)生成密鑰對 
            • ssh-keygen [-b bits] [-t type] [-f output_keyfile] [-N new_passphrase] 
              • type:有 
                • rsa:默認算法,密鑰長度爲2048(最經常使用)
                • dsa:密鑰長短爲1024
                • ecdsa:密鑰長度爲256,284,521
            • 例如:ssh-keygen -t rsa -P ""(很重要)
        • (2) 將生成的密鑰對中的公鑰複製到遠程主機的用戶的家目錄下的authorization_keys文件中 
          • ssh-copy-id [-n] [-i [identity_file]] [-p port] [user@]hostname
          • 例如:ssh-copy-id -i .ssh/id_rsa.pub root@192.168.23.12
        • (3)測試 
          • ssh root@192.168.23.12
      • 2:scp工具:secure copy 跨主機進行安全文件傳輸的工具(必須掌握) 
        • 兩種使用方式,一種是推送,另外一種是拉取 
          • PUSH : scp [options] 源文件路徑 [user@]Hostname:目標文件路徑 
            • 例如:scp /etc/fstab root@192.168.23.12:/root
          • PULL:scp [options] [user@]Hostname:Derection_file Source_file 
            • 例如:scp root@192.168.23.12:/root/fstab /root/fstab
          • 經常使用選項 
            • -r:遞歸複製
            • -p:保存源文件權限及從屬關係
            • -q:靜默模式
            • -p PORT:指明ssh協議監聽的窗口
    • 3:ftp子系統:OpenSSH服務自帶(須要會使用) 
      • ftp:file transfer protocol ,明文的 
        • 安全傳輸機制 
          • ftps : ftp over ssl
          • sftp:ftp over ssh
        • sftp:C/S架構 
          • S:由sshd服務進程實現,是ssh的一個子系統,在CentOS上默認啓用
          • C:sftp命令
        • sftp root@192.168.23.10 登入192.168.23.10主機 
          • 登入以後可使用help命令先查看幫助
          • get anaconda-ks.cfg:表示從目標主機下載一個文件到當前主機
      • sshd(服務器端) 
        • 配置文件:/etc/ssh/sshd_config
        • 經常使用指令 
          • Port 22
          • ListenAddress 0.0.0.0 監聽的地址
          • Protocol 2 指定協議版本
          • SyslogFacility AUTHPRIV :日誌記錄方式,AUTHPRIV表示記錄於/var/log/secure
          • LogLevel INFO:日誌事件級別的信息
          • PermitRootLogin yes :是否容許管理員直接登入
          • MaxSessions 10 :最大的鏈接數
          • PubkeyAuthentication yes :基於密鑰的認證方式
          • AuthorizedKeysFile .ssh/authorized_keys :基於密鑰認證的方式放在哪一個文件中
          • PasswordAuthentication yes :是否支持口令認證
          • PermitEmptyPasswords no:是否支持空密碼登入
          • ChallengeResponseAuthentication no :是否支持挑戰式響應認證
          • Kerberos options
          • UseDNS no :禁止使用DNS分解主機名,須要修改成no(很是重要)
          • Subsystem sftp /usr/libexec/openssh/sftp-server
        • 補充指令 
          • 限制可登入的用戶 
            • AllowUsers user1 user2 :容許使用ssh服務的用戶白名單
            • AllowGroups group1 group2 :容許使用ssh服務的用戶組白名單
            • DenyUsers user1 user2:禁止的黑名單
            • DenyGroups group1 group2
        • 改了腳本須要重啓服務 
          • CentOS 6:/etc/rc.d/init.d/sshd
          • CentOS 7:/usr/lib/systemd/system/sshd.service
  • 做業題
1)不要使用默認的端口;修改方式
port 2222
2)不要支持使用初版協議
protocal 2
3)限制能夠登入的用戶
AllowUsers, AllowGroups
4)設定空閒會話超時時長
6)僅僅監聽於指定的IP地址
ListenAddress
7)基於口令認證時,使用強密碼策略
openssl rand -base64 30
8)最好基於密鑰的認證
9)禁止使用空密碼
10)禁止管理員直接登入
11)限制ssh的訪問頻道和併發在線
12)作好日誌分析

二:FTP協議與vsftpd服務(必須掌握)html

前言:ftp:文件傳輸協議, 屬於應用層協議。vsftpd服務是ftp協議的一種實現

(一)FTP協議詳解
  • ftp 協議:明文的協議,數據傳輸過程當中不加密,可使用抓包工具拿到數據 
    • 21/tcp(監聽鏈接請求) 20/tcp(傳輸數據)
    • 服務端實現ftp協議的程序:vsftpd , pureftpd , proftpd , Filezilla Server
    • 客戶端實現ftp協議的程序: 
      • linux :ftp客戶端 , lftp 客戶端 
        • ftp 使用匿名用戶登入 
          • ftp 192.168.23.12 用戶名爲:anonymous,密碼爲空便可
        • ftp 使用本地用戶登入 
          • ftp 192.168.23.12 用戶名爲:yhy,密碼爲:123456
        • lftp 使用匿名用戶登入 
          • lftp 192.168.23.12
        • lftp 使用本地用戶登入 
          • lftp -u yhy,123456 192.168.23.12
      • windows :cuteftp, Filezilla,flashfxp(瞭解)
  • ftp的鏈接類型 
    • 命令鏈接:傳輸指令 
      • 客戶端發出請求,服務端響應
    • 數據鏈接:傳輸數據 
      • 注意:數據鏈接必然是經過某個命令鏈接發起的 
        • 主動鏈接模式(port):服務器向客戶端發起數據傳輸請求 
          • 服務器端口:固定
        • 被動鏈接模式(pasv):客戶端向服務器端發起數據傳輸請求 
          • 服務器端口:隨機
      • 數據傳輸格式 
        • ASCLL碼傳輸
        • binary傳輸
    • 用戶分類(必須掌握) 
      • 1:匿名用戶(映射到某個固定的系統用戶):ftp用戶 或者 vsftp用戶請求的資源應該在/var/ftp目錄下,登入的時候不須要用戶名和密碼
      • 2:本地用戶(系統用戶和普通用戶):系統用戶和普通用戶,登入的時候須要用戶名和密碼
      • 3:虛擬用戶:不是系統/etc/passwd裏面的用戶,而是文件系統上某個目錄的某個文件中指定的用戶,或者是一些存儲系統上的某個用戶(也是映射到某個本地用戶) 
        • snswitch服務:name service switch
        • Pam服務
        • Openldap服務(很是適合存儲帳號和密碼)
      • 注意:資源位於ftp服務器某個用戶的家目錄下,那麼其實咱們訪問資源就是訪問某個用戶家目錄下的資源
  • vsftpd:很是安全的ftp服務端程序(必須掌握) 
    • 主程序:/usr/sbin/vsftpd
    • 主配置文件:/etc/vsftpd/vsftpd.conf
    • CentOS 6 
      • /etc/rc.d/init.d/vsftpd
      • chkconfig vsftpd on
    • CentOS 7 
      • /usr/lib/systemd/system/vsftpd.service
      • systemctl enable vsftpd.service
  • 配置過程詳解 
    • /etc/vsftpd/vsftpd.conf可使用man vsftpd.conf查看指令的定義
    • 匿名用戶 
      • anonymous_enable=yes 是否容許匿名用戶登入
      • anon_upload_enable=yes 是否容許匿名用戶上傳文件, 同時須要開啓write_enable=yes
      • write_enable=yes 若是匿名用戶要上傳,必須是write_enable=YES,這是一個全局配置
      • anon_mkdir_write_enable=yes 使得匿名用戶可以在有目錄中有寫權限的基礎上可以建立目錄
      • anon_other_write_enable=yes 匿名用戶的刪除和重命名權限
    • 本地用戶 
      • local_enable=yes 開放本地用戶登入,而且全部的非匿名用戶登入必須開啓這個指令才能登入
      • local_umake=022 指定本地用戶上傳權限的掩碼
      • dirmessage_enable=YES 用戶第一次進入目錄時,.massage文件裏面的信息會顯示給用戶,可使用message_file指定文件的路徑,而不使用默認的.message,可是lftp程序沒法看到消息提示,ftp程序能夠
    • 數據傳輸日誌的相關日誌 
      • xferlog_enable=YES
      • xferlog_std_format
      • xferlog_file=/var/log/vsftpd.log 指定訪問日誌的存放路徑
    • 數據傳輸模式 
      • connect_from_port_20:是否啓用被動模式
    • 修改匿名用戶上傳文件的屬主 
      • chown_uploads:是否修改
      • chown_username:啓用chown_uploads指令時,將文件屬主修改成此命令指定的用戶,默認爲root
      • chown_upload_mode:匿名用戶上傳文件完成後文件的權限默認爲600
    • 設定會話的超時時長 
      • idle_session_timeout :空閒會話的超時時長,默認是300秒
      • connect_timeout:服務器鏈接客戶端的超時時長
      • data_connection_timeout:數據傳輸的超時時長
    • 命令鏈接的監聽端口 
      • listen_port :默認是21
    • 當匿名用戶鏈接到ftp服務端是否顯示banner信息,只有ftp客戶端能夠,lftp不行 
      • ftpd_banner=Welcome to blah FTP service.
    • 設置鏈接及傳輸速率 
      • local_max_rate:本地用戶的傳輸速率,默認是0,表示無限制
      • max_clients:最大併發鏈接數,最多容許多少個客戶端鏈接
      • max_per_ip:每一個IP容許的最大鏈接數
      • anno_max_rate:本地用戶的傳輸速率,默認是0,表示無限制
    • 禁錮本地用戶 
      • chroot_local_user=YES:禁錮全部本地的用戶,將用戶鎖定在其家目錄下 
        • 注意:要求用戶不可以對家目錄有寫權限,若是具備寫權限的話,那麼本地用戶登入ftp的時候就會鏈接拒絕了(禁錮全部的本地用戶和禁錮白名單不能同時開啓)
      • chroot_list_enable=yes : 是否開啓禁錮的白名單
      • chroot_list_file=/etc/vsftpd/chroot_list:若是寫在這個文件裏面的本地用戶都會被禁錮,而沒有在這個文件裏面的本地用戶不會被禁錮
    • /etc/vsftpd/ftpusers:指定哪些本地用戶沒法登入 
      • 是本地用戶的黑名單,若是在這個名單裏面的用戶沒法登入
    • userlist_enable :是否開啓本地用戶登入認證 
      • 若是userlist_enable=YES,vsftpd將加載一個由userlist_file指定的用戶列表文件,此文件中的用戶是否可以訪問vsftpd服務取決於userlist_deny這個指令,且用戶寫在/etc/vsftpd/user_list文件中 
        • 若是userlist_deny=yes,表示此列表爲黑名單,表示列表中的用戶不能登入
        • 若是userlist_deny=no,表示此列表爲白名單, 表示只有列表中的本地用戶才能登入
  • 虛擬用戶(先給你們入門一下mysql數據庫服務)mysql

    • 基於db文件 
      • /etc/vsftpd/vusers.txt文件
      • 奇數行:用戶名
      • 偶數行:密碼
    • 基於mysql服務linux

      • 編譯安裝pam-mysql
      • yum groupinstall -y 「Development tools」 「Server Platform Development」
      • yum install -y pam-devel openssl-devel mariadb-devel
      • cd pam-mysql
      • ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
      • make && make install (只要存在/lib64/security/pam_mysql.so文件,說明編譯成功)
      • 爲了演示pam認證,將之前的/etc/vsftpd/vsftpd.conf還原ios

      • 在mysql數據庫上的操做寫以下nginx

1:將mariadb的配置文件中加入
skip_name_resolve=on
innodb_file_per_table=on

2:先執行mysql_secure_installation命令,給root用戶初始化,在啓動mariadb
mysql_secure_installation
systemctl start mariadb.service

3:登入Mariadb,先建立一個vsftpd數據庫,在建立一個vsftpd用戶,
create database vsftpd;
use vsftpd;
grant all on *.* to vsftpd@'192.168.23.%' identified by '123456';

4:在vsftpd數據庫中建立一張users表,用戶虛擬用戶的認證
create table users (id int auto_increment not null primary key, name varchar(30), password char(48)binary);

5:給表先插入值
insert into users(name,password) values ('tom', password('123456'));
insert into users(name,password) values ('yhy', password('123456'));

6:查看錶
select * from users;

  • 編輯/etc/vsftpd/vsftpd.conf文件, 在文件最下方有一條指令pam_service_name=vsftpd,從新指定一個新的認證文件
pam_service_name=vsftpd.mysql # 表示vsftpd的虛擬用戶默認就是使用vsftpd.mysql文件進行的認證
  • 由於,原有的vsftpd文件的認證太複雜,所以,本身建立一個/etc/pam.d/vsftpd.mysql 文件。且文件的內容以下
# 第一行auth表示使用mysql進行虛擬用戶的認證
auth required pam_mysql.so user=vsftpd passwd=123456 host=192.168.23.12 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

# 第二行使用account表示認證用戶存在
account required pam_mysql.so user=vsftpd passwd=123456 host=192.168.23.12 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
  • 因爲虛擬用戶也是映射爲系統用戶進行登入的,那麼使用虛擬用戶以前,須要先建立系統用戶
# 使用/ftp/data做爲虛擬用戶的家目錄,虛擬用戶映射的系統用戶爲vuser
mkdir /ftp
useradd -s /sbin/nologin -d /ftp/data vuser

chmod go+rx /ftp/data

# 默認虛擬用戶是被禁錮在家目錄下的,所以不能對家目錄有寫權限
chmod -w /ftp/data
  • 編輯/etc/vsftpd/vsftpd.conf文件,在pam_service_name=vsftpd.mysql指令上面添加
# 實現虛擬用戶到系統用戶的映射關係
guest_enable=YES
guest_username=vuser
  • 重啓服務
systemctl restart vsftpd.service
  • 再使用ftp進行測試,登入成功
ftp> [root@nds1 ~]# ftp 192.168.23.12
Connected to 192.168.23.12 (192.168.23.12).
220 (vsFTPd 3.0.2)
Name (192.168.23.12:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
  • 若是要使得虛擬用戶具備上傳的權限,那麼須要完成兩步
# 使虛擬用戶映射的vuser對upload具備寫權限
mkdir /ftp/data/upload
chown vuser /ftp/data/upload

# 開啓匿名用戶上傳功能, 編輯/etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
  • 使用ftp客戶端進行測試:測試成功web

  • 客戶端使用lftp測試登入用戶算法

    • lftp -u centos,123456 192.168.10.215(使用本地用戶登入)
    • lftp 192.168.10.215(使用匿名用戶登入)
  • 總結 
    • ftp:命令鏈接,數據鏈接(port,pasv)
    • vsftpd:/etc/vsftpd/vsftpd.conf
    • 用戶類型 
      • 匿名用戶
      • 本地用戶 
        • 禁錮
        • 黑名單
        • 白名單
      • 虛擬用戶 
        • 權限
    • 博客:vsftpd 基於pam_msyql的虛擬用戶機制
  • vsftpd實戰(服務端192.168.23.12,客戶端192.168.23.11)
1:安裝vsftpd
yum install -y vsftpd

2:客戶端安裝lftp
yum install -y lftp

3:在服務端建立一個用戶yhy,密碼爲123456
useradd yhy
echo "123456" | passwd --stdin yhy

4:使用lftp登入
lftp -u yhy,123456 192.168.23.12
  • 使得匿名用戶能夠上傳文件的條件
1:在服務端開啓
anonymous_enable=yes
anon_upload_enable=yes
write_enable=yes

2: 在服務端修改/var/ftp目錄的屬主爲ftp用戶,使得匿名用戶在此目錄下有寫權限
chmod ftp /var/ftp
  • 使得匿名用戶能夠建立目錄的條件
在服務端開啓
anon_mkdir_write_enable=YES
  • 使得匿名用戶能夠刪除文件的條件
anon_other_write_enable=yes

三:NFS網絡文件系統(必須掌握)sql

前言:NFS即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件同樣。
rpcbind是nfs進行共享本地文件系統的時候調用的服務。rpcbind監聽在TCP的111端口上

  • 安裝NFS
yum install -y nfs-utils
  • 啓動NFS服務shell

    • CentOS 6 
      • service rpcbind start
      • service nfs start
    • CentOS 7 
      • systemctl start nfs.service
  • 網絡文件系統的機制

    • 應用層對內核發起系統調用,內核的接口接受到系統調用的時候,並不在本地執行系統調用的代碼,而是將這段代碼經過網絡發送給監聽在另外一臺主機上的套接字程序,使得這段代碼在另外一臺主機中的內核執行,並訪問另外一臺主機上的塊設備,以後再將結果原路返回給發起網絡請求的主機。
    • PC:procedure call
    • RPC :remote procedure call 
      • rpc.mountd:主要用戶完成認證機制和給遠程的主機發放掛載令牌
      • rpc.lockd
      • prc.statd
    • (1)服務端安裝nfs-utils,服務端的程序名就叫nfs
    • (2)編輯/etc/exports文件,指定容許掛載共享文件系統的主機 
      • 通常每一行的格式爲:共享目錄 給哪一個網段共享(選項1 , 選項2) 
        • 例如:/data 192.168.0.0/16(rw) 將本地的/data目錄共享給192.168網段的主機掛載,而且有讀寫權限
    • (3)從新導出文件系統,讓內核重讀/etc/exports文件,不須要重啓nfs服務 
      • exportfs -r (從新導出export list)
    • (4)在客戶端查看導出的共享文件系統 
      • showmount -e 192.168.10.202
    • (5)客戶端掛載遠端共享的文件系統 
      • mount -t nfs 192.168.10.202:/data /web/html
    • (6)客戶端經過文件系統掛載信息查看 
      • df -h 或 mount
    • (7)在服務端設置共享文件系統目錄的訪問權限 
      • 1:能夠直接設置chmod
      • 2:能夠經過setfacl 來設置 
        • setfacl -m u:archlinux:rwx /data (若是archlinux的uid爲2000)
    • (8)在客戶端有一個本地用戶hadoop,其uid也爲2000 
      • su - hadoop
      • 那麼hadoop就可以在/web/html目錄有讀寫權限(由於在/etc/exports文件中對於遠端的主機只有讀寫權限)
  • 對於/etc/exports文件中,指定客戶端訪問的權限字段說明 
    • 主機名格式(大多使用的是IP) 
      • 單個主機:ipv4 , ipv6 , FQDN
      • IP networks : 兩種掩碼格式均支持,例如:192.168.0.0/255.255.0.0 或者 192.168.0.0/16
      • wildcards:主機名通賠,例如:*uplooking.com
      • netgroups:NIS域內的主機組,@group_name
      • anonymous:使用* 表示全部的客戶端主機
    • General Options 
      • rw:讀寫權限
      • root_squash:壓縮root用戶的權限
      • no_root_squash:不壓縮root用戶的權限
      • all_squash:壓縮全部的用戶
      • anonuid and anongid:映射至哪一個用戶
      • ro:只讀
實戰做業:
1)nfs-server中導出/web/html ,客戶端以此目錄爲其httpd服務的虛擬主機的根文檔目錄,並部署wordpress作測試
2)nfs-server中導出/data目錄,客戶端以此目錄爲Mariadb的數據庫目

四:rsync 遠程同步工具(必須掌握)

前言:rsync是類unix系統下的數據鏡像備份工具,能夠鏡像保存整個目錄樹和文件系統,能夠很容易作到保持原來文件的權限、時間、軟硬連接等等。
rsync一樣屬於C/S架構模型,服務端守護進程始終監聽於873端口
對比rsync命令與scp命令的優劣性

  • rsync有六種不一樣的工做模式介紹

    • 1:拷貝本地文件;相似於cp命令 
      • rsync grub.conf /data/
    • 2:使用一個遠程shell程序(如rsh、ssh)將本地拷貝到遠端主機的某個目錄下 
      • rsync -avz grub.conf root@192.168.23.12:/data
    • 3:使用一個遠程shell程序(如rsh、ssh)將遠端主機的文件拉到本地的某個目錄下 
      • rsync -avz root@192.168.23.12:/data/grub.conf /tmp/
    • 4:將遠程rsync服務器中的文件拷貝到本地目錄 
      • /usr/bin/rsync -avz --delete nfs@192.168.23.26::data /data/ --password-file=/etc/rsync.password
    • 5:將本地目錄文件拷貝到遠程rsync服務器中(很是重要) 
      • /usr/bin/rsync -avz --delete /data/ nfs@192.168.23.26::data --password-file=/etc/rsync.password
    • 6:列出遠程機的文件列表, 這相似於rsync傳輸
  • rsync命令格式

(一) Local:  rsync [OPTION...] SRC... [DEST]

例如: rsync -avz /root/ /tmp/ # 將/root目錄下的全部文件拷貝到/tmp目錄下,默認是增量拷貝
例如: rsync -avz --delete /root/ /tmp/ # 增長--delete選項,指明在增量拷貝的基礎上全量拷貝,也就是說/root目錄下有的文件,/tmp目錄下要有,/root目錄下沒有的文件,/tmp目錄下要將文件刪除。最後表現爲/tmp目錄的文件與/root目錄的文件同樣


(二)Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

例如:rsync -avz --delete -e "ssh -p 22" /tmp/ 192.168.23.26:/tmp # 經過ssh加密,使得192.168.23.26主機上的/tmp目錄下的全部文件與本機的/tmp目錄下的文件同樣
說明: 如何是本地拉取的話,如命令格式所示,源地址與目標地址須要調換一下位置


(三)Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

例如:rsync -avz --delete /tmp/ rsync_backup@192.168.23.26::backup --password-file=/etc/rsync.password # 在daemon模式下,客戶端將本地的/tmp目錄下的全部文件推送到192.168.23.26主機的backup模塊指定的目錄中去
例如:rsync -avz --delete rsync_backup@192.168.23.26::backup --password-file=/etc/rsync.password /tmp/ # 這就是將遠端的拉倒本地的/tmp目錄下
  • 重要選項介紹
-a: --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性
-v: --verbose 詳細模式輸出
-r: --recursive 對子目錄以遞歸模式處理
-z: --compress 對備份的文件在傳輸時進行壓縮處理
--delete :無差別拷貝
--exclude=somefile 指定排除不須要傳輸的文件模式

  • rsync的啓動方式分
1:以守護進程的方式啓動
/usr/bin/rsync --daemon

2:託管給xinetd服務,由xinetd代爲管理
編輯 /etc/xinetd.d/rsync文件
將disable = no改成disable = yes
重啓xinetd服務
此時能夠看到xinetd服務監聽在873端口上

  • rsync服務端配置(必須掌握)
0:建立一個/data目錄,用來指定接受rsync客戶端推送的文件
mkdir /data

1:編輯/etc/rsyncd.conf主配置文件
# 指定訪問本地共享目錄的屬主和屬組,當客戶端鏈接到服務端,那麼進程就以這裏指定的uid和gid運行
uid = rsync
gid = rsync
# 不由錮
use chroot = no
# 指定服務端最大併發鏈接數量
max connections = 2000
# 指定超時時長
timeout = 900
# 指定程序的pid路徑
pid file = /var/run/rsyncd.pid
# 指定日誌路徑
log file = /var/log/rsyncd.log
# 指定文件系統鎖路徑
lock file = /var/run/rsyncd.lock
# 指定推送時出現錯誤忽略
ignore errors
# 指定客戶端能夠向服務端推送數據,所以必須是可讀寫
read only = false
# 關閉遠程列表
list = false
# 指定容許鏈接rsync服務端的網絡地址
hosts allow = 192.168.23.0/24
hosts deny = 0.0.0.0/32
# 啓用虛擬用戶(無需是系統用戶),虛擬用戶的意義在於用戶名和密碼認證
auth users = hello
# 指定用戶名和密碼的文件,這個文件裏面的用戶名就是auth users指定的用戶名,而後給個密碼就好
secrets file = /etc/rsync.password
#transfer logging = yes
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# 指定一個模塊,用來指定接受客戶端推送的文件
[data]
path = /data
comment = shared remoted NFS directory /data


2:建立一個rsync, 設置/data目錄的屬主爲rsync,建立虛擬用戶和密碼
useradd rsync -s /sbin/nologin -M # 在rsync服務端一個rsync用戶,不能登入,不建立家目錄
chown -R rsync /data # 修改/data目錄的屬主爲rsync,這樣rsyncd進程就可以向目錄裏面寫數據
echo "hello:123456" > /etc/rsync.password # 因爲在/etc/rsyncd.conf主配置文件中指定了客戶端登入的用戶名以及密鑰文件路徑,那麼根據路徑建立用戶密碼便可
chmod 600 /etc/rsync.password # 修改密碼文件的權限,注意,這裏的客戶端和服務端的/etc/rsync.password文件的權限都須要修改,且文件的屬主和屬組都是root,由於沒有禁錮root。

3:配置rsync服務配置進程文件/etc/sysconfig/rsyncd
OPTIONS="--address=192.168.23.12" # 將rsync服務監聽到固定的IP地址上
  • rsync客戶端配置(必須掌握)
1:建立同步時候使用的密鑰文件
echo "123456" > /etc/rsync.password

2:修改密鑰文件的權限爲600
chmod 600 /etc/rsync.password

2:手動同步本地的/data/目錄的全部文件到rsync服務端
/usr/bin/rsync -avz --delete /data/ hello@192.168.23.12::data --password-file=/etc/rsync.password

五:inotify 工具(必須掌握)

前言:Inotify是一種強大的、細粒度的、異步文件系統監控機制,它知足各類各樣的文件監控須要,能夠監控文件系統的訪問屬性、讀寫屬性、權限屬性、刪除建立、移動等操做,也就是能夠監控文件發生的一切變化。
inotify-tools是一個C庫和一組命令行的工做提供Linux下inotify的簡單接口。inotify-tools安裝後會獲得inotifywait和inotifywatch這兩條命令
inotifywait命令能夠用來收集有關文件訪問信息,Linux發行版通常沒有包括這個命令,須要安裝inotify-tools,這個命令還須要將inotify支持編譯入Linux內核,好在大多數Linux發行版都在內核中啓用了inotify。
inotifywatch命令用於收集關於被監視的文件系統的統計數據,包括每一個 inotify 事件發生多少次。
inotifywait+rsync實現監控某目錄於文件系統級別的任何變化

  • 1:安裝inotify-tools監控工具
yum install -y inotify-tools
  • 2:查看inotify-tools包的工具程序
[root@dns3 ~]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
/usr/share/doc/inotify-tools-3.14/AUTHORS
/usr/share/doc/inotify-tools-3.14/COPYING
/usr/share/doc/inotify-tools-3.14/ChangeLog
/usr/share/doc/inotify-tools-3.14/NEWS
/usr/share/doc/inotify-tools-3.14/README
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz
  • 3:inotifywait使用格式介紹
示例:
inotifywait -mrq --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib /data

選項:
-m:表示持續監視變化。
-r:表示使用遞歸形式監視目錄。
-q:表示減小冗餘信息,只打印出須要的信息。
-e:表示指定要監視的事件列表。
--timefmt是指定時間的輸出格式。
--format指定文件變化的詳細信息。其中 %w:表示監聽的目錄,%f表示觸發事件的文件

事件:
access 訪問,讀取文件。
modify 修改,文件內容被修改。
attrib 屬性,文件元數據被修改。
move 移動,對文件進行移動操做。
create 建立,生成新文件
open 打開,對文件進行打開操做。
close 關閉,對文件進行關閉操做。
delete 刪除,文件被刪除。
  • 實戰做業
寫一個腳本
(1)在rsync的服務端有一個/data/用做rsync客戶端的備份目錄

(2)rsync客戶端也存在一個/data/目錄,且目錄中有大量的數據庫文件。使用inotifywait工具監聽/data目錄的變化,一旦/data/目錄發生變化,當即調用rsync客戶端工具實現/data/目錄的無差別同步

(3)手動在rsync客戶端的/data/目錄中建立文件,看看rsync的客戶端和服務端的/data/目錄是否實時同步

(4)全部的搭建步驟使用腳本一鍵完成

六:Samba(必須掌握)

前言:爲了實現Windows主機與Linux服務器之間的資源共享,Linux操做系統提供了Samba服務,Samba服務爲兩種不一樣的操做系統架起了一座橋樑,使Linux系統和Windows系統之間可以實現文件系統通訊共享
smb協議:Server Message Block 它能被用於Web鏈接和客戶端與服務器之間的信息溝通
cifs協議:Common Internet File System 它使程序能夠訪問遠程Internet計算機上的文件並要求此計算機提供服務,CIFS能夠看作是應用程序協議如文件傳輸協議和超文本傳輸協議的一個實現

  • Samba的功能 
    • 文件系統共享
    • 打印機共享
    • NetBIOS協議
  • 安裝服務端程序包: yum install -y samba 
    • nmbd程序:給windows系統提供共享服務
    • smbd:實現文件系統服務,若是是給windows主機提供共享服務,那麼nmbd和smbd都須要啓動,若是隻給linux提供服務,那麼只須要啓動smbd就行
    • 主配置文件:/etc/samba/smb.conf
    • CentOS 6 : 
      • 1:service smb start
      • 2:service nmb start
    • CentOS 7: 
      • 1:systemctl start smb.service
      • 2:systemctl start nmb.service
  • 客戶端程序包:samba-client 
    • smbclient:交互式命令行客戶端
    • mount -t cifs 遠端IP地址:/data /mnt 能夠直接提供掛載,所以就不須要交互式工具smbclient了
  • 監聽的端口:137/udp , 138/udp , 139/tcp , 445/tcp
  • Samba服務的配置 
    • /etc/samba/smb.conf
    • 兩類配置段 
      • 全局配置 
        • [global]
      • 每共享的專用配置 
        • [共享資源的共享名稱]
    • 全局配置保留默認配置無需修改 
      • workgroup = 
        • 當前Samba主機所屬的工做組
      • netbios name = 
        • 當前Samba主機的netbios名稱
      • server string = 
        • 主機註釋
      • display charset = 
        • 當前Samba服務器所用的字符集
      • unix charset = 
        • 當前linux主機所用的字符集
      • dos charset = 
        • windows 端的字符集
      • interfaces = 
        • 當前服務器Samba主機監聽的IP地址或網絡接口
      • hosts allow = 
        • 客戶端來源白名單
      • log file = 
        • 日誌文件路徑
      • max log size = 
        • 日誌文件的體積上限,定位是kB
      • Standalone Server Options
      • security = user 
        • 設定安全級別的,取值爲一下三者之一 
          • share:匿名共享
          • user:使用Samba服務自我管理的帳號和密碼進行用戶認證,用戶必須是操做系統用戶,密碼非爲os的密碼,而是訪問Samba服務的專用密碼
          • domain:使用DC進行用戶認證
      • passwd backend = tbdsam 
        • 密碼庫文件的格式
  • 共享配置
[共享名稱]:此名稱即爲共享服務名稱
comment:註釋信息
path:共享的文件系統的路徑
browseable:是否可以被全部用戶看到
writable:是否可寫 指明全部的用戶都用寫權限
read only:是否爲只讀
public:是不是公開的服務
guest ok:是否容許來賓帳號訪問
writelist:可寫用戶或組列表 僅僅只有指定的用戶或組內的用戶有寫權限,不能和writable同時使用。例如:
writelist=用戶名
writelist=@組
  • 可用的宏列表(能夠寫在comment裏面,做爲變量替換) 
    • %m:客戶端主機的NetBIOS名稱
    • %M:客戶端的Internet主機名,及hostname
    • %H:當前用戶的家目錄
    • %U:當前用戶的用戶名
    • %g:當前用戶所屬的組名
    • %h:當前Samba主機的hostname
    • %I:客戶端的主機IP
    • %T:當前的日期的時間
[data]
comment = data %H
path = /data
guest ok = Yes
write list = @uplooking
read only = no

# 客戶端查看的時候,能夠查看到宏替換的yhy的家目錄
smbclient -L 192.168.23.12/data -U yhy
  • Samba提供一個ftp匿名用戶能夠訪問共享目錄
1:編輯/etc/samba/samba.conf配置文件
[ftp]
comment = ftp share
path = /var/ftp
guest ok = Yes

2:語法檢查
testparm /etc/samba/smb.conf

3:從新啓動Samba服務
systemctl reload smb.service
  • 訪問Samba共享
# 不要輸入密碼,輸入密碼就錯誤了
smbclient //192.168.23.12/ftp
  • 將系統用戶添加Samba密碼,成爲samba用戶 
    • useradd gentoo
    • smbpasswd -a gentoo
  • 交互式訪問共享目錄方式 
    • smbclient -L Samba服務器IP -U 用戶名 查看共享目錄
    • 例如:smbclient -L 192.168.23.12 -U yhy
    • smbclient //Samba服務器IP -U 用戶名 登入共享目錄
    • 例如:smbclient //192.168.23.12/mysqldata -U yhy
  • 客戶端的掛載訪問方式 
    • mount -t cifs -o username=yhy,password=123456 //192.168.23.12/mysqldata /mydata/data 其中:cifs爲文件系統的類型、-o表示掛載選項、yhy爲本地用戶,密碼爲123456, mysqldata爲Samba服務端的共享目錄、/mydata/data爲客戶端的掛載點注意服務端的mysqldata共享目錄的對應於服務端的文件系統的路徑再samba.conf文件中定義了
  • 將系統用戶添加爲Samba用戶

    • smbpasswd [選項] 用戶名 
      • -a:添加
      • -x:刪除
      • -d:禁用
      • -e:啓用
    • 訪問Samba共享 
      • linux 
        • sbmclient:交互式命令行客戶端程序
        • mount -t cifs:掛載文件系統
      • windows: 
        • \IP地址\共享目錄
  • pdbedit命令(瞭解)

    • 相似於smbpasswd,用戶管理本地用戶成爲samba用戶
    • pdbedit -L :查看samba已經添加的用戶
    • pdbedit -L -v :查看samba已經添加的用戶的詳細信息
    • pdbedit -a -u hadoop:將hadoop添加爲samba用戶
  • smbstatus命令(瞭解)

    • 顯示samba服務被哪些客戶端訪問
    • -b:顯示簡要格式信息
    • -v:顯示詳細格式信息
  • 實戰演練1(必須掌握)

    • 需求:在Samba服務端建立一個/ftp/data共享目錄,且讓centos和geetoo用戶可讀可寫。在Samba客戶端掛載這個共享目錄,掛載點爲也爲/ftp/data。掛載完畢後,在掛載點測試建立文件和刪除文件
(一):在samba的服務端設置
1)先在本地文件系統上建立目錄
mkdir -pv /ftp/data
2)編輯samba的主配置文件/etc/samba/smb.conf 添加共享目錄data
[data]
comment = ftp data
path = /ftp/data
write list = centos,gentoo
public = no
3)建立本地登入用戶centos 和 gentoo
useradd centos
useradd geetoo
4)將centos用戶和gentoo用戶設置samba密碼
smbpasswd -a centos
smbpasswd -a geetoo
5)給共享目錄映射的文件系統設置讀寫權限
setfacl -m u:centos:wrx /ftp/data/
setfacl -m u:gentoo:wrx /ftp/data/
6)檢查主配置文件語法,並查看配置信息
testparm

(二)在samba的客戶端設置(192.168.23.11)
1)查看共享目錄
smbclient -L 192.168.23.12 -U centos
2)訪問共享目錄
smbclient //192.168.23.12/data -U centos 看看用戶是否有讀寫權限
3)建立本地文件系統的掛載點
mkdir /ftp/data -pv
4)掛載samba服務端的共享目錄
mount -t cifs -o username=centos,password=123456 //192.168.23.12/data /ftp/data
  • 實戰演練2(必須掌握) 
    • 建立一個/data目錄,使得/data目錄被Samba共享,且建立一個系統組爲uplooking組,讓uplooking組在/data目錄具備可寫權限,再建立一個普通用戶yhy,yhy屬於uplooking組,且被添加到Samba用戶中
1: 建立組和用戶,將yhy用戶添加到Samba用戶裏
useradd yhy
groupadd uplooking
usermod -aG uplooking yhy
smbpasswd -a yhy

2:建立共享目錄,編輯/etc/samba/smb.conf文件添加
[data]
comment = data share
path = /data
guest ok = Yes
read only = No
write list = @uplooking

3:建立共享目錄,設置yhy具備寫權限
mkdir /data
setfacl -m user:yhy:rwx /data

4:使用yhy用戶登入
smbclient //192.168.23.12/data -U yhy

# 上傳
put yhy100

# 下載
get yhy100
    • 實戰練習 
      • 建立一個共享uplooking, 路徑爲/uplooking
      • 要求僅centos和gentoo能上傳文件
      • 此路徑對其它用戶不可見
      • 而且實現客戶端掛載
相關文章
相關標籤/搜索