FTP虚拟用户及ssl加密配置
注意:配置FTP服务时,最好关闭防火墙和selinux
1、虚拟用户和真实用户区别
真实用户:是在服务器上登录的用户,比如安装系统时的用户。
虚拟用户:是创立的用户,只能登录ftp,而不能登录系统,不是系统的用户。这样比使用系统用户要安全。
2、创建FTP虚拟用户账号数据步骤
1.建立虚拟FTP用户的帐号数据库文件
2.创建FTP根目录及虚拟用户映射的系统用户
3.建立支持虚拟用户的PAM认证文件,添加虚拟用户支持
4.在vsftpd.conf文件中添加支持配置
5.为个别虚拟用户建立独立的配置文件,启动服务并测试
6.重新加载vsftpd配置
7.使用虚拟FTP账户访问测试
3、FTP虚拟用户详细配置步骤
(1)安装vsftpd软件
[root@localhost ~]# yum -y install vsftpd
(2)建立虚拟用户数据库文件,文件名随便起
提示:该虚拟用户数据库文件的奇数行为用户名,偶数行为密码。
[root@localhost ~]# vim /etc/vsftpd/xuni.list
user1
123
user2
321
user3
123456
user4
654321
[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/xuni.list /etc/vsftpd/xuni.db
把虚拟用户数据文件生成认证模块识别的数据文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls 查看生成的数据文件
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh xuni.db xuni.list
[root@localhost ~]# chmod 600 /etc/vsftpd/xuni.*
注意:CentOS中db_load命令默认已经安装,但是如果没有这个命令,需要安装db4-utils-4.7.25-18.el6_4.x86_64这个软件之后才能使用db_load命令,还有就是要把原文件和生成的文件都修改一下权限,改成600,让只有管理员有权限
(3)创建一个虚拟用户映射的真实系统用户
创建一个虚拟用户映射的真实系统用户,指定它的家目录为其他目录,如果为/home目录,虚拟用户可能没有权限访问,指定让这个用户不能登录系统,并赋予指定家目录权限为755。
[root@localhost ~]# useradd -d /user -s /sbin/nologin user
[root@localhost ~]# chmod 755 /user
(4)配置PAM模块
通过修改vsftpd的PAM配置文件 /etc/pam.d/vsftpd来决定vsftpd使用何种认证方式,可以是本地系统的真实用户认证(模块pam_unix),也可以是独立的用户认证数据库(模块pam_userdb),也可以是网络上的LDAP数据库(模块pam_ldap)等。所有这些模块都存放在/lib/security/目录(对AMD64则是/lib64/security/)下。
[root@localhost ~]# cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam 复制认证文件
[root@localhost ~]# vim /etc/pam.d/vsftpd.pam 编辑认证文件,修改成如下内容
auth required pam_userdb.so db=/etc/vsftpd/xuni
account required pam_userdb.so db=/etc/vsftpd/xuni
(5)在vsftpd.conf文件中添加支持PAM的配置
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO 禁止匿名用户登录
#anon_upload_enable=YES 允许上传文件注释掉
#anon_mkdir_write_enable=YES 允许创建目录注释掉
#anon_other_write_enable=YES 其他写入、删除、改名功能注释掉
pam_service_name=vsftpd.pam 设定PAM服务下VSFTP验证配置文件名
userlist_enable=YES 设定userlist_file中的用户不能使用ftp
tcp_wrappers=YES 设定支持tcp wrappers
guest_enable=YES 设定启用虚拟用户
guest_username=user 指定虚拟用户的宿主用户
user_config_dir=/etc/vsftpd/dir 指定虚拟用户个人的VSFTP文件存放路径
(6)创建几个不同权限的虚拟用户
创建虚拟用户配置文件存放目录,在此目录中创建对应虚拟用户名称的配置文件,向虚拟用户配置文件中添加相应的权限即可给不同虚拟用户配置不同的权限。
[root@localhost ~]# mkdir /etc/vsftpd/dir 创建虚拟用户配置文件存放目录
[root@localhost ~]# vim /etc/vsftpd/dir/user1 编辑user1用户的配置文件
anon_upload_enable=YES 允许上传文件
[root@localhost ~]# vim /etc/vsftpd/dir/user2 编辑user2用户的配置文件
anon_mkdir_write_enable=YES 允许创建目录
[root@localhost ~]# vim /etc/vsftpd/dir/user3 编辑user3用户的配置文件
anon_other_write_enable=YES 开放其他写入权(删除,改名)
[root@localhost ~]# vim /etc/vsftpd/dir/user4 编辑user4用户的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost ~]# systemctl restart vsftpd
(7)测试我们设置的虚拟用户是否生效
以上配置修改完成并重启vsftpd服务后,即可开启一个安装了ftp的测试虚拟机,用所创建的虚拟用户进行ftp连接实验,看是否符合要求。
[root@localhost ~]# ftp 192.168.115.120
按提示输入用户名和密码即可登陆成功,然后实验创建的虚拟用户是否符合要求
注意事项:创建的虚拟用户映射的系统用户,家目录所有者和所属组一定要是此系统用户的,权限为755,还有给虚拟用户分配权限的时候,一定要把vsftpd.conf的相应权限关闭或注释。
(8)登陆时出现的错误
报错现象:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
报错原因:从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
解决方法:以下两种方法任意一种即可。
1、 在/etc/vsftpd/vsftpd.conf服务器的配置文件添加allow_writeable_chroot=YES,然后重启vsftpd服务即可。
2、使用chmod a-w /user去除用户家目录的写权限即可,需要写权限的用户不建议使用这种方法。
4、openssl+vsftpd加密验证方式
(1)查看openssl软件是否安装及vsftpd是否支持或调用ssl
[root@localhost ~]# rpm -q openssl 查看是否安装openssl软件
openssl-1.0.1e-60.el7.x86_64
[root@localhost ~]# which vsftpd
/usr/sbin/vsftpd
[root@localhost ~]# ldd /usr/sbin/vsftpd | grep ssl 查询vsftpd软件是否支持SSL
libssl.so.10 => /lib64/libssl.so.10 (0x00007f5270695000)
(2)生成加密信息
[root@localhost ~]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem 生成vsftpd.pem 证书
注释:req 输入为证书请求,需要进行处理
-x509 生成自签名证书
-nodes 不需要密码
-day 为证书的有效期
-newkey rsa:1024 生成一个1024长度的RSA私钥文件,用于签发
-keyout 指定生成的私钥文件名称
-out 为输出的文件名
Generating a 1024 bit RSA private key
.++++++
.......................++++++
writing new private key to '/etc/vsftpd/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn 国家名称
State or Province Name (full name) []:beijing 省份名称
Locality Name (eg, city) [Default City]:beijing 地区名称
Organization Name (eg, company) [Default Company Ltd]:bjgs 组织名称
Organizational Unit Name (eg, section) []:bjgs 组织单元名称
Common Name (eg, your name or your server's hostname) []:server 你的名字或主机名
Email Address []:[email protected] 邮箱地址
[root@localhost ~]# ls -l /etc/vsftpd/|grep vsftpd.pem 查看生成vsftpd.pem是否成功
-rw-r--r-- 1 root root 1958 2月 1 23:17 vsftpd.pem
(3)修改主配置文件/etc/vsftpd/vsftpd.conf
下面是ssl参数一些定义,根据自己需求去修改
ssl_enable=yes/no 是否启用 SSL,默认为no
allow_anon_ssl=yes/no 是否允许匿名用户使用SSL,默认为no
rsa_cert_file=/path/to/file rsa证书的位置
dsa_cert_file=/path/to/file dsa证书的位置
force_local_logins_ssl=yes/no 非匿名用户登陆时是否加密,默认为yes
force_local_data_ssl=yes/no 非匿名用户传输数据时是否加密,默认为yes
force_anon_logins_ssl=yes/no 匿名用户登录时是否加密,默认为no
force_anon_data_ssl=yes/no 匿名用户数据传输时是否加密,默认为no
ssl_sslv2=yes/no 是否激活sslv2加密,默认no
ssl_sslv3=yes/no 是否激活sslv3加密,默认no
ssl_tlsv1=yes/no 是否激活tls v1加密,默认yes
ssl_ciphers=加密方法 默认是DES-CBC3-SHA
修改vsftpd的主配置文件vsftpd.conf添加如下内容
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES
allow_anon_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
[root@localhost ~]# systemctl restart vsftpd 重启vsftpd服务
(4)测试ssl是否配置成功
这里我们使用winscp工具进行测试,其他支持ssl的工具也可以。
可以看到我们的配置已经成功了。