文件共享服務 FTP

文件共享服務 FTP

文件傳輸協議FTP

  • File Transfer Protocol 早期的三個應用級協議之一
  • 基於C/S結構
  • 雙通道協議:數據和命令鏈接
  • 數據傳輸格式:二進制(默認)和文本
  • 兩種模式:服務器角度
    • 主動(PORT style):服務器主動鏈接
      • 命令(控制):客戶端:隨機port --- 服務器:tcp21
      • 數據:客戶端:隨機port ---服務器:tcp20
    • 被動(PASV style):客戶端主動鏈接
      • 命令(控制):客戶端:隨機port --- 服務器:tcp21
      • 數據:客戶端:隨機port ---服務器:隨機port
  • 服務器被動模式數據端口示例:
    • 227 Entering Passive Mode (172,16,0,1,224,59)
    • 服務器數據端口爲:224*256+59

FTP軟件介紹

  •  FTP服務器:
    • Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
    • vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器
      • 高速,穩定,下載速度是WU-FTP的兩倍
      • ftp.redhat.com數據:單機最多可支持15000個併發
  • 客戶端軟件:
    • ftp,lftp,lftpget,wget,curl
      • ftp -A ftpserver port -A主動模式 –p 被動模式
      • lftp –u username ftpserver
      • lftp username@ftpserver
      • lftpget ftp://ftpserver/pub/file
      • gftp:GUI centos5 最新版2.0.19 (11/30/2008)
      • filezilla,CuteFtp,FlashFXP,LeapFtp
      • IE ftp://username:password@ftpserver
  • 狀態碼:
    • 1XX:信息 125:數據鏈接打開
    • 2XX:成功類狀態 200:命令OK 230:登陸成功
    • 3XX:補充類 331:用戶名OK
    • 4XX:客戶端錯誤 425:不能打開數據鏈接
    • 5XX:服務器錯誤 530:不能登陸
  • 用戶認證:
    • 匿名用戶:ftp,anonymous,對應Linux用戶ftp
    • 系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
    • 虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
      • nsswitch:network service switch名稱解析框架
      • pam:pluggable authentication module 用戶認證
      • /lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服務

  • 由vsftpd包提供
  • 再也不由xinetd管理
  • 用戶認證配置文件:/etc/pam.d/vsftpd
  • 服務腳本: /usr/lib/systemd/system/vsftpd.service
    • /etc/rc.d/init.d/vsftpd
  • 配置文件:/etc/vsftpd/vsftpd.conf
    • man 5 vsftpd.conf
    • 格式:option=value
    • 注意:= 先後不要有空格
  • 匿名用戶(映射爲系統用戶ftp )共享文件位置:/var/ftp
  • 系統用戶共享文件位置:用戶家目錄
  • 虛擬用戶共享文件位置:爲其映射的系統用戶的家目錄

vsftpd服務配置

  • 命令端口
    • listen_port=21
  • 主動模式端口
    • connect_from_port_20=YES 主動模式端口爲20
    • ftp_data_port=20 (默認) 指定主動模式的端口
  • 被動模式端口範圍
    • linux 客戶端默認使用被動模式
    • windows 客戶端默認使用主動模式
    • pasv_min_port=6000 0爲隨機分配
    • pasv_max_port=6010
  • 使用當地時間
    • use_localtime=YES 使用當地時間(默認爲NO,使用GMT)
  • 匿名用戶
    • anonymous_enable=YES 支持匿名用戶 
    • no_anon_password=YES(默認NO) 匿名用戶略過口令檢查
    • anon_upload_enable=YES 匿名上傳,注意:文件系統權限
    • anon_mkdir_write_enable=YES 匿名建目錄
    • anon_world_readable_only (默認YES)只能下載所有讀的文件
    • anon_umask=0333 指定匿名上傳文件的umask,默認077
    • anon_other_write_enable=YES 可刪除和修改上傳的文件
    • 指定上傳文件的默認的全部者和權限
    • chown_uploads=YES(默認NO)
    • chown_username=wang
    • chown_upload_mode=0644
  •  Linux系統用戶
    • local_enable=YES 是否容許linux用戶登陸
    • write_enable=YES 容許linux用戶上傳文件
    • local_umask=022 指定系統用戶上傳文件的默認權限
    • guest_enable=YES 全部系統用戶都映射成guest用戶
    • guest_username=ftp 配合上面選項才生效,指定guest用戶
    • local_root=/ftproot guest用戶登陸所在目錄
  • 禁錮全部系統用戶在家目錄中
    • chroot_local_user=YES(默認NO,不由錮)禁錮系統用戶
  • 禁錮或不由錮特定的系統用戶在家目錄中,與上面設置功能相反
    • chroot_list_enable=YES
    • chroot_list_file=/etc/vsftpd/chroot_list
    • 當chroot_local_user=YES時,則chroot_list中用戶不由錮
    • 當chroot_local_user=NO時,則chroot_list中用戶禁錮
  •  wu-ftp日誌:默認啓用
    • xferlog_enable=YES (默認)  啓用記錄上傳下載日誌
    • xferlog_std_format=YES (默認) 使用wu-ftp日誌格式
    • xferlog_file=/var/log/xferlog (默認)可自動生成
  • vsftpd日誌:默認不啓用
    • dual_log_enable=YES 使用vsftpd日誌格式,默認不啓用
    • vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成
  • 登陸提示信息
    • ftpd_banner=「welcome to mage ftp server"
    • banner_file=/etc/vsftpd/ftpbanner.txt
  • 目錄訪問提示信息
    • dirmessage_enable=YES (默認)
    • message_file=.message(默認)  信息存放在指定目錄下.message
  • 使用pam(Pluggable Authentication Modules)完成用戶認證
    • pam_service_name=vsftpd
      • pam配置文件:/etc/pam.d/vsftpd
      • /etc/vsftpd/ftpusers 默認文件中用戶拒絕登陸
  • 是否啓用控制用戶登陸的列表文件
    • userlist_enable=YES 默認有此設置
    • userlist_deny=YES(默認值) 黑名單,不提示口令,NO爲白名單
    • userlist_file=/etc/vsftpd/users_list 此爲默認值
  • vsftpd服務指定用戶身份運行
    • nopriv_user=nobody (默認值)
  • 鏈接數限制
    • max_clients=0 最大併發鏈接數
    • max_per_ip=0 每一個IP同時發起的最大鏈接數
  • 傳輸速率:字節/秒
    • anon_max_rate=0 匿名用戶的最大傳輸速率
    • local_max_rate=0 本地用戶的最大傳輸速率
  • 鏈接時間:秒爲單位
    • connect_timeout=60 主動模式數據鏈接超時時長
    • accept_timeout=60 被動模式數據鏈接超時時長
    • data_connection_timeout=300 數據鏈接無數據輸超時時長
    • idle_session_timeout=60 無命令操做超時時長
  • 優先以文本方式傳輸
    • ascii_upload_enable=YES
    • ascii_download_enable=YES

實現基於SSL的FTPS

  •  查看是否支持SSL
    • ldd `which vsftpd` 查看到libssl.so
  • 建立自簽名證書
    • cd /etc/pki/tls/certs/
    • make vsftpd.pem
    • openssl x509 -in vsftpd.pem -noout –text
  • 配置vsftpd服務支持SSL:/etc/vsftpd/vsftpd.conf
    • ssl_enable=YES 啓用SSL
    • allow_anon_ssl=NO 匿名不支持SSL
    • force_local_logins_ssl=YES 本地用戶登陸加密
    • force_local_data_ssl=YES 本地用戶數據傳輸加密
    • rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
  •  用filezilla等工具測試

vsftpd虛擬用戶

  • 虛擬用戶:
    • 全部虛擬用戶會統一映射爲一個指定的系統賬號:訪問共享位置,即爲此係統賬號的家目錄
    • 各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定
  • 虛擬用戶賬號的存儲方式:
    • 文件:編輯文本文件,此文件須要被編碼爲hash格式
    • 奇數行爲用戶名,偶數行爲密碼
    • db_load -T -t hash -f vusers.txt vusers.db
    • 關係型數據庫中的表中:
      • 實時查詢數據庫完成用戶認證
    • mysql庫:pam要依賴於pam-mysql
      • /lib64/security/pam_mysql.so
      • /usr/share/doc/pam_mysql-0.7/README

實現基於文件驗證的vsftpd虛擬用戶

  • 建立用戶數據庫文件
  1. [root@CentOS7 ~]# yum install vsftpd -y
  2. [root@CentOS7 ~]# cat <<-EOF > /etc/vsftpd/vuser.txt
    > zhangsan
    > 123
    > lisi
    > 456
    > EOF
  3. [root@CentOS7 ~]# cd /etc/vsftpd/
    [root@CentOS7 vsftpd]# db_load -T -t hash -f vuser.txt vuser.db
    [root@CentOS7 vsftpd]# chmod 600 vuser.db
  • 建立用戶和訪問FTP目錄
  1. [root@CentOS7 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin vuser
  2. [root@CentOS7 vsftpd]# chmod 555 /var/ftproot/
  3. [root@CentOS7 vsftpd]# mkdir /var/ftproot/upload
  4. [root@CentOS7 vsftpd]# setfacl -m u:vuser:rwx /var/ftproot/upload
  • 建立pam配置文件
  1. vim /etc/pam.d/vsftpd.db
    1. auth required pam_userdb.so db=/etc/vsftpd/vuser
      account required pam_userdb.so db=/etc/vsftpd/vuser
  • 映射爲系統用戶 vuser , 指定 pam的配置文件
  1. vim /etc/vsftpd/vsftpd.conf
    guest_enable=YES
    guest_username=vuser
    pam_service_name=vsftpd.db
  • SELinux設置
  1. 禁用SELinux 或者 setsebool -P ftpd_full_access 1
  • 虛擬用戶創建獨立的配置文件
  1. mdkir /etc/vsftpd/vuser.d/
  2. vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vuser.d/
  3. 容許虛擬用戶 zhangsan 可讀寫
    1. cd /etc/vsftpd/vuser.d/
    2. vim zhangsan
      1. anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        anon_other_write_enable=YES
    3. 在 根目錄 /var/ftproot/能夠下載,但不能上傳
    4. 在 /var/ftproot/upload目錄下是能夠下載和上傳的
    5. 建立 虛擬用戶 lisi 的配置文件
      1. vim /etc/vsftpd/vuser.d/lisi
        1. local_root=/ftproot
      2. mkdir /ftproot
      3. lisi 用戶能夠下載但不能上傳到根目錄

實現基於MYSQL驗證的vsftpd虛擬用戶

  • 虛擬用戶信息存放在一臺獨立的 mysql 服務器中
    • yum install mariadb-server -y; mysql
    • mysql> create database vsftpd;
    • mysql> use vsftpd;
    • mysql> create table users(id int auto_increment not null primary key,name char(50) binary not null, password char(48) binary not null);
    • mysql> insert into users(name,password)values('lisi',password('456'));
    • mysql> insert into users(name,password)values('zhangsan',password('123'));
    • grant select on vsftpd.users to vsftpd@'192.168.209.%' identified by '123';  // vsftpd服務器經過這個網段的vsftpd這個用戶鏈接上數據庫
    • flush privileges;
  • 搭建獨立一臺 vsftpd 服務器
    • ​​​​​​​安裝 pam_mysql 
      • ​​​​​​​下載 pam_mysql 的源碼包,編譯安裝
        • ​​​​​​​yum install gcc mariadb-devel pam-devel gcc-c++
        • tar xvf pam_mysql-0.7RC1.tar.gz
        • cd /data/pam_mysql-0.7RC1/
          ./configure --with-pam-mods-dir=/lib64/security/
          make && make install
    • 安裝 vsftpd 服務,系統用戶和 ftp 根目錄,指定 pam 配置文件,修改配置文件, 啓動 vsftpd 服務
      • yum install vsftpd -y
      • useradd -d /data/ftproot -s /sbin/nologin vuser
        chmod 555 /data/ftproot/
        mkdir /data/ftproot/upload
        setfacl -m u:vuser:rwx /data/ftproot/upload
      • vim /etc/pam.d/vsftpd.mysql
        auth required pam_mysql.so user=vsftpd passwd=123 host=192.168.209.7 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
        account required pam_mysql.so user=vsftpd passwd=123 host=192.168.209.7 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
      • vim /etc/vsftpd/vsftpd.conf
        pam_service_name=vsftpd.mysql
        guest_enable=yes
        guest_username=vuser
      • systemctl start vsftpd
  • 獨立一臺 ftp 客戶端測試
相關文章
相關標籤/搜索