1. 程式人生 > >Linux之FTP服務器,NFS服務器,SAMBA服務器詳解

Linux之FTP服務器,NFS服務器,SAMBA服務器詳解

修改 mysql模塊 協議 std 版本 nag wrap 用戶 guest

本文介紹Linux中的三個網絡文件共享服務:ftp,nfs,samba

FTP服務

File Transfer Protocol 早期的三個應用級協議之一

  • 基於C/S結構 ?雙通道協議:數據和命令連接
  • 數據傳輸格式:二進制(默認)和文本
  • 兩種模式:(服務器角度)
    主動(PORT style):服務器主動連接
    ??? 命令(控制):客戶端:隨機port ---> 服務器:tcp 21
    ????數據:客戶端:隨機port <---服務器:tcp 20
    被動(PASV style):客戶端主動連接
    ????命令(控制):客戶端:隨機port ---> 服務器:tcp 21
    ????數據:客戶端:隨機port --->服務器:隨機port
    接下來我來用一個實驗演示FTP:基於MySQL驗證的vsftpd虛擬用戶

    實驗準備:

  • centos 7 作為FTP服務器
  • centos 7test 作為安裝了MySQL的客戶端
  1. 在ftp服務器上安裝pam_mysql
    [root@centos7 ~]# tar xvf pam_mysql-0.7RC1.tar.gz 
    [root@centos7 ~]# yum -y groupinstall "Development tools"#依賴工具包
    [root@centos7 ~]# yum -y install mariadb-devel pam-devel openssl-devel#依賴
    [root@centos7 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/securit
    [root@centos7 pam_mysql-0.7RC1]#  make && make install
  2. 在ftp服務器上安裝vsftpd
    [root@centos7 ~]# yum -y install vsftpd
  3. 在數據庫服務器上安裝數據庫
    [root@centostest7 ~]# yum -y install mariadb#詳情看我前面的博客,有詳細介紹
  4. 在數據庫服務器上創建數據庫
    [root@centos7test ~]# mysql
    MariaDB [(none)]> create database ftpdb;
    MariaDB [(none)]> grant all on ftpdb.* to ftpuser@‘%‘ identified by ‘centos‘;
  5. 在數據庫服務器上使用創建的mysql帳戶登錄數據庫,並且創建數據表
    [root@centos7test ~]# mysql -uftpuser -h 172.18.252.106 -pcentos
    MariaDB [(none)]> use ftpdb;
    MariaDB [ftpdb]> create table ftpvusers (
        -> id int unsigned auto_increment primary key,
        -> username char(30),
        -> password char(48));
    MariaDB [ftpdb]> insert into ftpvusers (username,password) values (‘lishuyang‘,password(‘centos‘)),(‘wangyapeng‘,password(‘centos‘));
  6. 在FTP服務器上安裝vsftpd並且配置連接MySQL的pam_mysql模塊
    [root@centos7 ~]# yum -y install vsftpd
    [root@centos7 ~]# vim /etc/pam.d/vsftpd.mysql
    auth required pam_mysql.so user=ftpuser passwd=centos host=172.18.252.106 db=ftpdb table=ftpusers usercolumn=username passwdcolumn=password crypt=2
    account required pam_mysql.so user=ftpuser passwd=centos host=172.18.252.106 db=ftpdb table=ftpusers usercolumn=username passwdcolumn=password crypt=2

    配置字段說明
    ? auth 表示認證
    ? account 驗證賬號密碼正常使用
    ? required 表示認證要通過
    ? pam_mysql.so模塊是默認的相對路徑,是相對/lib64/security/路徑而言,也可以寫絕對路徑;後面為給此模塊傳遞的參數
    ? user=vsftpd為登錄mysql的用戶
    ? passwd=magedu 登錄mysql的的密碼
    ? host=mysqlserver mysql服務器的主機名或ip地址
    ? db=vsftpd 指定連接msyql的數據庫名稱
    ? table=users 指定連接數據庫中的表名
    ? usercolumn=name 當做用戶名的字段
    ? passwdcolumn=password 當做用戶名字段的密碼
    ? crypt=2 密碼的加密方式為mysql password()函數加密

  7. 修改vsftpd配置文件,使其適應mysql認證
    [root@centos7 ~]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    userlist_enable=YES
    tcp_wrappers=YES
    guest_enable=YES
    pam_service_name=vsftpd.mysql  #使其原系統用戶無法登陸
    guest_username=ftpvuser
    user_config_dir=/etc/vsftpd/configdir                                    

    配置字段說明及常用的配置匯總
    ? 在centos7當中ftp用戶的根目錄不能有w權限
    ? listen_port (Default: 21) FTP命令通道的監
    ? connect_from_port_20 (Default: YES) 是否允許主動傳輸
    ? ftp_data_port (Default: 20) 主動模式使用的端口
    ? pasv_min_port=9527 (Default: 0) 被動模式,服務端開啟的隨機端口的最小值
    ? pasv_max_port=9529 (Default: 0) 被動模式,服務端開啟的隨機端口的最大值
    ? anonymous_enable=YES (Default: YES) 是否開啟匿名用戶
    ? local_enable=NO (Default: NO) 是否開啟Linux本地用戶登錄
    ? local_root=(Default: (none)) 非匿名用戶登錄時所在的目錄,默認是各自的家目錄
    ? write_enable=NO (Default: NO) 是否允許Linux本地用戶上傳文件
    ? local_umask=022 (Default: 077) 本地用戶上傳文件的默認權限
    ? anon_upload_enable=YES (Default: NO) 是否允許匿名用戶上傳,如啟動,還需讓ftp用戶對/var/ftp/pub及其他需要上傳的目錄設置wx權限
    ? anon_mkdir_write_enable=YES (Default: NO) 是否允許匿名用戶創建目錄,如啟動,還需讓ftp用戶對/var/ftp/pub及其他需要上傳的目錄設置wx權限
    ? no_anon_password=YES (Default: NO) 使用ftp客戶端登錄匿名時,是否密碼,如為NO,即默認,則需要輸入任意密碼,如為YES,直接登錄,不用輸入。
    ? anon_world_readable_only (Default: YES) 匿名用戶下載文件時,文件一定要other上也有r權限。
    ? anon_other_write_enable=YES (Default: NO) 匿名用戶是否可以刪除及重命名
    ? anon_umask (Default: 077) 匿名用戶上傳時的默認權限。
    ? chown_uploads=YES (Default: NO) 匿名用戶上傳文件的所屬人是否要更改。如YES,則更改為chown_username所指定的
    ? chown_username (Default: root)
    ? chown_upload_mode=0755 (Default: 0600)在chown_uploads生效的前提下,設置匿名用戶的上傳權限,一旦設置anon_umask失效。且權限一定要權限4位
    ? guest_enuable (Defalt: NO) 所有的非匿名用戶都映射為了guest用戶
    ? guest_username (Default: ftp) guest用戶是誰,默認ftp
    ? chroot_local_user=YES 將linux系統用戶的根目錄設置為家目錄,註意在Centos7中該目錄對用戶不能有w權限,當為YES時,所有人都不能越獄,當為NO時,所有人都能越獄。
    ? chroot_list_enable=YES 越獄例外,下一行一定要有。當上一行為YES是,為白名單,當為NO時,為黑名單
    ? chroot_list_file=/etc/vsftpd/chroot_list
    ? xferlog_enable=YES (Default: no) 是否開啟上傳、下載日誌
    ? xferlog_std_format (Default: no) 是否使用wuftp格式
    ? xferlog_file (Default: /var/log/xferlog) xferlog的存放路徑
    ? dual_log_enable (Default: NO) 是否同時開啟vsftpd格式的日誌,該格式記錄信息更多,不只upload/downloads
    ? vsftpd_log_file (Default: /var/log/vsftpd.log) vsftpd格式日誌的存放路徑
    ? ftpd_banner (Default: none) 登錄時的歡迎信息。不是所有客戶端都可見
    ? banner_file Default: (none) 登錄時的歡迎信息。不是所有客戶端都可見,當該行存在時,則優先於ftpd_banner
    ? dirmessage_enable (Default: NO) 每進入一個目錄時,如果該目錄下有.message文件,則將其內容展現出來,不是所有客戶端都可見
    ? message_file (Default: .message)
    ? userlist_enable=YES (Default: NO) 是否啟用用戶過濾功能。如YES,則開啟,過濾文件由userlist_file決定
    ? userlist_file (Default: /etc/vsftpd/user_list) 過濾文件路徑
    ? userlist_deny (Default: YES) 當該值為YES時userlist為黑名單,反之為白名單
    /etc/vsftpd/ftpuser 固定是黑名單,寫入其中的用戶一定不能登錄ftp
    ? max_clients (Default: 2000) 允許同時登錄的客戶端請求數
    ? nopriv_user (Default: nobody) 客戶端建立命令通道時,服務端與之連接的進程的所屬用戶
    ? anon_max_rate (Default: 0) 匿名用戶上傳和下載的最大速度,單位字節。
    ? local_max_rate (Default: 0) Linux本地用戶上傳和下載的最大速度,單位字節。
    ? connect_timeout (Default: 60) 主動模式數據連接超時時長
    ? accept_timeout (Default: 60) 被動模式數據連接超時時長
    ? data_connection_timeout (Default: 300) 數據連接無數據傳輸時的超時時長
    ? idle_session_timeout (Default: 300) 無命令操作超時時長
    ? ascii_upload_enable=NO ASCII模式上傳
    ? ascii_download_enable=NO ASCII模式下載

  8. 重啟服務並且測試

    [root@centos7 ~]# systemctl restart vsftpd
    [root@centos7test ~]# systemctl restart mariadb.service 
    [root@centos7 ~]# lftp 172.18.252.106
    lftp 172.18.252.106:~> user wangyapeng
    Password: 
    lftp [email protected]:~> #成功登陸到ftp服務器

    這樣我們利用MySQL的用戶成功登陸到FTP服務器上

    NFS服務

     NFS 就是 Network FileSystem 的縮寫,最早之前是由sun 這家公司所發展出來的。 它最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享個別的檔案 (share files)。所以,你也可以簡單的將他看做是一個文件服務器,這個 NFS 服務器可以讓你的 PC 來將網絡遠程的 NFS 服務器分享的目錄,掛載到本地端的機器當中, 在本地端的機器看起來,那個遠程主機的目錄就好像是自己的一個磁盤分區槽一樣,使用上面相當的便利。

    NFS工具

    ###rpcinfo
    [root@centos7 ~]# rpcinfo -p 172.18.252.106   # 查看RPC註冊程序 
    [root@centos7 ~]# rpcinfo -s 172.18.252.106
    ###exportfs
    [root@centos7 ~]# exportfs -v  #查看本機所有NFS共享 
    [root@centos7 ~]# exportfs -r   #重讀配置文件,並共享目錄 
    [root@centos7 ~]# exportfs -a  #輸出本機所有共享 
    [root@centos7 ~]# exportfs -au #停止本機所有共享 
    ###展示遠程的共享的目錄
    [root@centos7 ~]# showmount -e 172.18.252.106

    實驗演示nfs自動掛載

    我們有時候需要使用遠程的共享目錄,我們可以手動掛載遠程目錄,那麽需要好多臺主機上的目錄的話我們是不是也需要一個一個手動掛載?不知道大家有沒有註意到我們光盤目錄,當我們用的時候它會自動掛載,不用的他不掛載,現在我來以一個實驗模擬自動掛載目錄

    1. 安裝nfs

      [root@centos7 ~]# yum -y install nfs-utils
      [root@centos7 ~]# vim /etc/exports.d/mage.exports #編輯配置文件
      /app/homedir *(rw,sync) # 要共享的目錄
      [root@centos7 ~]# exportfs -r  #重新讀取文件
      [root@centos7 ~]# systemctl restart nfs  #重新啟動服務

      配置文件說明
      ? 默認選項:(ro,sync,root_squash,no_all_squash)
      ? ro,rw 只讀和讀寫
      ? async 異步,數據變化後不立即寫磁盤,性能高
      ? sync(1.0.0後為默認)同步,數據在請求時立即寫入共享 ? no_all_squash (默認)保留共享文件的UID和GID
      ? all_squash 所有遠程用戶(包括root)都變成nfsnobody
      ? root_squash (默認)遠程root映射為nfsnobody,UID為65534,早期版本 是4294967294 (nfsnobody)
      ? no_root_squash 遠程root映射成root用戶
      ? anonuid和anongid 指明匿名用戶映射為特定用戶UID和組GID,而非 nfsnobody,可配合all_squash使用

    2. 安裝autofs
      [root@centos7 ~]# yum -y install autofs
    3. 配置主配置文件
      [root@centos7 ~]# vim /etc/auto.master
      /app/homedir    /etc/auto.mage   #掛載目錄的目錄名
      [root@centos7test ~]# vim /etc/auto.mage 
      * -fstype=nfs   172.18.252.106:/app/homedir/& #基名與遠程目錄匹配,後向引用
    4. 重啟autofs服務
      [root@centos7 ~]# service autofs restart
    5. 測試,客戶端和服務器創建一個用戶mage
      
      [root@centos7 ~]# su - mage
      [mage@centos7 ~]#ls -a
      .  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
      [mage@centos7 ~]$ df
      172.18.252.106:/app/homedir
                    186532       8    186524   1% /app/homedir
    至此用戶家目錄切換成功,且自動掛載,一段時間後會自動取消掛載
    ---
    ## samba服務
    SMB:Server Message Block服務器消息塊,IBM發布,最早是DOS網絡文 件共享協議 
    SAMBA的功能: 
    ? 共享文件和打印,實現在線編輯 
    ? 實現登錄SAMBA用戶的身份認證 
    ? 可以進行NetBIOS名稱解析 
    ? 外圍設備共享 
    ### 實驗演示samba多用戶掛載(僅支持centos7)
    1. 在服務器上創建用戶

    [root@centos7 ~]# useradd -s /sbin/nologin xiaofan
    [root@centos7 ~]# useradd -s /sbin/nologin xiaochen

    2. 設置登陸samba服務的密碼

    [root@centos7 ~]# smbpasswd -a xiaofan #設置登陸密碼
    [root@centos7 ~]# smbpasswd -a xiaochen

    3. 創建共享目錄 

    [root@centos7 ~]# mkdir /app/smbshared
    [root@centos7 ~]# chcon -t samba_share_t /app/smbshared #不用關閉selinux直接給目錄設置期望值
    [root@centos7 ~]# setfacl -m u:xiaofan:rwx /app/smbshared #給用戶設置讀寫權限
    [root@centos7 ~]# setfacl -m u:xiaochen /app/smbshared

    4. 配置共享目錄

    [root@centos7 ~]# vim /etc/samba/smb.conf
    [gongxiang]
    comment = Gongxiang
    path = /app/smbshare #設置的訪問目錄
    browseable = yes #可以瀏覽
    writeable = no #可寫
    write list = xiaofan,xiaochen #可以寫的用戶
    public = yes #是否可見
    allow list = 172.18. 192.168. #表示可以訪問的網段

    5. 重新啟動服務

    [root@centos7 ~]# systemctl restart smb

    6. 客戶端安裝工具

    [root@centos7 ~]# yum -y install cifs-utils

    7. 配置自動掛載目錄

    [root@centos7 ~]# vim /etc/fstab
    //172.18.254.96/gongxiang /mnt/ cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0

    8. 配置登陸用戶

    [root@centos7 ~]# vim /etc/multiuser
    username=xuxian
    password=centos

    9. 掛載

    [root@centos7 ~]# mount -a
    [root@centos7 ~]# df
    172.18.252.106:/gongxiang
    3667968 33024 3634944 1% /mnt/#
    [root@centos7 ~]# smbclient -L //172.18.252.106 -U xuxian

  9. 以低權限xuxian的身份獲取服務器上的高權限的xiaofan.xianchen 的權限

    [root@centos7 ~]# useradd xiaofan
    [root@centos7 ~]# useradd xiaochen
    [root@centos7 ~]# su - xiaofan #切換用戶
    [root@centos7 ~]# cifscreds add 172.18.252.106#隨便輸入服務端xiaofan.xiaochen的samba密碼

    至此完成samba多用戶掛載

    使用NFS,NIS,AUTOFS實現用戶帳號及家目錄的漫遊

    本實驗的場景:生活中一臺服務器提供賬號和目錄共享,然後其他主機可以實現這臺服務器的賬號共享及目錄的漫遊,使用對方目錄的時候自動掛載,不使用的時候自動取消掛載

  10. 服務端安裝軟件包
    [root@localhost ~]# yum -y install ypserv ypbind yp-tools
  11. 配置NIS域,並且使之生效
    [root@localhost ~]# vim /etc/sysconfig/network
    # Created by anacondoa
    NISDOMAIN=cyn
    [root@localhost ~]# nisdomainname cyn
  12. 編寫NIS主配置文件
    [root@centos7(nanyibo) ~]# vim /etc/ypserv.conf#最後添加內容
    127.0.0.1:*:*:none
    172.18.254.0/255.255.255.0:*:*:none #允許這個網段內的主機連接
    *:*:*:deny #其他網段拒絕
  13. 啟動NIS服務,並且設置為開機啟動
    [root@localhost ~]# systemctl restart ypserv
    [root@localhost ~]# systemctl enable ypserv
  14. 創建幾個用戶並指定家目錄
    [root@localhost ~]# mkdir /app/homedir#用戶的家目錄在這個目錄下
    [root@localhost ~]# for n in {1..5};do useradd -d /app/homedir/nisuser$n nisuser$n;echo centos |passwd --stdin nisuser$n;done
  15. nis生成數據庫
    [root@centos7test app]# /usr/lib64/yp/ypinit -m
    #先按CTRL+D,然後按Y。即可生成
  16. 配置NFS
    [root@centos7test ~]# yum -y install nfs-utils
    [root@localhost ~]# vim /etc/exports.d/cynports
    /app/homedir *(rw,sync)
    [root@localhost ~]# systemctl restart nfs
  17. 配置autofs
    [root@localhost ~]# yum -y install autofs
    [root@localhost ~]# vim /etc/auto.master
    /app/homedir    /etc/auto.cyn  timeout=10
    [root@localhost ~]# vim /etc/auto.cyn
    *      -fstype=nfs             172.18.254.234:/app/homedir/&
  18. 重新啟動autofs
    [root@localhost ~]# service autofs restart
  19. 客戶端nis的配置
    [root@centos6 ~]# yum install -y ypbind
    [root@centos6 ~]# setup

    這個時候會出現圖形化界面,選擇use nis ,空格確定,選擇next,
    技術分享圖片
    填入你自己設置的域名和服務器IP,選擇ok,然後再會出現一個界面。選擇退出即可
    技術分享圖片

  20. autofs客戶端的測試
    [root@localhost ~]# mkdir -p /app/homedir
    [root@localhost ~]# su - nisuser1
    [nisuser2@localhost ~]$ ls -a
    .  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
    [nisuser2@localhost ~]$ df
    172.18.254.136:/app/homedir/nisuser1
                      52403200 4518272  47884928   5% /app/homedir/nisuser1

    至此實驗完成,實現了服務器的用戶賬號共享及用戶家目錄的漫遊,對於所需目錄的自動掛載。

Linux之FTP服務器,NFS服務器,SAMBA服務器詳解