vsftp全称:very secure FTP
如果需要vsftp支持匿名服务,必须在系统中创建ftp用户。ftp用户必须拥有一个home目录。注意:考虑到安全性,所以建议同组其他用户对这个目录也应该是只读权限,ftp用户对这个目录没有“写”权限。
#mkdir /var/ftp
#useradd -d /var/ftp ftp
#chown root.root /var/ftp
#chmod og-w /var/ftp
makd install安装时没有安装vsftp的配置文件,所以需要我们手工把配置文件复制到/etc下:
#cp vsftpd.conf /etc/
如果要求允许本地用户登录服务器,还需要做以下的操作:
#cp RedHat/vsftpd.pam /etc/pam.d/ftp
下面是make install命令的精简输出,看看都装了些什么:
/usr/local/sbin/vsftpd ----> 这是vsftpd的主程序,就是它提供了FTP的服务
/usr/share/man/man8/vsftpd.8 ----> 这是vsftpd的man手册
/usr/share/man/man5/vsftpd.conf.5 ----> 这是vsftpd的man手册
/etc/xinetd.d/vsftpd ---->这是vsftpd的xinetd方式的启动配置文件
检验安装成果:编辑配置文件/etc/vsftpd.conf,在文件的末尾加上listen=YES并保存,然后在命令行中输入:
#vsftpd &
这条命令是使vsftpd以后台方式运行。之后用FTP客户端工具匿名(anonymous)登录来检验一下我们的成果。
下一个目标。
--> FTP的目录结构
/var/ftp
|-pub
--> 服务开停
* 需要vsftpd在每次开机后自动启动,关机时自动停止。
* 在每个用户连接到本地服务器之后,服务器自动地显示一些欢迎信息:“欢迎使用本FTP服务器!本服务器严禁传播非法数据文件……”。
--> 用户权限管理
* 匿名用户访问不安全,要禁止匿名用户登录。
* 创建用户
--> 安全管理
使用单独(Standalone)方式启动,减少xinetd的连接中转环节,使服务器尽可能快地响应客户端的连接请求。
1、
在vsftpd.conf中添加:listen=YES。这句话的意思是让vsftpd以单独方式独立地运行并监听(在规定的端口以提供服务。如果没有这
句话或者设置了“listen=NO”,那么vsftpd只能以xinetd的方式来启动,强行以单独方式启动会出现:“500 oops:vsftpd:not configured for standalone,must be started from inetd”的错误信息。)。
2、编辑/etc/xinetd.d/vsftpd,把“disable=no”改成“disable=yes”。目的是让xinetd服务不再负责vsftpd的启动。不然以单独方式启动时会出现“500 OOPS:could not bind listening IPv4 socket”的提示。
service vsftpd
{
......
......
disable=yes
......
......
}
3、在root权限下输入“service xinetd restart”,重启xinetd服务以使上面的修改生效。
需要做一些辅助工作:
#mkdir /etc/vsftpd
#ln -s /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf
#ln -s /usr/local/sbin/vsftpd /usr/sbin/vsftpd
上面几条命令是为了vsftpd的配置文件和主程序文件在相应的目录中作软连接,以便Red Hat提供的控制命令脚步能够找到这些文件和目录。
现在测试一下这个脚本:
#/etc/rc.d/init.d/vsftpd start
#/etc/rc.d/init.d/vsftpd restart
#/etc/rc.d/init.d/vsftpd stop
#/etc/rc.d/init.d/vsftpd status
接下来设置开关机自动启动:
#chkconfig --level 3 vsftpd on
#chkconfig --level 5 vsftpd on
#ll /etc/rc3.d/|grep vsftpd
#ll /etc/rc5.d/|grep vsftpd
配置用户访问权限
修改/etc/vsftpd.conf,设置anonymous_enable为NO;设置local_enable=YES。这样就禁止了匿名用户的访问并且允许了本地用户访问。然后输入命令:
#/etc/rc.d/init.d/vsftpd restart
重启vsftpd服务器。接着创建FTP服务目录:
#mkdir /var/ftp/pub
然后创建用户:
#useradd -G ftp -d /var/ftp -M load
这条命令是创建用户并且设置用户的组为ftp,主目录(home目录)是/var/ftp,也是我们ftp的文件目录。不要忘记用passwd命令给用户设置一个安全密码。
接下来给ftp文件目录设置权限:
#chown load.ftp /var/ftp/ -R
#chmod 750 /var/ftp/ -R
设置/var/ftp目录及其子目录的读写权限为同组用户可读,不同组用户不可读。也就是同属ftp组的用户可以访问这个目录及其子目录。
接下来测试:
#ftp localhost
Name(localhost:root):load
Password:
ftp> ls
ftp> cd pub
ftp> mkdir dir_load
ftp> rm dir_load
ftp> put aaa.txt
ftp> del aaa.txt
ftp> bye
至此ftp用户权限也配置完成了。
添加欢迎信息
编辑/etc/vsftpd.conf文件,设置ftpd_banner的值为:“欢迎使用本FTP服务器!本服务器严禁传播非法数据文件!”
然后重启服务器:
#/etc/rc.d/init.d/vsftpd restart
#ftp localhost
......
......
(ftp的debug命令:进入debug状态,ftp工具会把每次ftp命令所对应的FTP协议命令显示出来。)
vsftpd服务高级配置
配置文件
主配置文件:/etc/vsftpd.conf,辅助配置文件:vsftpd.chroot_list、vsftpd.ftpusers、vsftpd.user_list。
(和xinetd模式下的vsftpd配置文件不同,/etc/vsftpd.conf文件在设置参数时等号的两端不能有空格。)
使用虚拟用户
之前的配置是使用useradd命令在操作系统中添加的用户。这些用户不仅能访问FTP服务,而且还能通过Telnet、SSH等服务来远程访问服务器。为了杜绝这个潜在的安全隐患,我们可以使用vsftpd的虚拟用户来解决这个问题。
vsftpd
的虚拟用户是由vsftpd自己进行用户管理的用户模式,使用虚拟用户不再能访问操作系统。虚拟用户口令文件又vsftpd负责独立保存,vsftpd使
用一个指定的系统用户来读取这个文件和FTP文件区域。这样,虚拟用户和系统用户就完全独立开,彻底保证了系统的安全性。
要使用虚拟用户模式首先需要创建一个用来读取口令文件和FTP服务资源的系统用户,就像匿名用户访问FTP时使用的ftp系统用户一样。
然后修改配置文件如下:
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=load
这些参数的意思是:禁止匿名用户访问,允许本地用户访问,禁止写权限,设置chroot,允许虚拟用户并把虚拟用户映射成load系统用户。
接下来我们创建一个虚拟用户的用户帐号文件(login.txt)了。这是一个格式文件:奇数行是用户名,进跟着这一行就是用户秘密。
1>download
2>4321down
3>upload
4>1234up
现在我们需要对这个文件做一个加密处理:
#db_load -T -t hash -f login.txt /etx/vsftpd_login.db
接下来要修改一下vsftpd的PAM设置,好让我们新建的虚拟帐号生效。
编辑/etc/pam.d/ftp,修改为下面的内容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account requierd /lib/security/pam_userdb.so db=/etc/vsftpd_login
接着重启vsftpd服务,并且测试一下
vsftpd.conf配置文件中的大部分参数是对所有用户都有效的,那么如何对不同的用户设置不同的访问权限呢?
要使这个功能生效,需要修改vsftpd.conf,添加如下内容:
user_config_dir=/etc/vsftpd_user_conf
接着创建目录用来存放配置文件:
#mkdir /etc/vsftpd_user_conf
现在的工作就需要把不同的帐号所拥有的不同配置文件以帐号名为文件名存放到这个目录中。
我们先给download帐号添加一些权限,好让它能够浏览目录、下载文件。
编辑文件/etc/vsftpd_user_conf/download,输入下面的内容:
anon_world_readable_only=NO
然后修改他的权限:
#chmod 644 /etc/vsftpd_user_conf/download
编辑文件/etc/vsftpd_user_conf/upload:
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
同样修改他的权限:
#chmod 644 /etc/vsftpd_user_conf/upload
重启vsftpd,测试。
用户的连接限制
max_clients=100
max_per_ip=4
local_max_rate=512000
现在,vsftpd服务器最多只能接受100个连接,而且每个IP发起的连接不能超过4个,最大的下载速度不能超过500KB了。重启服务器后这些设置就会生效了。
修放默认监听地址和端口
我们假设FTP服务器拥有两个IP地址:192.168.0.100和192.168.100.23,而我们的目标是配置FTP服务器使之监听192.168.100.23的2121端口。
在xinetd模式下,我们需要修改如下的几处。
1、修改/etc/xinetd.d/vsftpd文件
port=2121
bind=192.168.100.23
port参数是设置vsftpd服务所监听的端口,bind参数是设置vsftpd所监听的IP地址。
2、修改/etc/services文件
ftp 2121/tcp
ftp 2121/udp fsp fspd
3、重启xinetd服务。
4、测试。
在单独模式下,我们需要作如下修改
1、编辑/etc/vsfptd.conf
listen_port=2121
listen_address=192.168.100.23
2、重启vsftpd。
配置虚拟FTP主机
现在我们为192.168.100网段提供了FTP服务,我们的新任务是为192.168.0网段也提供FTP服务,并且两个网段的用户资料不能通过FTP公开共享,所以他们的文件区域要相对独立。
vsftpd基于IP地址的虚拟主机服务正好能够满足上面的要求,它可以使用多个个不同配置文件来提供基于IP地址的虚拟主机服务。
在单独模式下,我们需要做如下修改:
1、首先创建一个新的FTP文件区域.
#mkdir /var/ftp2
#chmod 755 /var/ftp2 -R
2、添加用户设置
#useradd -d /var/ftp2 -g ftp -M ftp2
#passwd ftp2
3、编辑配置文件
listen=YES
listen_address=192.168.0.100
listen_port=2121
ftp_username=ftp2
4、设置新的虚拟主机启动脚本
/etc/rc.d/init.d/vsftpd,该脚本在启动时会扫描/etc/vsftpd/目录下所有的*.conf文件,按照*.conf文件的先后顺序,依次启用vsftpd进程,每个vsftpd进程对应一个.conf文件。
5、测试。
补充:Linux的运行级别
linux在启动时会根据/etc/inittab文件中“id:n:initdefault”的设置来决定运行级别。“n”就是指定的运行级别。
0:代表停机(千万不要设置为0)。
1:代表单用户模式。
2:代表多用户模式,但是没有NFS。
3:代表完全多用户模式。
4:没有用到。
5:代表X11。
6:代表重新启动(千万不要设置为6)。
linux启动的时,会根据规定的运行级别到rc.d(n即为运行级别)目录中根据顺序执行所有“S”开头的文件;在关机时,会根据顺序执行所有“K”开头的文件。
快速配置vsftp本地用户组的配置
vsftp的配置
创建本地组的FTP服务器目录
mkdir -p /wwwroot
创建本地用户和组
groupadd vsftp
useradd -G vsftp -d /wwwroot -M user01
设置用户口令
passwd user01
修改目录的属主和权限
chown vsftp.user01 /wwwroot
chmod 750 /wwwroot
查看目录
ll -d /wwwroot
修改vsftpd.conf
/etc/vsftpd/vsftpd.conf
local_enable=YES
write_enable=YES
chroot_local_user=YES
修改/etc/vsftpd/chroot_list
加入用户名,这样用户就不能访问上层路径了。
chroot_local_user指令是vsftp服务器控制Linux系统本地用户是否能够切换到用户home以外的目录,它和
chroot_list_enable这个指令一起工作,看下面的说明。
如果设置为
chroot_local_user=YES (这行很重要)
chroot_list_enable=YES(这行可以没有, 也可以有)
chroot_list_file=/etc/vsftpd.chroot_list
那么, 凡是加在文件vsftpd.chroot_list中的用户都是不受限止的用户
即, 可以浏览其主目录的上级目录.
所以, 如果不希望某用户能够浏览其主目录上级目录中的内容,可以如上设置, 然后在
文件vsftpd.chroot_list中不添加该用户即可(此时, 在该文件中的用户都是可以浏览其主目录之外的目录的).
或者, 设置如下
chroot_local_user=NO
chroot_list_enable=YES(这行必须要有, 否则文件vsftpd.chroot_list不会起作用)
chroot_list_file=/etc/vsftpd.chroot_list
然后把所有不希望有这种浏览其主目录之上的各目录权限的用户添加到文件vsftpd.chroot_list(此时,
在该文件中的用户都是不可以浏览其主目录之外的目录的)
阅读(6286) | 评论(1) | 转发(0) |