一、ftp服务器搭建
系统环境:
阿里云ECS主机
1 2 | cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) |
---|
1、安装采用yum安装
1 | yum -y install vsftpd ftp |
---|
2、服务目录
1 2 3 4 5 6 7 8 9 10 11 | tree /etc/vsftpd/ /etc/vsftpd/ ├── ftpusers ├── user_list ├── vconf #新增目录 │ └── chenfei ├── vsftpd.conf ├── vsftpd.conf.bak #先做备份 ├── vsftpd_conf_migrate.sh ├── vusers #用户文件 └── vusers.db |
---|
3、将ftp添加到系统服务并开机启动
1 | systemctl enable vsftpd |
---|
4、修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_mkdir_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=YES xferlog_std_format=YES async_abor_enable=YES ascii_upload_enable=YES ascii_download_enable=YES ftpd_banner=Welcome to blah FTP service. chroot_local_user=YES listen=NO pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES use_localtime=YES listen_port=21 idle_session_timeout=300 guest_enable=YES guest_username=vsftpd user_config_dir=/etc/vsftpd/vconf data_connection_timeout=1 virtual_use_local_privs=YES pasv_min_port=40000 pasv_max_port=40010 accept_timeout=5 connect_timeout=1 allow_writeable_chroot=YES |
---|
5、建立用户文件
1 2 3 4 | cat /etc/vsftpd/vusers 用户名 密码 |
---|
用户名和密码要单独占一行,且顺序不能变
6、生成用户数据文件
1 | db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/vusers.db |
---|
7、修改/etc/pam.d/vsftpd文件
1 2 3 4 5 6 7 8 9 10 11 | cat /etc/pam.d/vsftpd #%PAM-1.0 session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth session required pam_loginuid.so session include password-auth auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers |
---|
注意将原来的auth和account项注释掉
8、创建系统用户vsftpd,用户的家目录为/home/vsftpd
1 | useradd vsftpd -d /home/vsftpd -s /bin/false |
---|
用户登陆终端设置为/bin/false,目的是防止ssh登陆系统
9、建立虚拟用户的配置文件
1 2 3 4 5 6 7 8 9 10 11 | mkdir /etc/vsftpd/vconf cd /etc/vsftpd/vconf cat test local_root=/home/vsftpd/test write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES 建立test用户根目录 mkdir -p /home/vsftpd/test |
---|
10、防火墙设置
1 2 | -A INPUT -s 本机IP/32 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -s 本机IP/32 -p tcp -m state --state NEW -m tcp --dport 40000:40010 -j ACCEPT |
---|
11、重启vsftpd服务
1 | systemctl restart vsftpd |
---|
遇到的坑:
访问测试报错:
1、500 OOPS: unrecognised variable in config file: xxxx
这种一般是配置文件有错误,我这里出现错误的原因便是虚拟用户的个人配置文件有一项写错了。
2、200 Switching to ASCII mode 227 Entering Passive Mode
解决办法:
打开 “网络和共享中心”,找到“Internet选项” –>【高级】这页,取消掉“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”
3、开启匿名用户访问时,不能创建目录和修改目录
解决办法:
1 2 3 4 5 | 修改配置文件: anonymous_enable=YES #允许匿名用户登陆 anon_upload_enable=YES #允许匿名用户上传 anon_other_write_enable=YES 重启服务 |
---|
二、ftp命令介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 | ls 列出远程机的当前目录 cd 在远程机上改变工作目录 lcd 在本地机上改变工作目录 ascii 设置文件传输方式为ASCII模式 binary 设置文件传输方式为二进制模式 close 终止当前的ftp会话 hash 每次传输完数据缓冲区中的数据后就显示一个#号 get(mget) 从远程机传送指定文件到本地机 put(mput) 从本地机传送指定文件到远程机 open 连接远程ftp站点 断开与远程机的连接并退出ftp ? 显示本地帮助信息 ! 转到Shell中 |
---|
ftp使用过程中遇到的问题
1、ftp:500 Illegal PORT command. ftp: bind: Address already in use
解决办法:
由于iptables不支持,需要加载两个模块:
1 2 | modprobe ip_nat_ftp modprobe ip_conntrack_ftp |
---|
在客户端使用命令行或者软件连接时,ftp服务器的配置文件中需要保证有这几行配置:
1 2 3 4 | pasv_enable=YES pasv_min_port=40000 pasv_max_port=40010 pasv_promiscuous=YES #如果不设置这个,会出现425 Security: Bad IP connecting.类似于这种的错误 |
---|