FTP服务器的建立
Packages:vsftpd.i386
Daemon:vsftp(/usr/sbin/vsftpd)
Script:/etc/init.d/vsftpd
ports:21/tcp(ftp),20/tcp(ftp-data)
Configuration:
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/ftpusers
/etc/pam.d/vsftpd
在Linux中,有好几种实现ftp服务器的软件,我们这里使用redhat自带的vsftp,它具有安全,轻量级的特性。
我们安装vsftpd包后开启服务,ftp即可访问:
yum –y install vsftpd.i386
service vsftpd start
启动服务我们就可以直接访问ftp服务器了
ftp的根目录位于/var/ftp/我们可以在这里建立目录
使用本地用户登录时,登录到得目录是用户的家目录
比如lftp –u zoe 192.168.0.3
登录后显示的就是/home/zoe目录中的内容
在这里我们主要介绍三方面内容:
1 ftp的各种配置(通过配置文件)
2 基于ssl的安全ftp
3 关于ftp虚拟用户的建立
我们先认识一下vsftp的主配置文件/etc/vsftpd/vsftpd.conf
anonymous_enable=YES 是否允许用户匿名登录
local_enable=YES 是否允许本地用户登录
anon_upload_enable=YES允许用户上传文件
anon_mkdir_write_enable=YES允许上传目录
anon_other_write_enable=YES匿名用户删除文件的权限
dirmessage_enable=YES用户访问某个目录是是否显示欢迎信息
message_file=.message在用户家目录下建立一个.message文件,里面写上欢迎信息
xferlog_enable=YES 打开传输日志
xferlog_file=/var/log/vsftpd 开启传输日志,定义位置
chown_loads=YES文件上传后是否把属主改成别的用户
chown_username=whoever 把属主改成谁的
idle_session_timeout=600空闲会话超时时间
data_connection_timeout=120下载超时时间
ascii_upload_enable=YES是否打开基于ascii的传输,一般不建议打开
ftpd_banner=Welcome to blah FTP service 欢迎信息
chroot_local_user=YES将用户锁定到家目录下
如果不使用此项,用户登录后可以cd到ftp服务器所在主机的任一目录进行查看
chroot_list_enable=YES 将下行定义的列表中的用户锁定只能访问其家目录
chroot_list_file=/etc/vsftpd/chroot_list 定义列表文件位置
chroot_local_user=YES锁定所有
ls_recurse_enable=YES使用ls命令时是否使用递归显示
listen=YES listen是否是独立守护
pam_service_name=vsftpd用户登录模式的验证方法定义文件
userlist_enable=YES 使用 user_list定义次文件中的用户可以登录
userlist_deny=N0 表示仅允许user_list文件中的用户登录
或者是 userlist_deny=YES 表示仅拒绝user_list文件中的用户登录
默认为拒绝
tcp_wrappers=YESftp是否接受tcp_wrapper的控制
定义在/etc/vsftpd/ftpusers中的用户都似乎不允许登录ftp的
参照上列信息,我们可以更改配置文件以使ftp服务器达到我们的要求,这里就不再举例,就说一下几个ftp命令:
Lftp –u fedora 192.168.0.3 使用哪个用户身份登录
ftp>put issue 上传issue文件
我们要匿名用户上传文件,则需要目录为ftp:ftp属主属组
为了安全,我们这样做
mkdir /var/ftp/upload
chown ftp:ftp /var/ftp/upload
上传文件时cd到该目录即可
lftp 192.168.48.3
>cd /upload
>lcd /etc
>put issue
>bye
我们需要关闭selinux,才能使用户上传文件等,那么,我们可以可以不关闭selinux实现用户上传等功能呢?当然是可以的,我们主需要更改selinux策略中的选项以支持用户上传。
getsebool -a 显示当前主机上所有策略支持的布尔类型的值
进行一些修改:
setsebool allow_ftpd_anon_write=1 仅对当前系统生效
或者是 setsebool -P allow_ftpd_anon_write=1 直接修改了策略库中的值,永久生效
cd /var/ftp/
ll -Z
chcon -t public_content_rw_t upload/ 为该目录添加读写权限
这样selinux就支持了ftp的此项功能
-------------------------------------------SSL
我们登录ftp时的密码都是明文登录的,这样极不安全,所以我们可以使用基于ssl的ftp登录传输方式。
首先我们要为ftp签署证书;再在配置文件中添加下列内容
# SSL
ssl_enable=YES 启用ssl
ssl_tlsv1=YES 启用tls v1版本
ssl_sslv2=YES 启用ssl v2版本
ssl_sslv3=YES
allow_anon_data_ssl=NO 匿名用户一般不需要
force_local_data_ssl=YES本地用户传输时是否使用ssl
force_local_logins_ssl=YES本地用户登录时是否使用ssl
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt 证书路径
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key私钥路径
然后使用window端的ftp软件进行测试,例如Flashfxp
在登录过程中,我们可以捕获数据包进行分析,看使用ssl前后的登录过程中,密码有否被加密。
捕获数据的简单方法:tcpdump -i eth0 A dst host 192.168.0.3
在哪个主机上执行此命令都可以,要注意网卡是否选对。
tcpdump -D 显示网卡列表
tcpdump -i eth0 指定监听的网卡
A 以纯文本显示首部信息
dst host IP 目标地址IP
src host IP 源地址IP
-------------------------------------------------虚拟用户的建立实例:
1 建立虚拟FTP用户的账号数据库文件
2 创建FTP根目录及虚拟用户映射的系统用户
3 建立支持虚拟用户的PAM认证文件
4 在vsftpd.cong文件中添加支持配置
5 在个别虚拟用户建立独立的配置文件以实现权限访问
6 重启vsftpd服务
1
vim /etc/vsftpd/vusers.list
+>gentoo
+>123
+>fedora
+>456
yum -y install db4-utils 安装db工具软件包
db_load -T -t hash -f vusers.txt vuser.db 将此文件转换成二进制
chown 600 vusers.list
2
mkdir /var/ftproot
useradd -d /var/ftproot -s /sbin/nologin vuser不允许登录系统为了安全
chmod 755 /var/ftproot/
chown vuser:vuser /vat/ftproot
3
vim /etc/pam.d/vsftpd.vuser
+>auth required pam_userdb.so db=/etc/vsftpd/vusers
+>account required pam_userdb.so db=/etc/vsftpd/vumsers
定义认证时使用哪一个模块到×××用户的账号
4
vim /etc/vsftpd/vsftpd.conf
+>guest_enable=YES 是否启用是否启用来宾账号和虚拟用户
+>guest_username=vuser 虚拟用户的用户名是什么
+>pam_service_name=vsftpd.vuser 定义我们刚才建立的vsftpd.vuser文件
5
vim /etc/vsftpd/vsftpd.conf
+>user_config_dir=/etc/vsftpd/userconfig
mkdir /etc/vsftpd/userconfig
cd /etc/vsftpd/userconfig
vim fedora
+>anon_upload_enable=NO
+>anon_mkdir_write_enable=YES
禁止fedora用户传文件,允许建立目录
6
service vsftpd restart 重启完成
启用虚拟用户后本地用户将无法实现
以后我们会将两者兼用的方法