前言
用户名密码方式访问 FTP。
简介
场景:ftp 和 www web 服务器相结合
公司内部现在有一台 FTP 和 WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别使用 team1 和 team2 帐号进行管理。先要求仅允许 team1 和 team2 帐号登录 FTP 服务器,但不能登录本地系统,并 将两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。
分析:
FTP和web服务器常结合使用,方便进行管理。为了保证安全,本地用户可以登录系统。禁用匿名账号,team1和team2不容许登录系统。使用chroot功能锁定team1和team2的根目录为/var/www/html。若需要修改目录还要加write权限。此外FTP还可以使用加密传输。
用户名密码方式访问 FTP
1.创部门管理用户 team1 和 team2
[root@tudou63 vsftpd]# useradd -s /sbin/nologin team1 && echo 123456 |passwd --stdin team1
[root@tudou63 vsftpd]# useradd -s /sbin/nologin team2 && echo 123456 |passwd --stdin team2
2.修改vsftpd的配置文件
[root@tudou63 vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁止匿名用户登录
local_enable=YES #允许本地用户登录
local_root=/var/www/html #设置本地用户的根目录为 /var/www/html。
chroot_list_enable=YES #开启 chroot 功能。
chroot_list_file=/etc/vsftpd/chroot_list #设置锁定用户在根目录中的列表文件。此文 件存放要锁定的用户名。
allow_writeable_chroot=YES #允许锁定的用户有写的权限。
3.将部门用户team1 和 team2锁定到/etc/vsftpd/chroot_list
[root@tudou63 vsftpd]# vim /etc/vsftpd/chroot_list
team1
team2
4.测试
[root@tudou63 vsftpd]# chmod -R o+w /var/www/html/ #给team1和team2添加写权限
[root@tudou63 vsftpd]#cp /etc/passwd /var/www/html
使用filezilla连接测试:
vsftpd使用 SSL 证书加密数据传输
1.使用 OpenSSL 生成自签证书
[root@tudou63 ~]# cd /etc/vsftpd/
[root@tudou63 vsftpd]# ls
chroot_list ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
[root@tudou63 vsftpd]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3650
2.修改配置文件,支持 SSL数据传输
[root@tudou63 vsftpd]# vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES #启用 SSL 支持。
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES #这四行 force 表示强制匿名用户使用加密登陆和数据传输。
ssl_tlsv1=YES #指定 vsftpd 支持 TLS v1。
ssl_sslv2=YES #指定 vsftpd 支持 SSL v2。
ssl_sslv3=YES #指定 vsftpd 支持 SSL v3。
require_ssl_reuse=NO #不重用 SSL 会话,安全配置项 。
ssl_ciphers=HIGH #允许用于加密 SSL 连接的 SSL 算法,这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者。
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem #定义 SSL 证书和密钥文件的位置。
3.测试连接
[root@tudou63 vsftpd]# systemctl restart vsftpd
测试连接:
总结
1.遇到的问题:
无法连接到vsftp服务器,一直提示530登陆失败,后多次检查,发现是/etc/shells的问题,vsftp登陆前会查找/etc/shells是否有对应的shells,若没有,则没法登陆。
解决办法:
在/etc/shells文件里面添加用户的shell(解释器),如/sbin/nologin
[root@tudou63 ~]# vim /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/nologin
注:
原因:vsftpd默认会检查用户的shell,如果用户的shell在/etc/shells没有记录,则无法登陆ftp
2.在配置/etc/vsftpd/vsftpd.conf的配置文件中,每个配置项后不要加注释,而且配置项后 也不能有多余的空格,否则启动报错。