如果企业用户太多,创建太多的系统账户显然是不明智,这时候我们就需要利用虚拟账户,vsftpd虚拟账户的数据保存在Berkeley DB格式的数据文件中,所以需要安装db4-utils工具来创建这样的数据文件。以下适用于Linux(contos6,redhat6,oracle linux6)其他尚未测试。
版本7.0以上安装vsftpd没有db4 需要安装
yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI
需要在vsftpd.conf 配置文件添加一行
allow_writeable_chroot=YES
不添加报错
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
错误原因为:
- Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life.
上面是7系统和6不一样的地方,其他配置都一样
1)系统安装完成后配置静态IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:ED:3B:E5
TYPE=Ethernet
UUID=45ad3dc1-032c-43e4-85e4-6d5ebd9ecc88
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.168 ##根据自己需求更改
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
2)关闭selinux
vi /etc/selinux/config
SELINUX=disabled ##将enabled改为disabled
3)配置yum
mv /etc/yum.repos.d/rhel-source.repo /etc/yum.repos.d/rhel-source.repo.bak ##重命名源文件
vi /etc/yum.repos.d/eld.repo ##创建新文件
[EL]
name =Linux 6.5 DVD
baseurl=file:///media/Server/
gpgcheck=0
enabled=1
##保存退出
mount /dev/cdrom /media/ ##挂载光盘
yum list ##测试yum
4)开始安装vsftpd
yum -y install vsftpd ##安装vsftpd服务
yum -y install db4 db4-utils db4-devel ##安装虚拟用户数据库相关文件
5)修改vsftpd的PAM验证配置文件
Linux一般都通过PAM设置账户的验证机制,修改login认证配置文件,在文件中的db选项指定并验证账户和密码的数据库文件,注意数据库文件无须.db名称后缀(注意系统版本,如果你是64bit系统,是调用/lib64目录下的模块)估计现在32位用的比较少吧。
vi /etc/pam.d/vsftpd ##屏蔽默认的行添加最最下面两行,注意32位系统是/lib目,64位系统是/lib64目录
#%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 required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_login
6)添加Linux本地用户及虚拟用户名和密码
useradd -s /sbin/nologin ftptest ##创建Linux本地用户不登录
vi /etc/vsftpd/virtual_login ##创建虚拟用户文件,注意第一行是虚拟用户,第二行是虚拟用户的密码
test1 ##虚拟用户
testpas ##虚拟密码
test2 ##虚拟用户
testpas ##虚拟密码
7)编译文件及修改文件权限
db_load -T -t hash -f /etc/vsftpd/virtual_login /etc/vsftpd/virtual_login.db ##编译之前创建的虚拟用户文件为db
chmod 600 /etc/vsftpd/{virtual_login,virtual_login.db}
8)修改vsftpd配置文件
cp -rp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak ##源配置文件
vi /etc/vsftpd/vsftpd.conf ##修改原配置文件,参数解释请查看本博客内vsftpd简介 https://blog.csdn.net/make_zhf/article/details/73799945
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftptest ##注意:这里是步骤(6)创建的Linux本地用户ftptest,不改这里虚拟用户将不能下载文件
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=180
ascii_upload_enable=YES
ascii_download_enable=YES
pasv_min_port=5881
pasv_max_port=5886
ftpd_banner=Welcome to ZHOU FTP service.
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=ftptest
user_config_dir=/etc/vsftpd/vsftpuser_conf
9)创建虚拟用户上传文件目录
mkdir /testftp/test1 -p
mkdir /testftp/test2 -p
10)创建虚拟用户配置文件目录及虚拟用户配置文件
mkdir /etc/vsftpd/vsftpuser_conf -p #创建虚拟用户文件目录,存放虚拟用户配置文件
[root@jenkins vsftpuser_conf]# cd /etc/vsftpd/vsftpuser_conf
vi test1
local_root=/testftp/test1
anon_umask=022
anon_world_readable_only=NO
write_enable=YES
#anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
vi test2
local_root=/testftp/test2
anon_umask=022
anon_world_readable_only=NO
write_enable=YES
#anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
##注意:创建虚拟用户配置文件内容,用户必要和virtual_login文件用户保持一致
11)启动启动vsftpd服务及修改虚拟用户上传文件目录用户和用户组
service vsftpd restart
chown ftptest.ftptest /testftp -R ##linux 本地用户
vi /etc/sysconfig/iptables ##添加防火墙规则,放开那21端口,让虚拟用户过来。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
service iptables restart