Rhel 7 FTP安装配置
1、配置防火墙,开启所需端口
7.0使用的防火墙是firewall,我改成用iptables作为防火墙
(1)关闭firewall:
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall开机启动
(2)安装iptables防火墙
yum install iptables-services
#安装
vi /etc/sysconfig/iptables
#编辑防火墙配置文件
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-
A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq!
#保存退出
systemctl restart iptables.service
#最后重启防火墙使配置生效
systemctl enable iptables.service
#设置防火墙开机启动
说明:21端口是ftp服务端口;10060到10090是Vsftpd被动模式需要的端口,可自定义一段大于1024的tcp端口。
2、关闭selinux
vi /etc/selinux/config
#SELINUX=enforcing  注释掉
#SELINUXTYPE=targeted  #注释掉 
SELINUX=disabled  #增加
:wq! #保存退出
setenforce 0 #使配置立即生效
3、安装vsftp
yum install -y vsftpd
#安装vsftpd
yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI
#安装vsftpd虚拟用户配置依赖包
systemctl start vsftpd.service
#启动
systemctl enable vsftpd.service
#设置vsftpd开机启动
4、配置vsftp
cp /etc/f /etc/f-bak
#备份默认配置文件
执行以下命令进行设置
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/f'
sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/f'
sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/f'
sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/f'
sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/f'
sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/f'
sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/f'
sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/f'
echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nidle_session_timeout=300
\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=vsftpd
\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES
\npasv_min_port=10060\npasv_max_port=10090
\naccept_timeout=5\nconnect_timeout=1" >> /etc/f
5、建立虚拟用户文
touch /etc/vsftpd/virtusers
编辑虚拟用户名单文件:(第一行账号,第二行密码,注意:不能使用root做用户名,系统保留)
vi /etc/vsftpd/virtusers
web1
123456
web2
123456
web3
123456
:wq!
#保存退出
6、生成虚拟用户数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
chmod 600 /etc/vsftpd/virtusers.db
chmod 600 /etc/vsftpd/virtusers
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
7、在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)
修改前先备份 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vi /etc/pam.d/vsftpd
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
注意:如果系统为32位,上面改为lib,否则配置失败
8、新建系统用户vsftpd,注意vsftpd无须登陆,其作用是替换root用户。用户目录为/md0/ftp, 用户登录终端设为/sbin/nologin(即使之不能登录系统)
useradd vsftpd -d /md0/ftp -s /sbin/nologin 或者 /bin/false
chown -R vsftpd:vsftpd /md0/ftp
chown www:www /md0/ftp -R    #如果配置的是Nginx则需要如此配置
#如果虚拟用户的宿主用户为www,需要这样设置。
9、建立虚拟用户个人Vsftp的配置文件
mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
touch web1 web2 web3
#这里创建三个虚拟用户配置文件
mkdir -p /md0/ftp/web1/http/
vi web1
#编辑用户web1配置文件,其他的跟这个配置文件类似
local_root=/md0/ftp/web1/http/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#虚拟用户不同权限配置参照
# mkdir /md0/ftp/web1
所有权限
# vim /md0/ftp/web1
write_enable=YES
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=Yes
local_root=/md0/ftp/web1
上传权限
# vim /md0/ftp/web1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=NO
local_root=/md0/ftp/web1
只能下载
# vim /md0/ftp/web1
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_umask=022
download_enable=yes
local_root=/md0/ftp/web1
10、最后重启vsftpd服务器
systemctl restart vsftpd
11.测试ftp
查看目前的状态
# systemctl status vsftpd
//测试匿名账户
# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name(localhost:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode
(|||61057|).
150 Here comes the directory listing.
-rw-r--r--  1 0        0              9 Aug 11 11:
226 Directory send OK.
ftp> lcd/tmp
Local directory now /tmp
ftp>
local: remote:
229 Entering Extended Passive Mode (|||64276|).
150 Opening BINARY mode data (9 bytes).
226 Transfer complete.
9 bytes received in 0.000895 secs(10.06 Kbytes/sec)
ftp> bye
221 Goodbye.
//测试本地账户
# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name(localhost:root): alice
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
备注:
guest_username=vsftpd #指定虚拟用户的宿主用户(就是我们前面新建的用户)
guest_username=www
#如果ftp目录是指向网站根目录,用来上传网站程序,可以指定虚拟用户的宿主用户为nginx运行账户www,可以避免很多权限设置问题
Linux系统中vsftp用户无法登陆的相关说明
首先f中相关允许ftp用户登录:
guest_enable=YES (NO)                        启用来宾功能
guest_username=ftp                            指定来宾身份
如果相关配置正常,则需要检查两个文件中是否出现该ftp用户:
文件一:ftpusers      /etc/vsftpd/ftpusers  (无法登录时首先看的文件)
该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的帐号(比如root)登入FTP,
以免通过该帐号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏。
文件二:user_list  /etc/vsftpd/user_list
此文件中用户的访问情况和f中的userlist_enable和userlist_deny两个配置项有关的。etc被拉入黑名单了怎么办
userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件
中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny
项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP
当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);
另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。