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账户访问测试
3、FTP虚拟用户详细配置步骤
(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.*
注意:CentOS中db_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模块
通过修改vsftpd的PAM配置文件 /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去除用户家目录的写权限即可,需要写权限的用户不建议使用这种方法。
4、openssl+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加密的主要内容,如果未能解决你的问题,请参考以下文章