相关阅读:Linux基础教程 – 架设FTP服务器[上部]
六、搭建FTP服务器,禁止匿名用户访问,实现公共用户public只可以访问下载共享目录文件share1,内部员工internal可以上传下载内部共享目录share2,所有用户
不得离开默认目录,并且对客户端的连接数及下载速度做不同的限制。
- 禁止匿名用户访问
直接编辑FTP的主配置文件,把如下一行的匿名访问又“YES”改成“NO”:
anonymous_enable=NO
重启FTP服务测试:
[root@51cto ~]# service vsftpd restart
关闭 vsftpd: [确定]
为 vsftpd 启动 vsftpd: [确定]
[root@51cto ~]# ftp 218.192.86.145
Connected to 218.192.86.145.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (218.192.86.145:root): ftp
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>
- 创建用户数据库文件(创建用户文本文件–>生成数据库–>修改数据库文件访问权限)
1、创建用户文本文件vsftpd_virtualuser.txt,添加两个虚拟帐号public和internal
[root@51cto ~]# vim /etc/vsftpd/vsftpd_virtualuser.txt
[root@51cto ~]# cat /etc/vsftpd/vsftpd_virtualuser.txt
public
123
internal
456
如上表示public用户密码123、internal用户密码456,所以必须设置该文本文件权限只有root可见
2、安装db4-utils-4.3.29-9.fc6.i386.rpm包,以实现数据库的生成
[root@51cto ~]# mount /dev/cdrom /mnt/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@51cto ~]# rpm -ivh /mnt/Server/db4-utils-4.3.29-9.fc6.i386.rpm
warning: /mnt/Server/db4-utils-4.3.29-9.fc6.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:db4-utils ########################################### [100%]
因为虚拟帐号和密码的文本文件无法被系统帐号直接调用,所以必须使用db_load命令生成db数据库文件,
[root@51cto ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt
/etc/vsftpd/vsftpd_virtualuser.db //生成数据库文件
[root@51cto ~]# ll /etc/vsftpd/
总计 56
-rw——- 1 root root 125 2007-12-13 ftpusers
-rw——- 1 root root 361 2007-12-13 user_list
-rw——- 1 root root 4396 10-19 21:52 vsftpd.conf
-rwxr–r– 1 root root 338 2007-12-13 vsftpd_conf_migrate.sh
-rw-r–r– 1 root root 12288 10-19 22:11 vsftpd_virtualuser.db
-rw-r–r– 1 root root 25 10-19 22:04 vsftpd_virtualuser.txt
可以看到已经生成了数据库文件,但该文件的权限默认644,必须修改为600只是root可见
3、修改数据库文件访问权限
[root@51cto ~]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db
[root@51cto ~]# ll /etc/vsftpd/vsftpd_virtualuser.db
-rw——- 1 root root 12288 10-19 22:11 /etc/vsftpd/vsftpd_virtualuser.db
- 配置PAM文件(修改vsftpd对应的PAM配置文件/etc/pam.d/vsftpd)
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块.
PAM(Plugable Authentication Module)为可插拔认证模块。PAM模块配置文件路径为/etc/pam.d/目录
,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
[root@51cto ~]# cat /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 system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so对于该文件直接把源文件使用“#”全部注释,然后添加新的认证配置文件,使得最终如下:
[root@51cto ~]# cat /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 system-auth
#account include system-auth
#session include system-auth
#session required pam_loginuid.so
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser
- 创建虚拟帐号对应的系统用户ftppublic和ftpinternal
公共用户public对应系统帐号ftppublic,并指定其主目录为/var/ftp/share1,
而内部员工internal对应系统帐号ftpinternal,指定主目录为/var/ftp/share2,
由于公共用户public只允许下载,不能上传,所以对应目录权限是rx可读可执行
而内部员工internal允许下载上传,所以对应目录权限是rwx可读可写可执行
[root@51cto ~]# useradd -d /var/ftp/share1 ftppublic //添加系统帐号,指定自家目录
[root@51cto ~]# useradd -d /var/ftp/share2 ftpinternal
[root@51cto ~]# chmod -R 500 /var/ftp/share1
[root@51cto ~]# chmod -R 700 /var/ftp/share2
[root@51cto ~]# ll /var/ftp/
总计 24
drwxr-xr-x 2 root root 4096 2007-12-13 pub
dr-x—— 3 ftppublic ftppublic 4096 10-19 22:33 share1
drwx—— 3 ftpinternal ftpinternal 4096 10-19 22:34 share2
- 建立配置文件(修改vsftpd.conf主配置文件–>建立虚拟帐号配置文件)
1、修改vsftpd.conf主配置文件,使得如下:
[root@51cto ~]# grep -v “#” /etc/vsftpd/vsftpd.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_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd //配置vsftpd使用的PAM模块为vsftpd
user_config_dir=/etc/vsftpd/51cto //设置虚拟帐号的主目录为51cto
userlist_enable=YES
tcp_wrappers=YES
2、建立虚拟帐号配置文件
在FTP主配置文件中的user_config_dir指定的路径/etc/vsftpd/51cto下建立与虚拟帐号同名的
配置文件并添加相应的配置字段
[root@51cto ~]# mkdir /etc/vsftpd/51cto //创建虚拟帐号的主目录
[root@51cto ~]# touch /etc/vsftpd/51cto/public //建立虚拟帐号配置文件
[root@51cto ~]# touch /etc/vsftpd/51cto/internal
[root@51cto ~]# vim /etc/vsftpd/51cto/public
[root@51cto ~]# cat /etc/vsftpd/51cto/public
guest_enable=yes //开启虚拟帐号登录
guest_username=ftppublic //设置ftp对应的系统帐号为ftppublic
anon_world_readable_only=no //赋予浏览目录的权限
anon_max_rate=60000 //限定传输速率为60KB/s
[root@51cto ~]# vim /etc/vsftpd/51cto/internal
[root@51cto ~]# cat /etc/vsftpd/51cto/internal
guest_enable=yes
guest_username=ftpinternal
anon_world_readable_only=no
write_enable=yes
anon_mkdir_write_enable=yes
anon_upload_enable=yes
anon_max_rate=150000 //限定传输速率为150KB/s
然后重启服务测试:
[root@51cto ~]# service vsftpd restart
关闭 vsftpd: [确定]
为 vsftpd 启动 vsftpd: [确定]3、测试
首先在share1和share2目录中添加测试文件:
[root@51cto ~]# cp /mnt/Server/httpd-2.2.3-22.el5.i386.rpm /var/ftp/share1/public.xls
[root@51cto ~]# cp /mnt/Server/mysql-5.0.45-7.el5.i386.rpm /var/ftp/share2/internal.xls
[root@51cto ~]# ll /var/ftp/share1/public.xls
-r–r–r– 1 root root 1270589 10-19 23:08 /var/ftp/share1/public.xls
[root@51cto ~]# ll /var/ftp/share2/internal.xls
-r–r–r– 1 root root 4347498 10-19 23:08 /var/ftp/share2/internal.xls
对于公共用户public来说:
测试能否下载:
测试能否上传:
上传被拒绝!
测试限速60KB/s:
对于内部员工internal来说:
测试能否下载:
测试能否上传:
测试限速150KB/s:
测试成功!!!