FTP虚拟用户及ssl加密配置

注意:配置FTP服务时,最好关闭防火墙和selinux

1虚拟用户和真实用户区别

    真实用户:是在服务器上登录的用户,比如安装系统时的用户。

虚拟用户:是创立的用户,只能登录ftp,而不能登录系统,不是系统的用户。这样比使用系统用户要安全。

2、创建FTP虚拟用户账号数据步骤

1.建立虚拟FTP用户的帐号数据库文件

2.创建FTP根目录及虚拟用户映射的系统用户

3.建立支持虚拟用户的PAM认证文件,添加虚拟用户支持

4.vsftpd.conf文件中添加支持配置

5.为个别虚拟用户建立独立的配置文件,启动服务并测试

6.重新加载vsftpd配置

7.使用虚拟FTP账户访问测试

3FTP虚拟用户详细配置步骤

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.*

 

注意:CentOSdb_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模块

通过修改vsftpdPAM配置文件 /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

blob.png

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去除用户家目录的写权限即可,需要写权限的用户不建议使用这种方法。

 

4openssl+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 []:server@server.com    邮箱地址

[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的工具也可以。

blob.png

blob.png

blob.png

blob.png

可以看到我们的配置已经成功了。