虚拟用户:为了保证系统的安全性,现对系统中vsftpd服务进行调整,主要为禁止OS本地账户直接登录,采用虚拟账户;
在vsftpd服务器中支持3类用户,分别是匿名用户,本地用户,和虚拟账户。用途及区别如下。
匿名用户:名为anonymous 或ftp 的FTP 用户,匿名FTP 用户登录后将FTP 服务器中的/var/ftp 作为FTP根目录。匿名用户通常用于提供公共文件的下载,如架设公共软件下载的FTP 服务器,所有人都可以使用匿名用户进行软件下载。
本地用户:账号是系统用户账号(/etc/passwd),使用FTP 本地用户账号登录FTP 服务器后,登录目录为本地用户的宿主目录。本地FTP用户账号通常和Web服务器一起提供虚拟主机服务,作为网页虚拟主机更新网页的途径。
虚拟用户:账号是为了保证FTP 服务器的安全性,由vsftpd服务器提供的非系统用户账号,相对于FTP的本地用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源。虚拟用户FTP登录后将把指定的目录作为FTP 根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户账号具有较高的安全性,可以替代本地用户账号使用。
详细安装使用手册如下:
安装软体
yum install vsftpd
设置开机启动
systemctlenable vsftpd
vsftp安装完成后,默认配置文件如下:
/etc/vsftpd/vsftpd.conf | VSFTP主配置文件 |
/etc/rc.d/init.d/vsftp | VSFTP启动脚本,独立(Stand alone)服务模式 |
/etc/pam.d/vsftpd | PAM认证文件(此文件中file=/etc/vsftpd/ftpusers onerr=succeed指的是阻止该文件中用户访问 |
/etc/vsftp/ftpusers | 禁止使用vsftp的ftp用户列表 |
/etc/vsftp/user_list | 禁止或者允许使用vsftp的ftp用户列表(根据主配置文件来定) |
/var/ftp | 匿名登陆用户主目录 |
/var/log/xferlog | vsftp日志文件 |
创建虚拟用户口令库
先创建本地虚拟用户
useradd -d /home/ftpvuser -s /sbin/nologin ftpvuser
4.1 建立虚拟用户的口令文件,文件中奇数行设置虚拟用户的用户名,偶数行设置用户的口令
4.2 修改主配置文件
先备份一份:
mv vsftpd.confvsftpd.conf.bak
grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=0
file_open_mode=0777
anon_umask=000
dirmessage_enable=YES
connect_from_port_20=YES
#
xferlog_enable=YES
xferlog_std_format=no
log_ftp_protocol=yes
reverse_lookup_enable=NO
dual_log_enable=YES
xferlog_file=/bak_ftproot/ftplog/gzdfsv1/newlog/xferlog
vsftpd_log_file=/bak_ftproot/ftplog/gzdfsv1/newlog/vsftpd.log
#
listen=NO
listen_ipv6=YES
#
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=ftpvuser
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/vuser_dir
allow_writeable_chroot=YES
one_process_model=NO
#
#ftpd_banner=Welcome to DFS service.
#
#banned_email_file=/etc/vsftpd/banned_emails
max_clients=1500
anon_max_rate=15728640
local_max_rate=15728640
max_per_ip=1000
以上解释如下:
anonymous_enable=NO #(是否允许匿名登录FTP 服务器,默认设置为YES 允许,即用户可使用用户名ftp 或anonymous 进行ftp登录,口令为空。如不允许匿名访问设置为NO)
local_enable=YES # (是否允许本地用户登录FTP服务器,默认设置为YES允许,本地用户登录后会进入指定的用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub;设置虚拟账户必须设为YES;注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。)
write_enable=YES #(决定是否允许一些FTP命令去更改文件系统。包括上传文件,删除文件,新增目录,删除目录)
local_umask=022 #(设置本地用户的文件掩码为缺省022,得到上传文件的初始权限)
file_open_mode=0775 #(对于上传的文件设定权限。默认为0666,如果你想被上传的文件可被执行,umask要改成0777,与local_umask配合使用))
dual_log_enable=YES # (表明启用了双份日志,在用xferlog文件记录服务器上传下载情况的同时,vsftpd_log_file所指定的文件将用来记录服务器的传输情况)
xferlog_enable=YES # (默认值为NO如果启用此选项,系统将会维护记录服务器上传和下载情况的日志文件,默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file 选项对其进行设定)
xferlog_file=/ftplog/log/xferlog #(设定系统维护记录FTP服务器上传和下载情况的日志文件,/var/log/vsftpd.log是默认的,也可以另设其它)
listen=NO #(如果设置为YES,则 vsftpd 将以独立模式运行,由vsftpd自己监听和处理连接请求)
guest_enable=YES虚拟用户配置项
guest_username=ftpvuser #(设置当游客进入后,其将会被映射的名字。这里设置为“ftpvuser”,即虚拟用户登陆ftp后被映射的本地用户名),虚拟用户配置项
pam_service_name=vsftpd.vu #(设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/目录下),虚拟用户配置项
user_config_dir=/etc/vsftpd/vuser_dir #(使用虚拟用户配置文件的目录)
allow_writeable_chroot=YES #开启限制在用户的家目录中。
ftpd_banner=Welcome to DFS service. 欢迎消息
max_clients=1000 #同时最多连接客户端数
anon_max_rate=15728640 #设置匿名用户每条连接最大上传或下载速率单位Bytes
local_max_rate=15728640 #设置本地用户每条连接最大上传或下载速率单位Bytes
max_per_ip=1000 #每个IP限制登陆的客户端数
4.3 建立虚拟用户的口令文件,文件中奇数行设置虚拟用户的用户名,偶数行设置用户的口令。
vi /etc/vsftpd/ftpvuser
username1
password1
username2
password2
4.4 生成虚拟用户的口令库
db_load -T -t hash -f ftpvuser ftpvuser.db
其中,“-f ”命令选项设置的是虚拟用户的口令文件,即上面新建的ftpvuser,最终生成口令库文件 ftpvuser.db,并修改其属性,
chmod600 ftpvuser.db
4.5 修改认证文件
vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/ftpvuser
account required pam_userdb.so db=/etc/vsftpd/ftpvuser
vi /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
创建本地用户组及用户,创建目录及配置权限
groupadd -g 8000 ftpgrp
useradd -g ftpgrp -s /sbin/nologin -u 8000 ftpvuser
chown -R ftpvuser:ftpgrp /ftproot/
chown root:ftpgrp /ftplog/*/
chmod 755 /ftplog/*/
管控单独用户权限
从上面的配置中可以看到,我把“write_enable”和“download_enable”参数都设置为NO,那ftp用户该如何进行文件的传输呢?其实,这里为了管控权限,在主配置文件中都设置为“NO”,然后再对每个ftp用户进行单独的控制,分别对应单独的配置文件,从而保证权限分配的合理性及安全性。
其中user_config_dir参数指定了定义用户配置文件的目录,在这里只需要在user_config_dir中建立以ftp用户名命名的文件,内容为数据传输和用户权限。里面设置个人的合适的选项,就可以保证不同的虚拟用户获得不同的权限。
用户配置文件中没有的配置项将按照vsftpd.conf配置文件中的内容设置。
6.1 新建user_config目录,路径为/etc/vsftpd/vuser_dir
再针对每个用户名创建单独文件,管控权限
比如普通上传目录权限:
anon_upload_enable=YES
virtual_use_local_privs=NO
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
解释:
1.anon_upload_enable=YES 允许上传
2.virtual_use_local_privs=NO 虚拟用户和匿名用户有相同权限
3.anon_world_readable_only=NO 表示用户可以浏览FTP目录和下载文件
4.write_enable=YES 允许写操作
5.anon_mkdir_write_enable=YES 允许建立目录
6.local_root 登录默认家目录
因为在vsftpd.conf中不允许匿名登录,关于匿名的配置可忽略。
管理员权限:
virtual_use_local_privs=NO
anon_world_readable_only=NO
download_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
local_root=/ftproot
anon_mkdir_write_enable=YES 表示用户具有文件改名和删除文件的权限
pub只查看权限
local_root=/ftp
write_enable=no
对于权限管控还有更精准卡控cmd_allowed
cmds_allowed=ABOR,CDUP,CWD,DELE,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,TYPE,USER,,ACCT*,APPE,CDUP,HELP,MODE,NOOP,REIN*,STAT,STOU,STRU,SYST
这些后面会专门再写一篇。
重启vsftp服务,完成。
后面单独创建新用户的话,不修改vsftpd.conf就不用重启服务。