1.安装ftp(客户端),vsftpd(服务器端)
yum install -y vsftpd
2.创建ftp访问帐号(指定家目录,使用密码),锁定guest帐号不能登录shell
useradd -d /home/guest guest -p vim /etc/passwd
找到guest对应的行,将/bin/bash改成/sbin/nologin
3.修改配置
#vim /etc/vsftpd/vsftpd.conf 增加或都将如下设置前的#(注释去掉)
#localUser settings
local_enable=YES
local_umask=022
chroot_local_user=yes
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot
userlist_enable=YES
userlist_deny=NO
user_config_dir=/etc/vsftpd/userconf
local_max_rate=0
0表示不限速
4.创建锁定帐号的配置文件并添加guest
echo 'guest'> /etc/vsftpd/chroot_list
5.将guest添加进user_list。
echo 'guest'>>/etc/vsftpd/user_list
6.启动vsftpd服务,配置自动启动
service vsftpd start chkconfig --level 35 vsftpd on
7.更改selinux安全设置开启ftp_home_dir,并查看设置情况(没有selinux可跳过此步)
setsebool -P ftp_home_dir on setsebool -P allow_ftpd_full_access on getsebool -a|grep ftp
完整的配置文件
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
其它
1.若要实现匿名FTP上传,创建文件夹等写权限。添加或更改为如下配置
#nonymous settings
anonymous_enable=YES
anon_root=/var/ftp/pub/anonymous
anon_umask=000
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=102400
2.设置selinux,允许ftp匿名。
setsebool -P allow_ftpd_anon_write on getsebool -a|grep ftp
3.20端口是ftp的数据传输端口,很容易被猜到。为了安全起见,建议将数据传输模式由默认的主动改成被动。添加如下配置
#passive mode settings
connect_from_port_20=NO
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40003
如果启用了selinux设置如下
setsebool -P ftpd_use_passive_mode on
3./var/ftp是ftp用户的家目录。anonymous用户(FTP)空密码登录后会映射成ftp用户。我们可手动指定anonymous的家目录(上传目录),并锁定它只能在此目录里进行操作。通过上面配置项里的anon_root指定上传目录,在user_list
错误
1.500 OOPS: vsftpd: refusing to run with writable anonymous root
vsftp不允许权限为777的主目录
mkdir -p /var/ftp/pub/anonymous chmod 755 /var/ftp/pub/anonymous
2.put config/vsftpd.conf
553 Could not create file.
将上传命令改成
put config/vsftpd.conf vsftpd.conf
3.500 Illegal PORT command.
passive mode on
结语
第一次搭FTP环境,折腾了个把星期。企业版红帽的默认安全设置可真严。
层层把关,你以为可以了,其实可能还有你不知道的安全设置在起作用(比如selinux),在配置文件里已经设置了anon_enable=YES,anon_write_enable=YES,可以还是不能匿名上传,这是selinux在做怪。
还有pam_servie_name=/etc/pam.d/vsftpd,默认是pam_servie_name=vsftpd
网上我看到的关于FTP设置的都是采用默认的,其实这个下面根本就没有vsftpd这个文件,而且对于菜鸟来说怎么会知道这是引用一个关于安全验证的文件呢?它的实际路径是/etc/pam.d/vsftpd
还有关于ftpusers(禁止ftp访问),user_list(允许ftp访问),chroot_list(锁定用户目录)这三个文件也是有关安全的,哪一步出错都不行,所以一定要从根本上弄懂才行。
而且ftpusers,和pam_servie_name的配置不当所导致的登录错误也不一样。user_list,chroot_list的含义是可变的,这要看你的配置文件怎么写了!
有时你看到的错误信息可能只是表像,不要轻信自己的眼睛!