针对公司内部的ftp访问需求:大部分用户给予虚拟用户权限(virtual user),对小部分有特殊需求的用户给予本地用户权限(local user)。在此对虚拟用户和本地用户的定义进行说明。
虚拟用户:FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。
本地用户:系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源。
对上述的需求分析后,我建议可以考虑采用虚拟用户和本地用户相结合的方案来实现。以下是我在技术上对服务器的配置说明一下,如果只考虑虚拟用户的使用,那么可以忽略本地用户的配置。
本VSFTPD服务器均是在stand alone模式下测试的!不知道哪位高手能写一个用(service vsftpd start|stop|restart)这种模式启动的脚本,偶看过redhat 的启动脚本,但是没有实验成功。
1.服务器的网卡配置。如果要提供2个vsftpd的进程服务,那么只有一个网卡会造成服务冲突,但是linux给我提供了一个很好的虚拟功能。我们可以在真实的物理网络接口上虚拟出很多的虚拟网络接口。命令如下:
假设eth0的ip是192.168.100.2
ifconfig eth0:1 192.168.100.3 netmask 255.255.255.0
如果想重起后不丢失配置,将其写入文件中(/etc/sysconfig/network-scripts/ifcfg-eth0:1)
cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 ifcfg-eth0:1
vi ifcfg-eth0:1进行修改如下
DEVICE=eth0:1
BROADCAST=192.168.100.255
HWADDR=该网卡的MAC地址
IPADDR=192.168.100.3
NETMASK=255.255.255.0
NETWORK=192.168.100.0
ONBOOT=YES
TYPE=Ethernet
Service network restart
2.Cd /etc/vsftpd/ (针对redhat,如果是自己编译的vsftpd那就把.conf放在/etc/下就可以了)
Cp vsftpd.conf vsftpd_virtual.conf
分别编辑2个conf文件。(注:/etc/rc.d/init.d/vsftpd脚本在启动时,扫描/etc/vsftpd/目录下所有的
*.conf文件,按照 *.conf文件的先后,依次启用vsftpd进程,每个vsftpd进程对应一个.conf文件。)
针对vsftpd_virtual.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO(不使用标准的日志格式)
log_ftp_protocol=YES(当此选项激活后,所有的FTP请求和响应都被记录到日志中。提供此选项时,xferlog_std_format不能被激活。)
ftpd_banner=Welcome to Virtual ftp service
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list(如果chroot_local_user是YES,那么在这个文件里的用户将不被限制在自己的主目录里)
listen=YES
tcp_wrappers=YES(如果是自己重新编译的vsftpd服务,需要把该行给注释掉,要不登陆ftp会报错的;原因我也不清楚,可能在rpm -e vsftpd的时候也删掉了其他的东西。)
listen_address=192.168.100.3
listen_port=5555
guest_enable=YES----------起用虚拟用户
guest_username=vsftpdguest------将虚拟用户映射为本地用户
user_config_dir=/etc/vsftpd/virtual(调用用户配置文件的目录)
pam_service_name=vsftp.vu(下面进行说明)
userlist_enable=YES
hide_ids=YES(如果启动这项功能,所有档案的拥有者与群组都为ftp,防止泄露用户信息)
ls_recurse_enable=NO(不允许登入者使用ls -R 这个指令,该指令消耗大量的系统资源,防止DOS攻击)
virtual_use_local_privs=YES(虚拟用户使用本地用户相同的权限)。
3.建立logins.txt, vi /tmp/logins.txt,添加入下信息:
test------------用户名
test------------密码
john
john
redhat
redhat
jingjing
jingjing
建立访问者的口令库文件,然后修改其权限:
db_load –T –t hash –f /tmp/logins.txt /etc/vsftpd_login.db
进入/etc/pam.d/中创建vsftpd.vu
在此文件中添加如下信息
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
4.创建虚拟用户映射的真实用户vsftpdguest
useradd –d /var/ftp/pub –s /sbin/nologin vsftpdguest
passwd vsftpdguest
chown vsftpdguest.vsftpdguest /var/ftp/pub
到/etc下创建vsftpd.chroot_list,并把要限制的用户加进去。
这样,基本的vsftpd服务器就配置成功了,现在的虚拟用户可以登陆到192.168.100.3 5555来进行ftp访问。但是现在的用户权限很少,只能浏览目录的内容,不能上传、下载、修改、删除文件。因此需要在每个用户的配置文件里对其做特定的设置。
5.Cd /etc/vsftpd/virtual
Touch test john jingjing redhat
在jingjing中添加
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
local_root=/var/ftp/pub/jingjing(jingjing登陆服务器的默认目录)
此用户就有了上传、下载和浏览的权限
在redhat中添加
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
local_root=/ftp/manager(redhat登陆的默认目录,你可以设为任何目录下)
此用户就有了上传、下载、删除文件目录、修改文件名和浏览的权限
而不做设置的test和john就只有浏览的权限。
6.使用安全的FTP登陆和连接
在VSFTPD
-2.0.1以后的版本里提供了对SSL套接层的支持,这使得vsftpd变的更加安全了。要实现ftp的安全连接有几个必须的前提,
OPENSSL≥0.9.6,现在最新的版本是openssl-0.9.7e;客户端最好是windows(在linux下的命令行模式好象还不可以,因
为客户端软件必须支持SSL),而且要现在一个openssl for win32的包(现在最新的是openssl-0.9.7e for
win32),把包里面的ssleay32.dll和libeay32.dll文件复制到C:\winnt\system32\下;最后必须的是一个支持
SSL加密的ftp客户端软件(我现在用的是flashfxp)。
首先把linux里以前的vsftpd给卸载rpm –e --nodeps
vsftpd;以前的openssl也要卸载 rpm –e –nodeps
vsftpd;然后分别从和
这2个网站上下载最新的openssl和vsftpd包,编译安装。
tar -zxvf openssl-0.9.7e.tar.gz
cd openssl-0.9.7e
./config --prefix=/usr/local --openssldir=/usr/local/openssl shared
make
make test
make install
tar –zxvf vsftpd-2.0.1.tar.gz
cd vsftpd-2.0.1
阅读(1172) | 评论(0) | 转发(0) |