zoukankan      html  css  js  c++  java
  • 网络文件共享服务—vsftpd服务

    文件传输协议(FTP)

    文件传输协议:File Transfer Protocol是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。

    服务器端:vsftpd

    客户端:lftp

    安装:yum -y install vsftpd lftp

    用户认证配置文件:/etc/pam.d/vsftpd

    服务脚本: /usr/lib/systemd/system/vsftpd.service

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

    匿名用户共享文件位置:/var/ftp

    系统用户共享文件位置:用户家目录

    虚拟用户共享文件位置:为其映射的系统用户的家目录

    数据传输格式:二进制(默认)和文本

    vsftp的端口分为两种

      命令端口:传输指令的端口,此端口为固定的端口号21

      传输端口:传输数据的端口:又分为主动模式和被动模式:(主动模式为利用tcp/ip的20端口来发起请求,数据端口只有在通讯的时候才会打开,被动模式为随机端口)

    两种模式:(从服务器角度去看)

      主动模式::服务器主动连接 客户端(使用的是固定端口)

        命令(控制):客户端:随机port --->服务器:tcp21

           数据:客户端:随机port <---服务器:tcp20

      被动(PASV style):客户端主动连接

        命令(控制):客户端:随机port --->服务器:tcp21

        数据:客户端:随机port --->服务器:随机port 服务器被动模式数据端

    示例: 227 Entering Passive Mode (192,168,175,138,224,59) 服务器数据端口为:224*256+59 

    ftp -A 192.168.60.4(服务器IP地址)        -A以主动模式 登陆               –p 以被动模式登陆

    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 (其中lftpget为非交互式的下载,要安装lftp)

    ftp -A ftpserver port -A主动模式 –p 被动模式

    状态码:

    1XX:信息                                    125:数据连接打开

    2XX:成功类状态                       200:命令OK 230:登录成功

    3XX:补充类                               331:用户名OK

    4XX:客户端错误                       425:不能打开数据连接

    5XX:服务器错误                       530:不能登录

    用户认证:

    匿名用户:ftp,   anonymous (在连接ftp是输入这两个其中的一个匿名帐户就可以了。linux账户里默认在安装vsftp服务时会创建一个系统用户ftp)

    系统用户:Linux用户,     用户在/etc/passwd,密码/etc/shadow

    虚拟用户:特定服务的专用用户,独立的用户/密码文件

    vsftpd服务

    在服务器端安装yum install vsftpd

    启动服务:service vsftpd start(在centos6上)systemctl start vsftpd

    查看端口是否打开21:ss -nult

    在客户端安装:yum install ftp

    任何账户登陆如果自己的根目录有写权限则无法登陆:(需要修改权限)

    例如匿名账号登陆自己的根目录对应的服务器的目录为/var/ftp/,若ftp对other用户有写权限则无法登陆

    例如系统账号登陆自己的根目录对应的服务器的目录为 /home/lv, 若lv目录对lv用户有写权限则无法登陆

    匿名用户登陆:输入用户名;密码可以为空。

    在浏览器上里也可以查看:ftp://192.168.60.2

    QQ截图20180625200852

    默认的共享文件位置:/var/ftp /pub/

    ftp> ?   (可以查看ftp使用的命令)

    ftp> !cat /etc/passwd  (加上!可以使用linux的命令查看操作linux系统里的各种操作)

    ftp> !ls /data/

    ftp> ls  (不添加!则只执行查看共享目录的操作)
    get:下载数据:默认下载的路径为自在哪里登陆ftp服务器时自己所在的路径

    put:上传数据  :默认上传的文件路径为自在哪里登陆ftp服务器时自己所在的路径下的文件

    lcd  /data/  切换自己当前所在的linux的目录

    vsftpd服务配置选项

    listen_port=21:命令端口监听
    connect_from_port_20=YES:主动模式端口为20
    ftp_data_port=20:指定主动模式的端口
    pasv_min_port=6000 | pasv_max_port=6010:被动模式端口范围,0为随机分配
    use_localtime=YES:使用当地时间
    max_clients=0:最大并发连接数
    max_per_ip=0:每个IP同时发起的最大连接数
    nopriv_user=nobody:vsftpd服务指定用户身份运行
    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: 优先以文本方式下载

    匿名用户相关:

    anonymous_enable=YES:支持匿名用户
    no_anon_password=YES:(默认NO) 匿名用户略过口令检查
    anon_world_readable_only:(默认YES)只能下载全部读的文件
    anon_upload_enable=YES:允许匿名上传,注意:文件系统权限
    anon_mkdir_write_enable=YES:允许匿名用户创建文件夹
    anon_umask=077:指定匿名用户上传文件的umask
    anon_other_write_enable=YES:匿名用户可删除和修改上传的文件
    chown_uploads=YES:(默认NO) 修改上传文件的默认的所有者和权限
    chown_username=user1:将匿名上传的文件的属主修改为user1
    chown_upload_mode=0644:将匿名上传的文件的权限修改为644

    系统用户相关:

    guest_enable=YES:所有系统用户都映射成guest用户
    guest_username=ftp:配合上面选项才生效,指定guest用户
    local_enable=YES:是否允许linux用户登录
    write_enable-YES:允许linux用户上传文件
    local_umask=022:指定系统用户上传文件的默认权限
    local_root=/ftproot:非匿名用户登录所在目录
    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中用户禁锢

    日志相关:

    xferlog_enable=YES:(默认)启用记录上传下载日志
    xferlog_std_format=YES:(默认)使用wu-ftp日志格式
    xferlog_file=/var/log/xferlog:(默认)可自动生成
    dual_log_enable=YES:使用vsftpd日志格式,默认不启用
    vsftpd_log_file=/var/log/vsftpd.log:(默认)可自动生成

    登录提示信息相关:

    ftpd_banner=Welcome to blah FTP service.
    banner_file=/etc/vsftpd/ftpbanner.txt:显示指定文件中的提示信息,优先此项生效
    dirmessage_enable=YES:(默认) 目录访问提示信息
    message_file=.message:(默认)信息存放在指定目录下.message

    访问控制相关:

    pam_service_name=vsftpd:指定pam模块配置文件

    使用pam模块完成用户认证
    pam配置文件:/etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers:默认此文件中用户拒绝登录

    userlist_enable=YES:默认有此设置
    userlist_deny=YES:(默认值)黑名单,不提示口令,NO为白名单
    userlist_file=/etc/vsftpd/users_list:用户认证黑名单,此为默认值 

    基于SSL实现FTPS

    # ldd `which vsftpd`|grep libssl.so #查看是否支持SSL
        libssl.so.10 => /lib64/libssl.so.10 (0x00007f50d43a4000)

    1)创建自签名证书:

    # cd /etc/pki/tls/certs/
    certs]# make vsftpd.pem
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:bj
    Locality Name (eg, city) [Default City]:bj
    Organization Name (eg, company) [Default Company Ltd]:ftp
    Organizational Unit Name (eg, section) []:opt
    Common Name (eg, your name or your server's hostname) []:vsftpd.ftp.com

    2)配置vsftpd服务支持SSL:

    # vim /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  #证书文件
    # systemctl restart vsftpd
    # useradd testftpuser
    # echo testftppass |passwd --stdin testftpuser

    3)用filezilla等客户端工具测试

    虚拟用户的实现

    1、基于文件认证

    1)创建用户数据库文件

    # vim /etc/vsftpd/vusers.txt
    user1
    user1pass
    user2
    user2pass
    # db_load -T -t hash -f /etc/vsftpd/vusers.txt /etc/vsftpd/vusers.db #实行hash加密算法
    # chmod 600 /etc/vsftpd/vusers.db

    2)创建系统用户和FTP目录

    # useradd -r -d /data/ftp/ -s /sbin/nologin vuser
    # mkdir -pv /data/ftp/pub/
    # chmod -w /data/ftp/
    # setfacl -m u:vuser:rwx /data/ftp/pub/

    3)创建pam配置文件

    # vim /etc/pam.d/vsftpd.db
    auth required pam_userdb.so db=/etc/vsftpd/vusers  #这里指定数据库文件,不需要加.db
    account required pam_userdb.so db=/etc/vsftpd/vusers

    4)指定pam配置文件

    # vim /etc/vsftpd/vsftpd.conf
    guest_enable=YES
    guest_username=vuser  #指定系统用户
    pam_service_name=vsftpd.db  #指定pam配置文件

    5)建立各虚拟用户独立的配置文件

    # mkdir /etc/vsftpd/vusers.d/
    # vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vusers.d/
    # vim /etc/vsftpd/vusers.d/user1
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES  #匿名用户可删除和修改上传的文件
    # mkdir /data/user2/
    # vim /etc/vsftpd/vusers.d/user2
    # systemctl restart vsftpd

    2、基于MySQL数据库认证

    说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器

    数据库服务器和FTP服务器系统都是CentOS7

    注意:如果是CentOS6系统请执行yum install vsftpd pam_mysql命令安装连接组件

    mariadb服务器

    ~]#yum install mysql-server -y
    ~]# systemctl restart mariadb
     ~]# mysql
    Welcome to the MariaDB monitor. Commands end with ; or g.
    Your MariaDB connection id is 2
    Server version: 5.5.56-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> create database vsftpddb;#准备数据库
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | db1 |
    | hellodb |
    | mysql |
    | performance_schema |
    | vsftpddb |
    +--------------------+
    6 rows in set (0.00 sec)
    
    MariaDB [(none)]> use vsftpddb
    Database changed
    MariaDB [vsftpddb]> create table users (id int auto_increment not null primary key,name char(50) binary not null,password char(48) binary not null);
    Query OK, 0 rows affected (0.01 sec) 
    
    MariaDB [vsftpddb]> desc users;
    +----------+----------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+----------+------+-----+---------+----------------+
    | id | int(11) | NO | PRI | NULL | auto_increment |
    | name | char(50) | NO | | NULL | |
    | password | char(48) | NO | | NULL | |
    +----------+----------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)
    
    MariaDB [vsftpddb]> grant all on vsftpddb.* to vsftpduser@'192.168.130.10' identified by 'vsftpdpass'; #创建并授权用户
    Query OK, 0 rows affected (0.01 sec)

     vsftpd服务器:

    ~]# mysql -uvsftpduser -pvsftpdpass -h192.168.130.8 #测试连接数据库
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 4
    Server version: 5.5.56-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> desc vsftpddb.users;
    +----------+----------+------+-----+---------+----------------+
    | Field    | Type     | Null | Key | Default | Extra          |
    +----------+----------+------+-----+---------+----------------+
    | id       | int(11)  | NO   | PRI | NULL    | auto_increment |
    | name     | char(50) | NO   |     | NULL    |                |
    | password | char(48) | NO   |     | NULL    |                |
    +----------+----------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)
    
    MariaDB [(none)]> use vsftpddb;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [vsftpddb]> insert into users(name,password)
        -> values('user1',password('user1pass'));#创建vsftpd的虚拟用户
    Query OK, 1 row affected (0.01 sec)
    
    MariaDB [vsftpddb]> insert into users(name,password) 
      ->values('user2',password('user2pass'));#创建vsftpd的虚拟用户 Query OK, 1 row affected (0.00 sec) MariaDB [vsftpddb]> select * from users; +----+-------+-------------------------------------------+ | id | name | password | +----+-------+-------------------------------------------+ | 1 | user1 | *F20B90D5A0CED3757C51AE04CD4700AB9879E467 | | 2 | user2 | *A9C95B38C9A88ECAE9128FD396059335E97CAA6E | +----+-------+-------------------------------------------+ 2 rows in set (0.00 sec)
    # yum groupinstall "Development Tools" -y
    # yum -y install mariadb-devel pam-devel vsftpd
    # wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
    # tar xf pam_mysql-0.7RC1.tar.gz
    # cd pam_mysql-0.7RC1/
    pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security
    pam_mysql-0.7RC1]# make && make install
    # ls /lib64/security/ |grep pam_mysql.so
    pam_mysql.so  #pam模块已安装
    # vim /etc/pam.d/vsftpd.mysql
    auth required pam_mysql.so user=vsftpduser passwd=vsftpdpass host=192.168.130.10 db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=2
    account required pam_mysql.so user=vsftpduser passwd=vsftpdpass host=192.168.130.10db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=2

    crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密

    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()函数加密

    # useradd -r -s /sbin/nologin -d /data/mftp/ vuser
    # mkdir -pv /data/mftp/pub/
    # chmod -w /data/mftp/
    # setfacl -m u:vuser:rwx /data/mftp/pub/
    # vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    guest_enable=YES
    guest_username=vuser
    pam_service_name=vsftpd.mysql  #修改为使用pam_mysql模块认证
    # systemctl restart vsftpd

    vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

    # vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vusers.d
    # mkdir /etc/vsftpd/vusers.d/
    # touch /etc/vsftpd/vusers.d/{user1,user2}
    # vim /etc/vsftpd/vusers.d/user1
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    #local_root=/ftproot  #登录目录改变至指定的目录
  • 相关阅读:
    Qt生成随机数
    Qt调用系统DLL,判断网络连接状态
    Qt操作sqlite数据库
    Qt 操作注册表
    vs报错:RC1004 unexpected end of file found
    Qt操作ini文件
    Django Admin:自动选择当前用户
    BSTR转QString
    vue-cli4,vue3打包后页面无内容
    Qt 5.12.10 国际化
  • 原文地址:https://www.cnblogs.com/yaun1498078591/p/9231086.html
Copyright © 2011-2022 走看看