ftp虚拟账户设置以及ssl加密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftp虚拟账户设置以及ssl加密相关的知识,希望对你有一定的参考价值。

参考技术A

注意1
打开 FTP 服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。
详细信息:
200 Switching to ASCII mode.
227 Entering Passive Mode (0,0,0,0,227,175).
解决:
在windows下操作:
打开 “网络和共享中心”,找到“Internet选项” -->【高级】这页,
取消掉“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”
注意2 : 云主机防火墙设置
pasv_min_port=30000 ##被动模式最小端口
pasv_max_port=30010 ##被动模式最大端口
需要在服务器端开放防火墙20/21以及30000/30010即可

参考:

mkdir /etc/vsftpd/sslkey
cd /etc/vsftpd/sslkey
openssl req -x509 -nodes -keyout /etc/vsftpd/sslkey/vsftpd.pem -out /etc/vsftpd/sslkey/vsftpd.pem -days 365 -newkey rsa:2048

vim /etc/vsftpd/vsftpd.conf 添加

参考:

1 FTP匿名访问是FTP安全问题中最常见的问题,取消匿名访问

2 未限制登录用户访问目录权限,配置加固

除了chroot_list中的用户都不能访问上级根目录
3 使用虚拟账户
4 密码和文件内容都使用明文传输,可能产生不希望发生的窃听,使用ftps ftp+ssl
注意登录必须使用
5 在使用FTP时,如果客户端机器和FTP服务器双方之间的所有端口都是开放的,那连接不存在问题。如果客户端与服务器之间有防火墙,如果没配置好防火策略和采用合适的连接模式,会导致登录成功,但无法List列表的问题。要避免出现这样的问题,首先要了解FTP的工作模式。我采取的是被动模式
可参考

6 tcpdump port 21 -nA 可通过此命令查看ftp如果不添加ssl就是明文传输

FTP虚拟用户及ssl加密配置

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软件

[[email protected] ~]# yum -y install vsftpd

2)建立虚拟用户数据库文件,文件名随便起

提示:该虚拟用户数据库文件的奇数行为用户名,偶数行为密码。

[[email protected] ~]# vim /etc/vsftpd/xuni.list

user1

123

user2

321

user3

123456

user4

654321

 

[[email protected] ~]# db_load -T -t hash -f /etc/vsftpd/xuni.list  /etc/vsftpd/xuni.db

把虚拟用户数据文件生成认证模块识别的数据文件

[[email protected] ~]# cd /etc/vsftpd/

[[email protected] vsftpd]# ls    查看生成的数据文件

ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh  xuni.db  xuni.list

[[email protected] ~]# chmod 600 /etc/vsftpd/xuni.*

 

注意:CentOSdb_load命令默认已经安装,但是如果没有这个命令,需要安装db4-utils-4.7.25-18.el6_4.x86_64这个软件之后才能使用db_load命令,还有就是要把原文件和生成的文件都修改一下权限,改成600,让只有管理员有权限

 

3)创建一个虚拟用户映射的真实系统用户

创建一个虚拟用户映射的真实系统用户,指定它的家目录为其他目录,如果为/home目录,虚拟用户可能没有权限访问,指定让这个用户不能登录系统,并赋予指定家目录权限为755

[[email protected] ~]# useradd -d /user -s /sbin/nologin user

[[email protected] ~]# chmod 755 /user

4)配置PAM模块

通过修改vsftpdPAM配置文件 /etc/pam.d/vsftpd来决定vsftpd使用何种认证方式,可以是本地系统的真实用户认证(模块pam_unix),也可以是独立的用户认证数据库(模块pam_userdb,也可以是网络上的LDAP数据库(模块pam_ldap)等。所有这些模块都存放在/lib/security/目录(对AMD64则是/lib64/security/)下。

[[email protected] ~]# cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam   复制认证文件

[[email protected] ~]# 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的配置

[[email protected] ~]# 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创建几个不同权限的虚拟用户

创建虚拟用户配置文件存放目录在此目录中创建对应虚拟用户名称的配置文件,向虚拟用户配置文件中添加相应的权限即可给不同虚拟用户配置不同的权限。

[[email protected] ~]# mkdir /etc/vsftpd/dir    创建虚拟用户配置文件存放目录

[[email protected] ~]# vim /etc/vsftpd/dir/user1    编辑user1用户的配置文件

anon_upload_enable=YES     允许上传文件

 

[[email protected] ~]# vim /etc/vsftpd/dir/user2    编辑user2用户的配置文件

anon_mkdir_write_enable=YES    允许创建目录

 

 

[[email protected] ~]# vim /etc/vsftpd/dir/user3     编辑user3用户的配置文件

anon_other_write_enable=YES     开放其他写入权(删除,改名)

 

[[email protected] ~]# vim /etc/vsftpd/dir/user4     编辑user4用户的配置文件

anon_upload_enable=YES    

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

 

[[email protected] ~]# systemctl restart vsftpd

 

7)测试我们设置的虚拟用户是否生效

以上配置修改完成并重启vsftpd服务后,即可开启一个安装了ftp的测试虚拟机,用所创建的虚拟用户进行ftp连接实验,看是否符合要求。

[[email protected] ~]# 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

[[email protected] ~]# rpm -q openssl    查看是否安装openssl软件

openssl-1.0.1e-60.el7.x86_64

 

[[email protected] ~]# which vsftpd     

/usr/sbin/vsftpd

[[email protected] ~]# ldd /usr/sbin/vsftpd | grep ssl   查询vsftpd软件是否支持SSL

libssl.so.10 => /lib64/libssl.so.10 (0x00007f5270695000)

 

2)生成加密信息

[[email protected] ~]# 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]    邮箱地址

[[email protected] ~]# 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添加如下内容

[[email protected] ~]# 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

 

[[email protected] ~]# systemctl restart vsftpd    重启vsftpd服务

 

4)测试ssl是否配置成功

这里我们使用winscp工具进行测试,其他支持ssl的工具也可以。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

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


以上是关于ftp虚拟账户设置以及ssl加密的主要内容,如果未能解决你的问题,请参考以下文章

配置vsftpd的遇到的坑及搭建虚拟账户

vsftpd 基于mysql的虚拟账户

linux的ftp服务之本地访问浏览与虚拟账户

FTP文件服务器的匿名本地虚拟,账户访问

FTP服务最安全认证模式---虚拟账户访问

Vsftpd文件传输服务(虚拟账户模访问)