CentOS7.2上vsftpd服务部署实践

2016-10-13  本文已影响353人  uangianlap
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服务了.

上一篇下一篇

猜你喜欢

热点阅读