vsftpd、nfs、samba

  • I/O:網絡、存儲

    • 存儲:

      • DAS:Direct Attached Storage
        接口類型:“block”;只有塊設備才能夠進行分區格式化
        設備:SATA,SAS;IDE,SCSI;USB;
      • NAS:Network Attached Storage(網絡附加存儲)
        接口類型:”file”
        協議:CIFS(samba), NFS(Network File System)
        RPC: Remote Procedure Call
      • SAN:Storage Area Network(存儲區域網絡)
        接口類型:”block”,
        協議:iSCSI(IP-SAN), FCSAN, FCoE,

ftp

  • ftp:file transfer protocol,文件傳輸協議 ;

    • 命令連接:傳輸命令(客戶端發給服務端的命令),服務端的21/tcp
    • 數據連接:傳輸數據(傳輸數據時建立,數據傳輸完拆除)

      • 主動模式:PORT
        Server: 20/tcp連接客戶端的命令連接使用的端口向后的第一個可用端口;
      • 被動模式:PASV
        Server:(當進行命令連接時,告訴客戶端,)服務端打開一個隨機端口,并等待客戶端連接
  • PAM:Pluggable Authenticate Module(插入式認證模塊)

    • pam中的模塊每一種提供一種認證功能或認證檢查功能;配置文件在/etc/pam.d/
    • pam是一種認證框架,自己不需要認證功能,可以幫其他應用程序提供認證服務;為每一種應用程序提供庫文件;
    • 高度模塊化;
    • ftp默認是使用pam進行認證的;
  • ftp協議:C/S

    • Server:

      • Windows: Serv-U, IIS, Filezilla
      • 開源:wuftpd, proftpd, pureftpd, vsftpd(Very Secure FTP daemon),Filezilla, …
    • Client:

      • Windows:ftp, Filezilla, CuteFTP, FlashFXP, …
      • 開源:lftp, ftp, Filezilla, gftp, …
        多數web瀏覽器同樣支持FTP

vsftpd

vsftpd is a Very Secure FTP daemon. It was written completely from scratch.

  • URL:

    • SCHEME://username:password@HOST:PORT/PATH/TO/FILE
    • 路徑映射:每個用戶的URL的/映射到當前用戶的家目錄 ;
  • vsftpd以ftp用戶的身份運行進程,默認認用戶即為ftp用戶,匿名用戶的默認路徑即ftp用戶的家目錄/var/ftp

    • ftp,anonymous 也可以作為用戶名使用;默認匿名登錄只有下載、查看下載的權限,
    • 示例:確定用戶對應的ftp的默認路徑為用戶家目錄

      ~]# lftp -u magedu 172.16.251.168
      Password: 
      lftp magedu@172.16.251.168:~> pwd
      ftp://magedu@172.16.251.168/%2Fhome/magedu
      
      ~]# finger magedu
      Login: magedu                     Name: magedu
      Directory: /home/magedu                 Shell: /bin/bash
  • 共享服務的檢查:

    • 遠程登錄的賬號有沒有本地文件系統的權限
    • 共享權限:ftp在配置中可以配置是否擁有共享權限

    注意:一個用戶通過文件共享服務訪問文件系統上的文件的生效權限為此二者的交集;

  • 程序環境:

    • 主程序:/usr/sbin/vsftpd
    • 主配置文件:/etc/vsftpd/vsftpd.conf
    • 數據根目錄:/var/ftp
    • Systemd Unit File: /usr/lib/systemd/system/vsftpd.service

    • /usr/lib/systemd/system/vsftpd.service 作為獨立守護來運行
      /usr/lib/systemd/system/vsftpd.target 作為托管到systemd上的時候運行

配置vsftpd:

  • 用戶類別:

    • 匿名用戶:anonymous –> 用戶:ftp, 家目錄映射為:/var/ftp
    • 系統用戶: 至少禁止系統用戶訪問ftp服務,/etc/vsftpd/ftpusers,PAM(/etc/pam.d/vsftpd);
      /etc/pam.d/vsftpd –> /etc/pam.d/password-auth –> pam_unix.so(此模塊說明是根據/etc/passwd、/etc/shadow來完成認證的)
    • 虛擬用戶:非系統用戶,用戶賬號非為可登錄操作系統的用戶賬號(非/etc/passwd);

    • 用戶通過vsftpd服務訪問到的默認路徑,是用戶自己的家目錄;默認可以自己有權限訪問的所有路徑間切換;
      禁錮用戶于其家目錄中;

  • 配置文件:/etc/vsftpd/vsftpd.conf

    • 語法格式:
      directive value
      指令的種類:布爾型參數、數值型參數、字符型參數
      注意:directive之前不能有多余字符,頂格寫;
  • 匿名用戶:

    anonymous_enable=YES                是否支持匿名登錄
      anon_upload_enable=YES                上傳文件
      anon_mkdir_write_enable=YES            創建目錄
      anon_other_write_enable=YES            定義除了創建文件、創建目錄以外的權限
    
      anon_umask=077
    • 示例:

      • 擁有文件系統權限:

        ~]# mkdir /var/ftp/upload
          ~]# chown ftp.ftp /var/ftp/upload/
          drwxr-xr-x. 2 ftp  ftp   6 Jun  5 21:50 upload
      • 擁有共享上傳權限:

        vi /etc/vsftpd/vsftpd.conf
          啟用:anon_upload_enable=YES
          ~]# systemctl restart vsftpd.service
      • 上傳文件:

        ~]# ll /var/ftp/upload/
        -rw-------. 1 ftp ftp 23 Jun  5 22:06 issue

        默認上傳的文件的權限是600,可以修改;
        文件的屬主、屬組,默認是用戶本身;修改:chown_uploads
        注意:關閉iptables、selinux

  • 系統用戶:

    local_enable=YES        啟用本地用戶
    write_enable=YES        是否本地用戶擁有寫權限,寫權限包括:upload,mkidr,other
    local_umask=022
    • 輔助配置文件/etc/vsftpd/ftpusers;

      ~]# cat /etc/pam.d/vsftpd 
      auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
      列在此文件中的用戶 均禁止使用ftp服務;
    • chroot_local_user=YES
      禁錮所有本地用戶于其家目錄;需要事先去除用戶對家目錄的寫權限;

    • chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd/chroot_list;此文件默認不存在得事先創建

      禁錮列表中文件存在的用戶于其家目錄中;需要事先去除用戶對家目錄的寫權限;

    • 傳輸日志:
      xferlog_enable=YES
      xferlog_file=/var/log/xferlog
      xferlog_std_format=YES

    • 守護進程的類型:

      • standalone:獨立守護進程;由服務進程自行監聽套按字,并接收用戶訪問請求;
      • transient:瞬時守護進程;由受托管方代為監聽套按字,服務進程沒有訪問請求時不啟動;當托管方收到訪問請求時,才啟動服務進程;

        • CentOS 6:xinetd獨立守護進程, /etc/xinetd.d/,
          CentOS 7:由systemd代為監聽;
    • 控制可登錄vsftpd服務的用戶列表:

      • userlist_enable=YES
        啟用/etc/vsftpd/user_list文件來控制可登錄用戶;
      • userlist_deny=
        YES:意味著此為黑名單;默認
        NO:白名單;
    • 上傳下載速率:

      • anon_max_rate=0
        local_max_rate=0
    • 并發連接數限制:

      • max_clients=2000
        max_per_ip=50
  • 虛擬用戶:

    • 用戶賬號存儲于何處?
      文件、MySQL、Redis、…

    • vsftpd:認證功能托管給pam;
      基于何種存儲服務來存儲用戶信息,以及對存儲服務的驅動要靠pam實現;

    • 虛擬賬號同匿名賬號一樣也得映射成一個系統賬號
      在mysql中啟用一個來賓賬號

    • 使用mysql安裝配置vsftp的虛擬用戶:

      1、# yum install -y mariadb-devel pam-devel
      2、# yum groupinstall -y "Development Tools" "Server Platform Development"
        真實需要的是:gcc ,為解決依賴關系安裝包組
      3、pam_mysql:
        lftp 172.16.0.1:/pub/Sources/sources/pam> mget pam_mysql-0.7RC1.tar.gz
        tar xf pam_mysql-0.7RC1.tar.gz
        cd pam_mysql-0.7RC1
        # ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security     
        # make && make install
        pam模塊存放路徑:/usr/lib64/security ;查看pam-mysql是否安裝成功
      
      4、vim /etc/my.cnf.d/server.cnf
        [mysqld]
        skip_name_resolve=ON
        innodb_file_per_table=ON
        log_bin=mysql-bin
      
      5、systemctl start mariadb.service
      
      6、創建數據庫、授權用戶、創建賬號和密碼;
        在mysql中創建一個用戶,為了安全只授予查詢權限
            GRANT SELCET ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'vsftpd';      
        FLUSH PRIVILEGES;
        創建數據庫
            CREATE DATABASE vsftpd;
        創建表
            CREATE TABLE users(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,password CHAR(48) NOT NULL,UNIQUE KEY(name));
        查看確認
        插入用戶
            INSERT INTO users(name,password) VALUES ('tom',PASSWORD('magedu')),('jerry',PASSWORD('jerry'));
        SELECT * FROM users;
      
      7、添加用戶
        mkdir /ftproot/
        useradd -d /ftproot/vuser vuser       將/ftproot/vuser當作vuser用戶登錄ftp后的根目錄
        chmod a-w /ftproot/vuser/
        mkdir /ftproot/vuser/pub 
      
      8、配置vsftpd,添加或修改以下選項:編輯/etc/vsftpd/vsftpd.conf
        pam_service_name=vsftpd.vusers    #與/etc/pam.d/vsftpd.vusers文件相對應就行
        guest_enable=YES                  
        guest_username=vuser                # 映射虛擬賬號,此賬號為映射后的本地系統賬號
      
      9、創建配置文件:/etc/pam.d/vsftpd.vusers     # README中有編輯格式,注意:用戶信息屬于mysql用戶
        auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
        account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
      
      10、重啟vsftpd.service
      
      11、其他系統登錄驗證是否可以訪問ftp
      
      12、虛擬用戶的寫權限,通過匿名一樣的指令進行定義;還能實現不同的用戶有不同的權限;
        vim /etc/vsftpd/vsftpd.conf
            user_config_dir=/etc/vsftpd/vusers_config/
        mkdir /etc/vsftpd/vusers_config/
      
        每個用戶創建相對應的配置文件,實現特定的權限
        vim /etc/vsftpd/vusers_config/tom 
            anon_upload_enable=YES
      
        vim /etc/vsftpd/vusers_config/jerry
            anon_upload_enable=YES
            anon_mkdir_write_enable=YES

nfs

  • nfs: Network File System

    • nis:Network Information Service;
      ldap:lightweight directory access protocol; ldap over ssl/tls;
  • nfsd: 2049/tcp
  • nfs服務器將本地磁盤的API改變成能夠通過套接字遠程調用的API;

  • rpc: remote procedure call
    輔助類的服務:rpc, portmapper rpc:遠程過程調用,

    • rpc.mountd:認證;
      因為rpc端口是半隨機的,客戶端先連接rpc server,得到rpc mountd的所在端口后;再去連接rpc mountd,得到令牌后再去連接nfs;
    • rpc.lockd:加鎖;
      避免同時讀寫時發生沖突
    • rpc.statd:狀態;
      狀態通知
  • NFS Server:

    • nfs-utils
    • /etc/exports或/etc/exports.d/*
      在這些文件中定義共享,把哪些目錄共享給哪些客戶端以哪些權限來訪問

      • /PATH/TO/SOME_DIR clients1(export_options, …) clients2(export_options, …)

        • clients:

          single host:ipv4, ipv6, FQDN;
          network:address/netmask, 支持長短格式的掩碼;
          wildcards:主機名通配,例如:*.magedu.com; 
          netgroups:NIS域內的主機組;@group_name;
          anonymous:使用*通配所有主機;
        • Options:

          General Options:
            ro:只讀
            rw:讀寫;
            sync:同步;
            async:異步;
            secure:客戶端端口小于1024,否則就要使用insecure選項;
          User ID Mapping:
             root_squash:壓縮root用戶,一般指將其映射為nfsnobody;
             no_root_squash:不壓縮root用戶;
             all_squash:壓縮所有用戶;
             anonuid and anongid:將壓縮的用戶映射為此處指定的用戶;
  • NFS Client:

    mount -t nfs servername:/path/to/share /path/to/mount_point  [-rvVwfnsh ] [-o options]
  • showmount – show mount information for an NFS server

    showmount -e NFS_SERVER_IP: 查看指定的nfs server上導出的所有文件系統; 
      showmount -a:在nfs server上查看nfs服務的所有客戶端列表;
  • exportfs
    -r:重新導出;
    -a:所有文件系統;
    -v:詳細信息;
    -u:取消導出文件系統;

    # exportfs -ar
      # exportfs -au

samba:

smb: Service message block
cifs: common internet filesystem

  • samba:Andrew Tridgell;

    • 功能:
      文件系統共享;
      打印機共享;
      NetBIOS協議;
  • 程序環境:

    • 服務端程序包:samba,samba-common, samba-libs
      Server and Client software to interoperate with Windows machines.
    • 主配置文件:/etc/samba/smb.conf, 由samba-common包提供;
    • 主程序:

      • nmbd:NetBIOS name server
      • smbd:SMB/CIFS services
    • Unit File:

      • smb.service
      • nmb.service
    • 監聽的端口:

      • 137/udp, 138/udp
      • 139/tcp, 445/tcp
  • 主配置文件的配置段:

    • ~ ]# grep -E -i “#(====| —)” /etc/samba/smb.conf

      #======================= Global Settings =====================================
      # ----------------------- Network-Related Options -------------------------
      # --------------------------- Logging Options -----------------------------
      # ----------------------- Standalone Server Options ------------------------
      # ----------------------- Domain Members Options ------------------------
      # ----------------------- Domain Controller Options ------------------------
      # ----------------------- Browser Control Options ----------------------------
      # --------------------------- Printing Options -----------------------------
      # --------------------------- File System Options ---------------------------
      #============================ Share Definitions ==============================
  • windows
    d:\data\tools:共享,共享名(software)
    servicename://172.18.0.70/software

  • 客戶端程序:

    • smbclient:交互式命令行客戶端,類似于lftp;
    • mount.cifs:掛載cifs文件系統的專用命令;
  • samba的配置:
    /etc/samba/smb.conf

    • 兩類配置段:

      • 全局配置

        [global]
        Network-Related Options
          workgroup =
          server string = 
          interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
          hosts allow = 127.  192.168.12.  192.168.13.
        Logging Options
          log file = /var/log/samba/log.%m
          max log size = 50
        Standalone Server Options
          security = user
              設定安全級別:取值有四個;
                  share:匿名共享;
                  user:使用samba服務自我管理的賬號和密碼進行用戶認證;用戶必須是系統用戶,但密碼非為/etc/shadow中的密碼,而由samba自行管理的文件,其密碼文件的格式由passdb backend進行定義;
                  server:由第三方服務進行統一認證;
                  domain:使用DC進行認證;基于kerberos協議進行;
          passdb backend = tdbsam
        Printing Options
          load printers = yes
          cups options = raw
      • 共享文件系統配置

        • [SHARED_NAME]

          • [homes]:為每個samba用戶定義其是否能夠通過samba服務訪問自己的家目錄;

            [homes]
                  comment = Home Directories
                  browseable = no               不同的用戶在客戶端是看不見彼此的家目錄,默認為no
                  writable = yes
            ;       valid users = %S
            ;       valid users = MYDOMAIN\%S
          • [printers]:定義打印服務;
          • [shared_fs]:定義共享的文件系統; 括號里的為共享名稱
        • 常用指令:

          comment:注釋信息;
          path:當前共享所映射的文件系統路徑;
          browseable:是否可瀏覽,指是否可被用戶查看;
          guest ok:是否允許來賓賬號訪問;
          public:是否公開所有用戶;
          writable:是否可寫;
          read only:是否為只讀;
          write list:擁有寫權限的用戶列表;
            用戶名
            @組名
            +組名
    • samba用戶管理:

      • smbpasswd [options] USERNAME
        -a:添加
        -x:刪除
        -d:禁用
        -e:啟用
      • pdbedit
        -L:列出samba服務中的所有用戶;
        -a, –create:添加用戶為samba用戶;
        -u, –user=USER:要管理的用戶;
        -x, –delete:刪除用戶;
        -t, –password-from-stdin:從標準輸出接收字符串作為用戶密碼;使用空提示符,而后將密碼輸入兩次;
    • 查看服務器端的共享:

      smbclient -L SMB_SERVER  [-U USERNAME]
    • 交互式文件訪問:

      smbclient //SMB_SERVER/SHARE_NAME [-U USERNAME]
    • 掛載訪問:

      mount -t cifs //SMB_SERVER/SAHRE_NAME  -o username=USERNAME,password=PASSWORD

      注意:掛載操作的用戶,與-o選項中指定用戶直接產生映射關系;
      此時,訪問掛載點,是以-o選項中的username指定的用戶身份進行;本地用戶對指定的路徑訪問,首先得擁有對應的本地文件系統權限;

  • smbstatus命令:
    顯示samba服務的相關共享的訪問狀態信息;
    -b:顯示簡要格式信息;
    -v:顯示詳細格式信息;

原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/77995

(0)
ss
上一篇 2017-06-13 09:50
下一篇 2017-06-13 11:35

相關推薦

  • 日志管理

    rsyslogd的相關介紹,journalctl的相關介紹和日志的轉儲

    2018-02-05
  • kickstart文件及引導鏡像的制作流程

    kickstart文件及引導鏡像的制作流程 kickstart文件制作流程 安裝制作kickstart文件的圖形界面工具 [root@slave1 ~]# yum install system-config-kickstart 開啟工具 [root@slave1 ~]# system-config-kickstart 在打開的圖形界面中通過file菜單選項選…

    Linux干貨 2017-09-04
  • 計算機組成原理

                                 計算機組成原理 Linux 操作系統是UNIX 操作系統的一種克隆系統。它誕生于1991 年的10 月5 日(這是第一次正式向外公布的時間)。以后借助于…

    Linux干貨 2016-10-27
  • 循環的特殊用法及函數

    while特殊用法 while read 變量名;do 循環體 done<文件路徑(將文件中的每一行依次讀入循環體,賦值給變量)   (())可以實現C語言風格的變量操作 for循環特殊格式 for((控制變量初始化;條件判斷表達式;控制變量修正表達式)) do 循環體 done 控制變量初始化僅在循環開始時執行一次,進行條件判斷成立后執行循…

    Linux干貨 2016-08-21
  • Linux進程篇16.0

    Linux進程介紹

    Linux干貨 2017-12-18
  • nl命令使用解析

    nl    命令功用: nl – number lines of files 顯示文件內容,并列出行號   命令樣式: nl [OPTION]… [FILE]…   命令選項: -b:正文行號,參數為樣式style -n:行號格式,參數為格式format -w:設定行號所占位數,參數為…

    Linux干貨 2016-10-20
欧美性久久久久