美文网首页
CentOS7.2上vsftpd服务部署实践

CentOS7.2上vsftpd服务部署实践

作者: uangianlap | 来源:发表于2016-10-13 21:39 被阅读353次
    vsftpd

    注:(测试主机的ip为192.168.1.156)


    vsftpd:一个从0建构的非常安全的FTP服务程序.

    1. 安装vsftpd软件包(vsftpd.x86_64 0:3.0.2-11.el7_2)

    yum -y install vsftpd    
    systemctl start vsftpd.service  # 启动
    ss -lnt      # 查看21号端口处于监听状态,成功的话此时可在浏览器中输入
                 # ftp://192.168.1.156可得到内容如下图(即/var/ftp目录中内容)或使
                 # 用ftp lftp等命令行客户端也能访问成功
    
    Paste_Image.png

    主配置文件: /etc/vsftpd/vsftpd.conf
    辅助配置文件: /etc/vsftpd/ftpusers # pam认证的配置文件可以 查看文件/etc/pam.d/vsftpd说明(为了安全,默认是拒绝了诸如root等用户的登录)
    主程序: /usr/sbin/vsftpd
    UnitFile: /usr/lib/systemdj/system/vsftpd.service
    文件路径映射: /var/ftp 即用户的家目录的映射,访问ftp必须以某个系统用户的身份,此用户的家目录即文件档目录

    ftp系统用户描述

    ftp用户种类

    • 匿名用户: 不需要输入帐号或密码就能访问的用户.
    • 系统用户: 本机上存在的且有账号与密码的用户.(因为搭建vsftpd只是为了共享文件,用此用户登录会削弱安全性)
    • 虚拟用户: 映射到某个系统用户的文件,只是为了登录vsftpd为存在,非常安全

    配置vsftpd主配置文件(/etc/vsftpd/vsftpd.conf)

    1.anonymous_enable=YES # 是否允许匿名用户登录
    2.anon_upload_enable=YES # 是否允许匿名用户上传
    3.anon_other_write_enable=YES # 是否允许匿名用户删除文件 依赖2(这项配置文件默认没有,得自己编写)
    4.anon_other_mkdir_enable=YES # 是否允许匿名用户创建目录. 依赖2
    5.local_enable=YES # 是否允许系统用户登录(普通用户才行)
    6.chroot_local_user=YES # 用户访问ftp服务器端时只能访问登录用户自己的家目录(安全性)并映射成'/',需要事先将用户家目录取消其写权限,不然会报出OOPS: vsftpd: refusing to run with writable root inside chroot()Login failed.Service not available, remote server has closed connection类似的错误
    7.chroot_list_enable=YES # 哪些用户需要将其禁锢在其家目录
    8.chroot_list_file=/etc/vsftpd/chroot_list # 这条依赖6与7,6是YES的话8中的文件用户不会禁锢,反之相反(需要手动创建 echo 'centos'>/etc/vsftpd/chroot_list)
    9.xferlog_enable=YES # 激活上传与下载的日志,建议这9 10 11几条都关闭
    10.xferlog_std_format=YES
    11.xferlog_file=/var/log/xferlog
    12.userlist_enable=YES # 是否启用列表(/etc/vsftpd/user_list)控制可登录的用户,如果这个指令为YES的话则由第13条指令控制这个列表的拒绝行为与
    13.userlist_deny={YES|NO} # YES(默认)的话为拒绝/etc/vsftpd/user_list里的用户登录,NO为允许, 即可登录用户黑白名单的设置(需要显示输入用户名或密码)[[

    虚拟用户登录vsftpd(更安全)

    用户帐号可以存储在文件 MySQL Redis..中,这里我们用MySQL实现.

    pam模块(/usr/lib64/security/)对各应用程序的支持

    例如:pam.cracklib.so可以验证弱口令
    应用程序调用pam哪些模块的文件 /etc/pam.d/*

    实例演示(利用pam认证模块 MySQL 完成虚拟用户访问vsftpd服务)

    1. yum -y install mariadb-server  #安装数据库
       systemctl start mariadb.service; ss -lnt; # 启动数据库服务并检查
    
    2. yum -y groupinstall "Development Tools" "Server Platform Development" # 准备编译环境(因为CentOS7没有自pam-mysql的rpm包,需要自行编译CentOS6不存在这个问题)
    
    3. wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz  #下载pam-mysql的源码包并编译
       tar -zxvf pam_mysql-0.7RC1.tar.gz # 查看INSTALL 与README文件
       yum -y install mariadb-devel pam-devel openssl-devel   # 安装部分支持包
      ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security  #configure
      make && make install
    
    4. mysql     # 准备数据库内容
       >create datebase vsftpd;    # 创建名为vsftpd的数据库来保存虚拟用户
       >use vsftpd;
       >create table users (id int not null auto_increment primary key, name char(30) not null unique key, password char(48) );
       >desc users;  # 查看
       >insert into users (name,password) values ('james',PASSWORD('magedu'));
       >insert into users (name,password) values ('uangianlap',PASSWORD('magedu'));
       >select * from users; #检查是否生成数据
       >grant select(all) on vsftpd.*  to 'vsftpd'@'localhost' identified by 'magedu'; # 授权vsftpd用户对本机上的数据库vsftpd里的所有表具有select(或者all)权限
       >grant select(all) on vsftpd.*  to 'vsftpd'@'127.0.0.1' identified by 'magedu'; # 对于地址解析,保险起见
       >flush privileges;exit;
    
    5. 修改vsftpd主配置文件里的指令为: pam_service_name=vsftpd.mysql # 不是非得叫这个名,但这个文件要存在于/etc/pam.d/中.
       vim /etc/pam.d/vsftpd.mysql    # pam-mysql README文件
       > auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=magedu 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=magedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
    
    6. 创建一个用以(所有)虚拟用户映射的用户
       useradd -r -d /ftproot -s /sbin/nologin vuser
       mkdir /ftproot/{pub,upload}     # 注意目录起码得是555的权限,要实现上传得755,不然虚拟用户会无法访问
    
    7. 修改主配置文件(/etc/vsftpd/vsftpd.conf),添加以下指令
       guest_enable=YES    #guest来宾表示虚拟帐号
       guest_username=vuser    # 虚拟帐号都映射到上一步创建的vuser用户
    
    8. systemctl restart vsftpd.service;ss -lnt; 重启vsftpd服务并检查,即可生效
    
    9. 修改主配置文件(/etc/vsftpd/vsftpd.conf)上一步后即使vuser对于目录/ftproot/upload有w权限,虚拟用户访问依旧无法实现上传功能.添加:
       user_config_dir=/etc/vsftpd/users_conf
       mkdir /etc/vsftpd/users_conf  # 目录名可以任意,这个目录下存放的都是跟用户名同名的文件,当同名的用户访问vsftpd服务时,这个文件的设置便作用生效.
       cat > /etc/vsftpd/users_conf/james<<eof
       >anon_upload_enable=YES                     # 虚拟用户也可以使用匿名用户的指令
       >eof
       cat > /etc/vsftpd/users_conf/uangianlap<<eof
       >anon_upload_enable=NO
       >eof
       systemctl restart vsftpd.service;ss -lnt;  # 重启并测试james与uangianlap两个虚拟用户是否都有对vsftpd的上传权限.这时候就只有james可以上传了.
    

    经过以上9步,即可搭建一个安全的满足自定义需求的vsftpd服务了.

    相关文章

      网友评论

          本文标题:CentOS7.2上vsftpd服务部署实践

          本文链接:https://www.haomeiwen.com/subject/qkqgyttx.html