为了保证系统的安全性,现对系统中vsftpd服务进行调整,主要为禁止OS本地账户直接登录,采用虚拟账户;设置两个虚拟账户,一个用于上传更新(可读可写),一个用于下载(仅读);ftp根目录/var/ftp/pub保持不变(可扩展)。
2 VSFTP介绍
VSFTP(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com,ftp.gnome.org等。
在vsftpd服务器中支持3类用户,分别是匿名用户,本地用户,和虚拟账户。用途及区别如下。
1)、匿名用户:名为anonymous 或ftp 的FTP 用户,匿名FTP 用户登录后将FTP 服务器中的/var/ftp 作为FTP 根目录。匿名用户通常用于提供公共文件的下载,如架设公共软件下载的FTP 服务器,所有人都可以使用匿名用户进行软件下载。
2)、本地用户:账号是系统用户账号(/etc/passwd),使用FTP 本地用户账号登录FTP 服务器后,登录目录为本地用户的宿主目录。本地FTP用户账号通常和Web 服务器一起提供虚拟主机服务,作为网页虚拟主机更新网页的途径。
3)、虚拟用户:账号是为了保证FTP 服务器的安全性,由vsftpd 服务器提供的非系统用户账号,相对于FTP的本地用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源。虚拟用户FTP 登录后将把指定的目录作为FTP 根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户账号具有较高的安全性,可以替代本地用户账号使用。
下面将介绍在测试环境中vsftpd虚拟用户应用的配置过程。
3 VSFTP虚拟用户配置
3.1 软件安装
1)、执行rpm –qa| grep vsftpd,查看系统中是否已经安装了VSFTP,目前内外销系统中都已经安装了vsftpd。
本人测试环境是CentOS release5.5,安装VSFTP。执行如下
[root@localhost ~]# rpm-ivh vsftpd-2.0.5-24.el5_8.1.i386.rpm
启动服务
[root@localhost ~]# servicevsftpd start
设置下次自动启动
[root@localhost ~]#chkconfigvsftpd on
VSFTP安装完后,配置文件说明如下:
文件 |
说明 |
/etc/vsftpd/vsftpd.conf |
VSFTPD主配置文件 |
/etc/rc.d/init.d/vsftpd |
VSFTPD启动脚本,独立(stand alone)服务模式 |
/etc/pam.d/vsftpd |
PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止来自/etc/vsftpd/ftpusers文件中的用户访问) |
/etc/vsftpd/ftpusers |
禁止使用vsftpd的ftp用户列表文件 |
/etc/vsftpd/user_list |
禁止或允许使用vsftpd的ftp用户列表文件(根据主配置文件来定) |
/var/ftp |
匿名用户主目录 |
/var/log/xferlog |
VSFTPD日志文件 |
2)、由于虚拟用户的信息需要通过DB库的方式进行存储,需要用到DB rpm包。执行rpm –qa | grep db4查看系统是否已经安装相应的软件包。如下图。
3.2 建立虚拟用户口令库
1)、建立虚拟用户的口令文件,文件中奇数行设置虚拟用户的用户名,偶数行设置用户的口令。Vi编辑器创建vuser文件,在文件中设置虚拟用户nxbar,密码nxbar;虚拟用户wxbar,密码wxbar;虚拟用户vuser,密码vuser。如下图。
2)、生成虚拟用户口令库,使用db_load命令,执行如下:
[root@localhost vsftpd]# db_load -T -t hash -f vuser /etc/vsftpd/vuser_list.db
其中,“-f ”命令选项设置的是虚拟用户的口令文件,即上面新建的vuser,最终生成口令库文件vuser_list.db。
3.3 修改认证文件
修改/etc/pam.d/vsftpd
修改后如下
其中,注释第4、5、6、7行,这几行是用来配置本地账户认证的,如果不注释,虚拟账户登陆时会按照本地账户认证的方式进行认证,因而会报错。新增第9、10行,即配置虚拟账户的认证,路径“/etc/vsftpd/vuser_list”即上一步中生成的口令库文件。其他行不会影响虚拟账户的认证,保留。
3.4 新增本地账户
我们希望通过ftp虚拟账户进行文件的传输,但在系统内还需要有一个本地账户与虚拟的ftp账户进行关联映射。
新建用户vuser,”-d”指定vuser的宿主目录为ftp的根目录/var/ftp/pub。执行如下:
[root@localhost vsftpd]# useradd -d /var/ftp/pub -s /sbin/nologinvuser
查看/var/ftp/pub,root所有,others用户满权限。当然这里也可以为vuser指定其他的宿主目录,但是要保证vuser必须有可读、可写的权限,否则在文件上传下载的时候会出现权限不足的问题。
3.5 修改VSFTPD主配置文件
修改/etc/vsftpd/vsftpd.conf如下:
anonymous_enable=NO(是否允许匿名登录FTP 服务器,默认设置为YES 允许,即用户可使用用户名ftp 或anonymous 进行ftp 登录,口令为空。如不允许匿名访问设置为NO) local_enable=YES(是否允许本地用户登录FTP服务器,默认设置为YES允许,本地用户登录后会进入指定的用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub;设置虚拟账户必须设会YES) local_umask=022(设置本地用户的文件掩码为缺省022,得到上传文件的初始权限) #file_open_mode=666(对于上传的文件设定权限。默认为0666,如果你想被上传的文件可被执行,umask要改成0777,与local_umask配合使用) #anon_upload_enable=YES(是否允许匿名用户上传文件,须将write_enable=YES,默认设置为YES 允许) #anon_mkdir_write_enable=YES(是否允许匿名用户创建新文件夹,默认设置为YES允许) xferlog_enable=YES(默认值为NO如果启用此选项,系统将会维护记录服务器上传和下载情况的日志文件,默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file 选项对其进行设定) connect_from_port_20=YES(设定 FTP 服务器将启用FTP数据端口的连接请求,端口20为ftp-data数据传输,21 为连接控制端口) #chown_uploads=YES(设定是否允许改变上传文件的属主,与下面一个设定项配合使用) #chown_username=whoever(设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名,例如可以把上传的文件都改成root 属主。whoever任何人) #xferlog_file=/var/log/xferlog(设定系统维护记录FTP 服务器上传和下载情况的日志文件,/var/log/vsftpd.log是默认的,也可以另设其它) xferlog_std_format=YES idle_session_timeout=600(设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒,即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒,可以根据实际情况对该值进行修改) #data_connection_timeout=120(设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其修改) #nopriv_user=ftpsecure(运行 vsftpd 需要的非特权系统用户,缺省是nobody) #async_abor_enable=YES #ascii_upload_enable=YES #ascii_download_enable=YES #ftpd_banner=Welcome to blah FTP service. #deny_email_enable=YES #banned_email_file=/etc/vsftpd/banned_emails #chroot_list_enable=YES(设置为 NO 时,用户登录FTP 服务器后具有访问自己目录以外的其他文件的权限,设置为 YES时,用户被锁定在自己的宿主目录中,vsftpd 将在下面 chroot_list_file 选项值的位置寻找 chroot_list 文件,此文件需用户建立, 再将需锁定在自己宿主目录的用户列入其中,每行一个用户) # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list(此文件需自己建立,被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录,由 FTP 服务器自动地 chrooted 到用户自己的home 目录下,使得 chroot_list 文件中的用户不能随意转到其他用户的FTP home 目录下,从而有利于FTP 服务器的安全管理和隐私保护) listen=YES(如果设置为YES,则 vsftpd 将以独立模式运行,由vsftpd 自己监听和处理连接请求) #listen_ipv6=YES(设定是否支持IPV6)
pam_service_name=vsftpd(设置 PAM 外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd 文件,此文件中file=/etc/vsftpd/ftpusers 字段,说明了PAM 模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers 中) userlist_enable=YES(此选项默认值为NO,则不启用user_list文件;若此项设为YES ,则启用user_list 文件,而如果同时设置了 userlist_deny=YES ,则 user_list 文件中的用户将不允许登录FTP 服务器,甚至连输入密码提示信息都没有,直接被FTP 服务器拒绝,如果userlist_deny=NO,将则只允许user_list文件中的用户登陆FTP服务器) userlist_deny=YES(若已启用userlist_enable项,此项默认为YES,则阻止user_list 文件中的用户登录FTP 服务器;反之,则只允许user_list文件中的用户登录) tcp_wrappers=YES(表明服务器使用tcp_wrappers作为主机访问控制方式)
write_enable=NO(决定是否允许一些FTP命令去更改文件系统。包括上传文件,删除文件,新增目录,删除目录) download_enable=NO(决定是否允许下载文件,如果设为NO,下载请求将返回“permission denied”)
guest_enable=YES(如果启用,所有的非匿名用户登录时将被视为游客,其名字将被映射为guest_username里所指定的名字。采用虚拟用户必须设置该选项) guest_username=vuser(设置当游客进入后,其将会被映射的名字。这里设置为“vuser”,即虚拟用户登陆ftp后被映射的本地用户名)
virtual_use_local_privs=YES(虚拟用户和本地用户权限相同。很重要,保证虚拟用户有和映射的本地用户相同的权限) chroot_local_user=YES(设置虚拟用户被锁定在自己的宿主目录中。) user_config_dir=/etc/vsftpd/user_config(定义用户配置文件的目录) |
上表中标红的参数为重要的修改项,每项参数都在其后面的括号中有简单的说明。当然还有其他的很多参数来配置VSFTPD,这里不一一例句,附录中将会进行统一的说明。
3.6 管控ftp用户权限
从上面的配置中可以看到,我把“write_enable”和“download_enable”参数都设置为NO,那ftp用户该如何进行文件的传输呢?其实,这里为了管控权限,在主配置文件中都设置为“NO”,然后再对每个ftp用户进行单独的控制,分别对应单独的配置文件,从而保证权限分配的合理性及安全性。
其中user_config_dir参数指定了定义用户配置文件的目录,在这里只需要在user_config_dir中建立以ftp用户名命名的文件,内容为数据传输和用户权限。里面设置个人的合适的选项,就可以保证不同的虚拟用户获得不同的权限。
1)、新建user_config目录,路径为/etc/vsftpd/user_config
2)、配置nxbar用户的权限
代表可上传、可下载
配置wxbar用户的权限
代表可下载
当然在本系统中,如果我们不希望某个用户访问,可以直接将该ftp用户名写入ftpusers文件或者user_list文件。区别是user_list中拒接的用户不会提示输入密码,ftpusers拒接的用户可以输入密码,但不能登陆。
3.7 重启VSFTPD服务
至此,就完成了VSFTPD虚拟用户的设置,包括三个虚拟用户nxbar、wxbar、vuser,限定nxbar可上传、可下载,限定wxbar只可下载。同时,从VSFTPD的主配置文件中可以看到我们阻止了匿名用户的访问,由于注释了本地用户的认证,也阻止了本地用户的直接访问。
重启服务service vsftpd restart