文件共享服务
应用层:ftp
内核:NFS
跨平台:samba
在linux实现CIFS(SMB)协议
RPC:远程过程调用(主要功能,让位于不同主机上的俩个进程能够基于二进制格式进行数据通信)
ftp :(基于RPC的文件共享服务)(明文传输)工作于应用层
ftp协议服务端与客户端交互时有俩种连接:(允许并发连接)
命令连接:文件管理类命令,始终在线的连接
数据连接:数据传输,按需创建及关闭的连接
数据传输格式(使用何种格式传输,由客户端和服务器自行协商):
文本传输
二进制传输
主动模式(Active FTP):由服务器创建连接
命令连接:
客户端:随机端口 --->服务端:21端口
客户端向服务器端发送用来建立数据连接的高位端口号
数据连接:
服务端:20/tcp--->客户端:随机端口
服务器的20端口仅仅负责建立数据连接,真正传输数据的是其他随机端口,20端口只是个监听套接字,连接套接字是随机的
被动模式(Passive FTP):由客户端创建连接
命令连接:
客户端:随机端口 --->服务端:21端口
数据连接:(服务端此时使用的端口,已经在命令连接中通知给客户端)
客户端:随机端口--->服务端:随机端口
(服务器防火墙通过连接追踪功能放行服务器使用的随机端口)
ftp协议中定义的典型消息,用来判断问题:
125:数据连接打开,传输开始
200:命令OK
226:数据传输完毕
331:用户名OK,需要输入密码
425:不能打开数据连接
426:数据连接被关闭,传输被中断
452:错误写文件
500:语法错误,不可识别的命令
530:未登入
vsftp (支持虚拟用户,基于PAM实现用户认证)
/etc/vsftpd 配置文件目录
/etc/vsftpd/vsftpd.conf 配置文件
/etc/init.d/vsftpd 启动脚本
/usr/sbin/vsftpd 主程序
针对系统账号来给予阻挡的配置文件:
/etc/vsftpd/ftpusers:PAM模块的阻挡访问设置项目
/etc/vsftpd/user_list:vsftpd自定义的阻挡访问项目
vsftpd受Selinux控制
基于PAM实现用户认证:(PAM:可插入式认证模块)
/etc/pam.d/*
/lib64/security/*
支持虚拟用户
/var/ftp vsftp根目录(不允许除root用户外其他用户拥有写权限)
匿名用户访问目录
/var/ftp/pub 存储公开数据
ftp用户:
匿名用户(anonymous 匿名用户登录也需输入匿名用户用户名 anonymous )
系统用户
/var/ftp/系统用户名 系统用户家目录
虚拟用户(访客身份)(被映射为ftp用户)
(匿名用户,虚拟用户最终都要映射为某系统用户)
vsftpd常用配置
/etc/vsftpd/vsftpd.conf
anonymous_enable=YES 是否允许匿名用户登录(ftp和anonymous俩个名称都被认为是匿名用户)
local_enable=YES 是否启用系统用户登录
write_enable=YES 系统用户是否可以上传文件
anon_upload_enable=YES 匿名用户是否要上传文件
某用户是否可以能在ftp服务器上上传文件,除了要看是否具有上传文件的权限嘛,还要看用户是否对相应目录具有写权限。
(文件服务权限和文件共享权限的交集)
connect_from_port_20=YES ftp为主动模式时(由服务器创建数据连接),服务器使用默认的20号端口
anon_mkdir_write_enable=YES 匿名用户是否可以创建目录
anon_other_write_enable=YES 匿名用户是否拥有其他写权限(删除权限)
anon_world_readable_only=YES 仅允许匿名用户具有下载可读文件的权限
anon_upload_enable=YES 是否允许匿名用户具有上传数据的权限(如果允许则anon_other_write_enable=YES必须设置)
anon_umask=077 匿名用户上传文件的权限
no_anon_password=YES 匿名用户是否可以免密登录
dirmessage_enable=YES 当用户进入一个目录时是否显示欢迎信息(在相应目录下创建.message文件,在.message文件里编辑欢迎信息)
xferlog_enable=YES 是否打开传输日志
xferlog_file=/var/log/xferlog 传输日志存放路径
chown_uploads=YES 用户上传文件后是否将用户上传的文件的属主改为其他用户
chown_username=whoever 改为那个用户
idle_session_timeout=600 用户会话超时时间
userlist_enable=YES 是否允许/etc/vsftpd/user_list 文件生效,阻挡指定的用户访问ftp服务器
userlist_deny=YES|NO 如为YES则 /etc/vsftpd/user_list 为黑名单 如为NO 则/etc/vsftpd/user_list为白名单
chroot_list_enable=YES 是不是用一个文件将特定用户锁在家目录下
chroot_list_file=/etc/vsftpd/chroot_list 将用户锁定在家目录下的用户列表文件存放路径
chroot_local_user=YES 将所有用户禁锢在家目录下(此命令如生效则 chroot_list_file=/etc/vsftpd/chroot_list 无效 )
listen=YES 是否将vsftpd运行为一个独立守护进程
守护进程:
独立守护进程
瞬时守护进程(由xinetd代为管理)
pam_service_name=vsftpd pam配置文件名字
资源访问控制
max_clients=xx 最多允许多少用户同时访问ftp服务
max_per_ip=xx 每个IP最同时多可以发起多少连接
idle_session_timeout=xxx 空闲的用户会话在空闲多久后中断(单位秒)
date_connection_timeout=xxx 空闲的数据连接在空闲多久后中断(单位秒)
设置客户端空闲时的自动中断和激活连接的时间
accept_timeout=xx 客户端空闲多长时间后中断连接
connect_timeout=xx 客户端中断多长时间后自动激活连接
设置客户端连接时的端口范围:
pasv_min_port=xxxx
pasv_max_port=xxxx
虚拟用户相关设置
guest_enable=YES 是否允许使用虚拟用户
guest_username=xxx 指定虚拟用户映射的系统账户
是否支持TCP_Wrappers的防火墙机制
tcp_wrappers=YES
ftp服务的安全通信方式:
ftps:ftp+ssl/tls
sftp:openssh的一个子系统,基于ssh来实现
ftps安全通信相关设置:
ssl_enable=YES 是否允许客户端使用ssl连接
ssl_sslv2=NO 是否允许使用ssl2进行连接
ssl_sslv3=NO 是否允许使用ssl3进行连接
ssl_tlsv1=YES 是否允许使用tls1进行连接(推荐使用)
allow_anon_ssl=NO 是否允许匿名用户使用ssl连接
force_local_data_ssl=YES 是否强制非匿名用户必须使用ssl连接发送和接收数据
force_local_logins_ssl=YES 是否强制非匿名用户登录时必须使用ssl连接
rsa_cert_file=xxxx 用于SSL连接的RSA证书文件位置
rsa_private_key_file=xxx 用于SSL连接的RSA私钥文件的位置,(none)表示私钥文件就存放于证书文件中
vsftpd虚拟用户
虚拟用户和本地用户不可以同时存在
传统的 FTP 服务器采用如下的方法实现虚拟用户:
在本地建立普通用户账号并设置密码
将其登录 shell 设为不可登录
由 passwd/shadow 口令系统进行认证
特别提醒,在vsftpd的设置中,必须把local_enable=YES 打开才能设置虚拟用户登录
所有虚拟用户都会统一映射为一个指定的系统账号:访问的共享位置既为此系统账号的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
虚拟用户账号的存储方式:
文件:编辑文本文件,此文件需要被编码为hash格式
奇数行为用户名,偶数行为密码
基于文件验证的vsftpd虚拟用户
1.创建用户数据库文件
a. 创建用户文件
vim /etc/vsftpd/vusers.txt
格式:
用户名
密码
...
b. 进入到相应目录下
cd /etc/vsftpd
c. 使用 db_load 命令生成口令库文件
db_load -T -t hash -f vusers.txt vusers.db
d. 修改修改口令库文件权限
chmod 600 vusers.db
2.创建虚拟用户映射的系统用户和访问FTP目录
a.创建系统用户并指定家目录
useradd -d /var/ftproot -s /sbin/nologin vuser #创建系统用户vuser 家目录为/var/ftproot且不允许登录(ftproot目录会自动创建)
b.修改家目录权限
chmod +rx /var/ftproot
c.pam配置文件,编辑生成虚拟用户所需的 PAM 配置文件
创建vsftpd的pam模块的配置文件,/etc/pam.d/vsftpd.db 让vsftpd支持pam模块进行验证
在/etc/pam.d/vsftpd.db中添加以下内容:
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
3.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf 给vsftpd指定pam模块
添加以下内容:
guest_enable=YES #允许虚拟用户登录
guest_username=vuser #将虚拟用户映射问本地vuser用户
pam_service_name=vsftpd.db # /var/pam.d目录下的 关于vsftpd的配置文件
4. 为虚拟用户建立独立的配置文件
a.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf ,为虚拟用户指定配置文件的存储路径
添加以下内容:
user_config_dir=/etc/vsftpd/vusers.d/
b.在/etc/目录下创建虚拟用户的目录
mkdir /etc/vsftpd/vusers.d/
c.进入到虚拟用户的目录中/etc/vsftpd/vusers.d/ 创建与虚拟用户同名的配置文件
将下面的内容写入配置文件中,就可以进行权限控制
#虚拟用户的上传权限
anon_upload_enable=YES
# 虚拟用户创建文件夹的权限
anon_mkdir_write_enable=YES
#虚拟的其他用户对指定用户目录的写权限
anon_other_write_enable=YES
虚拟用户的权限注意事项:
当一个虚拟用户登录 FTP 服务器时,vsftpd 的守护进程首先
查看主配置文件的权限配置,然后再用此用户单独的配置文件
中的配置覆盖主配置文件中的配置。
vsftpd 的这种配置机制,类似于 Apache 配置中的 httpd.conf
和.htaccess。只不过前者是针对不同虚拟用户的,而后者是针
对不同目录的。
因此在对不同虚拟用户进行配置时要注意:
(1)在主配置文件中设置最低的权限,这些设置对虚拟用户
口令库中的所有用户均生效;
(2)分别在不同的虚拟用户的配置文件中开放此虚拟用户应
该具有的权限。
关系型数据库的表中:
实时查询数据库完成用户认证:
mysql库:pam要依赖于pam-mysql插件
ftp支持俩种安全通信方式:
ftps:ftp+ssl/tls
sftp:基于ssh的安全传输功能
ftps的配置过程:
一、创建私有CA:
在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可;
1.为CA提供所需的目录及文件:
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
touch /etc/pki/CA/{serial,index.txt}
echo ca序列号 > /etc/pki/CA/serial
2.生成私钥(生成的私钥存放于openssl配置文件中配置的目录)
(umask 077; openssl genrsa -out private/cakey.pem 2048)
3.生成自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
( -new 生成新证书签署请求
-x509 生成自签格式证书(专用于创建私有CA使用)
-key 生成请求时用到的私钥文件路径
-out 生成的证书文件路径,如果是自签操所将直接生成签署过的证书
-days 证书的有效时长(单位天)
)
(自己向自己申请自签证书则使用-x509选项)
输入国家代码
输入地区代码
输入城市代码
输入企业代码
输入部门代码
输入主机名或个人名
输入管理员名
二、为vsftpd请求CA
1.创建存放CA的目录
mkdir /etc/vsftpd/ssl
2.进入CA目录,生成私钥
(umask 077; openssl genrsa -out vsftpd.key 2048)
3.生成证书签署请求
openssl req -new -key vsftpd.key -out vsftpd.csr -days 360
输入国家代码
输入地区代码
输入城市代码
输入企业代码
输入部门代码
输入主机名或个人名
输入管理员名
4.编辑openssl配置文件
修改CA工作目录为:
dir = /etc/pki/CA
4.签署CA(在/etc/vsftpd/ssl 目录下执行)
openssl ca -in vsftpd.csr -out vsftpd.crt -days 360
5.编辑vsftpd配置文件,使vsftpd可以使用ssl
添加以下内容:
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt CA证书位置
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key 私钥文件路径
6.重启vsftpd服务
源码安装vsftpd:
1.下载vsftpd
http://vsftpd.beasts.org/
2.备份vsftpd配置文件
3.
//进入存放 vsftpd 源代码的目录
# cd /usr/local/src
# ls
vsftpd-1.1.3.tar.gz
//解包
# tar -zxvf vsftpd-1.1.3.tar.gz
# cd vsftpd-1.1.3
//编译 vsftpd
# make
//查看是否编译成功
# ls -l vsftpd
-rwxr-xr-x 1 root root 65996 3 月 12 18:56 vsftpd
//安装 vsftpd
# make install
//安装过程执行了如下操作
// cp vsftpd /usr/local/sbin/vsftpd
// cp vsftpd.conf.5 /usr/local/man/man5
// cp vsftpd.8 /usr/local/man/man8
// cp xinetd.d/vsftpd /etc/xinetd.d/
#
//复制默认配置文件到/etc 目录
# cp vsftpd.conf /etc
//复制本地用户所需的 PAM 配置文件
# cp RedHat/vsftpd.pam /etc/pam.d/ftp
//重新启动 xinetd
# service xinetd restart
//安装结束
高安全级别匿名 FTP 服务器的配置要求
. 仅仅允许匿名用户访问
. 不允许本地用户访问
. 关闭所有写权限
. 不允许匿名用户上传
. 设置客户端连接时的端口范围
. 设置 匿名用户的最大传输速率限制
. 设置空闲的数据连接的的中断时间
. 设置客户端空闲时的自动中断和激活连接的时间
. 配置每个主机的最大连接数
. 配置总的并发连接数
. 配置禁止访问的主机
. 配置安全日志