FTP的基本认识
ftp
局域网共享 nfs smb
互联网共享 ftp http
ftp 文件传输协议
工作模式
主动模式 21 验证端口 20 数据传输端口
被动模式 21 验证端口 大于1024随机端口作为传输端口<默认工作模式>
服务端
IIS(ftp),server-u(windows)
wu-ftp,proftp,vsftpd(类unix)
Very Secure FTP Daemon---vsftpd
客户端
linux: ftp|lftp|sftp
windows 浏览器|cute-ftp上传|filezilla<windows|linux>
VSFTP软件列表|了解配置文件<主|子>
rpm -ql vsftpd
/etc/logrotate.d/vsftpd --日志轮循
/etc/pam.d/vsftpd --认证模块
/etc/rc.d/init.d/vsftpd --启动脚本
/etc/vsftpd
/etc/vsftpd/ftpusers --拒绝用户登录ftp
/etc/vsftpd/user_list --用户登录ftp(拒绝|只允许)
/etc/vsftpd/vsftpd.conf --主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd -- 二进制命令
/usr/share/doc/vsftpd-2.2.2 --帮助手册
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS --虚拟主机
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS --虚拟用户
/usr/share/man/man5/vsftpd.conf.5.gz
/var/ftp --ftp匿名用户的家目录
/var/ftp/pub --ftp扩展目录
常用功能
cat /etc/vsftpd/vsftpd.conf |grep -v ^# |grep -v ^$
anonymous_enable=YES --匿名用户
local_enable=YES --本地用户
write_enable=YES --全局选项 可读写
local_umask=022 --本地文件反掩码 755
dirmessage_enable=YES --开启用户家目录消息 $HOME/.massages
xferlog_enable=YES --启动ftp日志
connect_from_port_20=YES --以主动模式
xferlog_std_format=YES --支持旧的ftp日志格式
listen=YES --监听21端口
pam_service_name=vsftpd --pam认证名称
userlist_enable=YES --启用/etc/vsftpd/user_list 默认拒绝列表
tcp_wrappers=YES --启用tcpwrappers防火墙 /etc/hosts.allow /etc/hosts.deny
anon 匿名用户变量
local 本地用户变量
非(anon|local) 全局变量
任务1、vsftpd服务的安装
(1)检查是否安装了vsftpd
(2)安装vsftpd
(3)vsftpd的启动
(4)vsftp的简单测试(注意要先关闭防火墙(iptables -F),再关闭selinux(setenfore 0))
Linux端的测试:
windows端的测试:
浏览器中的测试
任务2:允许匿名用户访问、上传和下载文件;并允许匿名用户创建目录
Linux下vsftp匿名用户上传和下载的配置
配置要注意三部分,请一一仔细对照:
1、vsftpd.conf文件的配置(vim /etc/vsftpd/vsftpd.conf)
#允许匿名用户登录FTP
anonymous_enable=YES
#设置匿名用户的登录目录(如需要,需自己添加并修改)
anon_root=/var/ftp/pub
#打开匿名用户的上传权限
anon_upload_enable=YES
#打开匿名用户创建目录的权限
anon_mkdir_write_enable=YES
#打开匿名用户删除和重命名的权限(如需要,需自己添加)
anon_other_write_enable=YES
2、ftp目录的权限设置
默认情况下,ftp的根目录为/var/ftp,为了安全,这个目录默认不允许设置为777权限,否则ftp将无法访问。但是我们要匿名上传文件,需要“other”用户的写权限,正确的做法:
在/var/ftp中建立一个upload(名字自己起吧)文件夹,将个文件夹权限设置为777(视具体需要自己设),在upload这个文件夹中,匿名用户可以上传文件、创建文件夹、删除文件等。
一般至此,便实现vsftpd匿名用户的上传下载了。如果还不行,就是下面的问题。
3、selinux的配置
SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,是 Linux上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。
最简单的办法,关闭selinux
方法1:修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
方法2:用命令setenforce 0,无需重启。(setenforce的格式:setenforce [ Enforcing | Permissive | 1 | 0 ])
任务3 要允许team1和team2账号登录服务器,但不能登录本地系统;并将这两个账号的根目录限制为/var/www/html,不能进入该项目以外的任何目录
- 建立FTP账号:team1和team2
- 设置team1和team2密码
(3)vsftpd.conf的配置
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,
方案一:用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。
方案二:在vsftpd的配置文件中增加下列两项中的一项 allow_writeable_chroot=YES
- 建立/etc/vsftpd/chroot_list文件
输入FTP账号:team1和team2
(5)修改本权限
(6)测试结果
关于目录锁定的注意事项:1、一般来说, 默认的是每个用户只能访问/home/username目录下的文件, 但是作为服务器来讲, 把网站文件存到各自的目录下有点不现实, 比如说TOM和JACK两个用户同时具有访问某一个指定的目录,比如说网站的根目录/var/www/, VSFTPD的默认的配置文件就无法实现这样的功能, 而这个功能又是在网站的文件管理过程中又非常实用. 下面是这方面的配置, 为方便突出重点, 只讨论有关这个需求的几个参数,要达到此项需求, 主要用到chroot_local_user,chroot_list_enable, local_root, vsftp.chroot.list,这几个参数, 其中参数local_root需要手动在配置文件(vsftp.conf)中添加,vsftpd.chroot_list需要在/etc添加新文件(vim /etc/vsftpd/vsftpd.chroot_list)
基于chroot_local_user,chroot_list_enable这两项决定着它的整个功能的实现, 其参数值是YES,NO, 根据排列组合原理可以得出4种不同的设置方法, 它们共同决定着vsftpd.chroot_list中定义的用户的访问权限及是否漂移(也就是能否访问指定目录外的其他文件), 这里又分两种情况, 第一种情况是在vsftpd.chroot_list定义的用户(list用户), 第二种是vsftpd.chroot_list(简称非list)
下面是四种情况这两用户组的访问情况(再次说明, 默认其他的vsftpd.conf参数已经设置完成的情况)
第一种情况:
chroot_local_user=YES
chroot_list_enable=YES
效果: list用户组漂移, 非list用户组固定
第二种情况:
chroot_local_user=YES
chroot_list_enable=NO
效果: list用户组固定, 非list用户组固定
第三种情况:
chroot_local_user=NO
chroot_list_enable=NO
效果: list用户组漂移, 非list用户组漂移
第四种情况:
chroot_local_user=NO
chroot_list_enable=YES
效果: list用户组固定, 非list用户组漂移
2、用户访问权限都固定在同一个目录下, 这个目录是由local_root属性值来确定的。需建如local_root=/var/www。
任务4 开启目录消息的功能
dirmessage_enable=YES
vim /var/ftp/.message --匿名用户消息
echo "welcomt to user1" > /home/user1/.message 普通用户user1用户消息
测试
[root@node2 tmp]# ftp 192.168.1.150
Connected to 192.168.1.150 (192.168.1.150).
220 (vsFTPd 2.2.2)
Name (192.168. 1.150:root): user1
331 Please specify the password.
Password:
230-welcomt to user1 ---->
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
任务5、指定匿名用户和认证用户上传文件到不同的目录
默认 本地用户ftp家 $HOME /home/cw01
匿名用户ftp家 /var/ftp
改变
所有本地用户ftp家 /rhome/local
匿名用户ftp家 /rhome/anon
1. 新建目录
mkdir -p /rhome/{local,anon}
mkdir /rhome/local/local_home
mkdir /rhome/anon/anon_home
2.定义配置文件
#userlist_deny=NO
local_root=/rhome/local
anon_root=/rhome/anon
3重启
service vsftpd restart
4 测试
[root@node2 ~]# lftp 192.168.1.150
lftp 192.168.1.150:~> ls
drwxr-xr-x 2 0 0 4096 May 21 23:41 anon_home
lftp 192.168.1.150:/> user cw01
口令:
lftp cw01@192.168.1.150:~> ls
drwxr-xr-x 2 0 0 4096 May 21 23:40 local_home
lftp cw01@192.168.1.150:~> user rs01
口令:
lftp rs01@192.168.1.150:~> ls
drwxr-xr-x 2 0 0 4096 May 21 23:40 local_home
任务6、用户访问控制
vsftp对用户的访问控制是由/etc/vsftpd/user_list和/etc/vsftpd/ftpusers控制实现的
/etc/vsftpd/ftpusers文件是专门用于定义不允许登录FTP的用户
1、userlist_enable=yes userlist_deny=yes (默认)
/etc/vsftpd/user_list和/etc/vsftpd/ftpusers中的用户都不能访问FTP服务器
2、userlist_enable=yes userlist_deny=no
/etc/vsftpd/user_list中的允许,/etc/vsftpd/ftpusers中的仍然是不允许
做法是:user_list指定允许访问用户,在/etc/vsftpd/vsftpd.conf中设置
userlist_enable=YES
userlist_deny=NO
#userlist_file=/etc/vsftpd/user_list
任务7、基于不同IP地址的虚拟主机
- 为网卡创建子接口
- 建立匿名用户
- 建立多级目录
- 创建测试文件
- 创建本地账号myftp,并指定其主目录为/var/myftp
- 创建虚拟FTP服务器的配置文件
添加以下内容
- 编辑原来vsftpd的配置文件/etc/vsftpd/vsftpd,conf
在listen=YES下添加一行
- 测试
- 运行第2个虚拟主机,命令如下:
- 查看vsftpd服务器进程,命令如下
任务8、设置vsftp虚拟账号
(1)默认安装ftp后是匿名用户访问的,首先要禁用匿名用户访问
(2) 在/etc/vsftpd目录下创建vlogin.txt文件用来存储虚拟用户的用户名和密码
- 安装 db4-utils-4.3.29-10.el5.i386.rpm
(2)使用db_load命令把vlogin.txt文件转换成数据库文件
(3) 更改文件权限,保证安全
(4) 编辑PAM文件(PAM模块配置文件路径为etc/pam.d/目录)此目录下保存着大量与认证有关的配置文件并以服务名称命名
(5)建立虚拟用户设置该用户所要访问额目录,并设置虚拟用户的访问权限
(6)编辑/etc/vsftpd/vsftpd.conf
(7)重启服务
(8)使用虚拟用户登录ftp服务器进行测试