1.ftp的定义
ftp://文件传输协议,是INTERNET上仍常用的最老的网络协议之一,他为系统提供了通过网络与远程主机进行传输的简单方法,在RED HAT ENTREPRISE LINUX6中,FTP服务器包的名称为VSFTPD,他代表Very Secure File TransferProtocol Damon 服务器名称也叫做vsftpd
2.默认配置文件让 ANONYMOUS 用户只能下载位于CHROOT 目录中的内容。 /var/ftp/ 这意味着远程 FTP 客户端能以用户 anonymous 或 ftp 身份连接到服务器(无需密码),并从ftp服务器上的 /var/ftp/ 目录下载文件(其本地 ftp 用户可以读取这些文件)
3.部署ftp服务
yum install vsftpd -y 安装vsftpd服务
systemctl start vsftpd 开启vsftpd服务
systemctl enable vsftpd 设置vsftpd服务开机启动
getenforce 检查selinux是否开启
如果不是disabled , vim /etc/sysconfig/selinux
修改SELINUX=disabled 然后reboot重启以生效
firewall-cmd --permanent --add-service=ftp 把ftp服务永久添加到防火墙
firewall-cmd --reload
安装lftp,进行登陆,或者在浏览器输入ftp://172.25.254.103
lftp相当于一种浏览器(lftp登陆输入?获得命令详细帮助)
ftp服务的基本信息
软件安装包: vsftpd
默认发布目录: /var/ftp
协议接口: 21/tcpp 21 主动端口,服务器主动连接客户端
服务配置文件: /etc/vsftpd/vsftpd.conf
报错id的解析:
500 文件系统权限过大
530 用户认证失败
550 服务本身功能未开放
553 本地文件系统权限过小
4.ftp服务用户管理
vim /etc/vsftpd/vsftpd.conf
匿名用户(直接lftp登陆是匿名,后面接-u 用户名可实名登陆)
anonymous_enable=YES | NO 匿名用户是否可以登陆
测试:当前为YES,可以匿名用户登录
修改成NO重启服务后,再次使用匿名用户登陆
本地用户(本地用户登陆是默认在用户的家目录)
local_enable=YES | NO 本地用户是否可以登陆
测试:当前为YES,本地用户可以登陆
更改为NO后,重启服务,再次使用本地用户进行登陆
write_enable=YES | NO ftp是否对登陆用户可写
测试:当前为YES,ftp服务对登陆用户可写
更改为NO后,重启服务,再次lftp登陆
匿名用户上传(用命令put,匿名用户上传是默认以ftp身份)
vim /etc/vsftpd/vsftpd.conf
更改配置文件
write_enable=YES 登陆用户可写
anon_upload_enable=YES 允许上传
产生报错553,553是本地权限过小,这里登陆所看到的是 /var/ftp/pub 所以更改其权限为777
再次重启服务尝试上传
777的满权限相对来说过于宽泛,安全性不高,所以尽可能减少权限但不影响功能。
首先lftp登陆后,查看刚刚上传的文件属性
刚刚上传的文件所有人ID为14,所有组ID为50,查看ID50对应的所有组是谁。
cat /etc/group | grep 50 查看/etc/group中50的相关信息
由此可见文件所有组是ftp,所以我们就可以限制其他的权限只放给文件所有者和所有组权限即可。
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
匿名用户下载(文件用get,下载目录用mirror)
文件是否只读,NO就可以下载,YES不能下载。参数没有可自行添加
anon_world_readable_only=NO | YES
当前是NO,所以可以下载
更改为YES后重启服务,将不能下载,再次登陆进行下载操作
下载多个文件用 get group
下载所有文件用 mget *
匿名用户创建目录
anon_mkdir_write_enable=YES | NO
当前为YES,匿名用户可创建目录
匿名用户的删除和重命名
没有参数可自行添加
anon_other_write_enable=YES
当前为YES,匿名用户可删除。(删除目录用rm -r)
匿名用户家目录修改
anon_root=/westos westos必须是一个真实存在的目录
在/westos/内创建文件file{1…5}
lftp匿名登陆后,ls可以看到file1-5说明家目录已被更改为/westos
匿名用户上传文件默认权限修改
anon_umask=xxx 改为022
测试:在不添加参数的情况下匿名用户上传文件并查看权限
添加参数anon_umask=022,重启生效后上传文件并查看权限
匿名用户登陆所使用身份的修改
chown_uploads=YES | NO (是否能改变匿名用户登陆)
chown_username=student(本地已存在的用户)
匿名用户登陆未修改时,上传的文件默认属于ftp
当添加参数生效后,匿名用户登陆身份已被修改,上传文件默认属于修改后的身份
最大上传效率(限速保证服务端正常工作)
anon_max_rate=102400 单位:字节 100k 设置限速100k
测试:
dd if=/dev/zero of=/mnt/bigfile bs=1M count=2000
从/dev/截取一个2G的文件放到/mnt/bigfile
分别在限速和不限速的时侯上传
不限速时:
上传限速时:
最大连接个数
max_clients=2
添加参数之前可以没有限制的登陆连接,添加参数2后最大连接俩个,第三个就无法连接
第一第二个用户可正常登陆,第三个无法连接
本地用户家目录修改
local_root=/westos
本地用户默认登陆在自己的家目录,现在更改到/westos 在/westos/创建文件westosfile登陆后ls查看
本地用户上传文件权限
local_umask=022 默认是022
修改成077后,再次用本地用户上传文件并查看权限
限制本地用户浏览根目录
chroot_local_user=YES 此参数要求去掉自己对家目录的写权限
chmod u-w /home/student
在修改之前,本地用户可以浏览根目录
修改参数并去掉本地用户家目录w写权限后
用户黑白名单(锁定用户家目录,是否可以切换根目录)
NO是黑名单,YES是白名单
chroot_local_user=NO | YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
例:当前为白名单设置,只有在文件/etc/vsftpd/chroot_list内记录的用户才可以切换根目录
白名单内只有student用户所以student用户可以切换根目录
而白名单内没有的用户westos无法切换根目录
限制本地用户登录ftp服务
vim /etc/vsftpd/ftpusers 永久用户黑名单
vim /etc/vsftpd/user_list 用户临时黑名单
例:在 /etc/vsftpd/ftpusers中添加student , 重启后使用student用户登陆ftp服务
而不在黑名单的westos用户则可以正常登陆ftpd服务
用户白名单设定
userlist_enable=YES
userlist_deny=NO
vim /etc/vsftpd/user_list
参数设定,此文件变成用户白名单,只有在名单中出现的用户才可以登陆ftp
例:在名单中添加student用,然后使用student用户登陆ftp服务
再次使用不在白名单的用户westos登陆
ftp服务的虚拟用户设定(对登陆用户的分别管理)
vim /etc/vsftpd/westosfile 编辑登陆用户所用的临时帐号身份.文件名任意
user1
123
user2
123
user3
123
编辑三个用户名称以及登陆密码
db_load -T -t hash -f /etc/vsftpd/westosfil /etc/vsftpd/westosfile.db
对编辑了临时身份帐号及密码的文件进行加密生成文件westos.db即加密成功
查看vsftpd.conf 认证时使用的是pam认证
pam_service_name=vsftpd 使用pam认证,并且认证文件为vsftpd
vim /etc/pam.d/westos 文件名任意
account required pam_userdb.so db=/etc/vsftpd/westosfile 从westosfile.db中认证帐号
auth required pam_userdb.so db=/etc/vsftpd/westosfile 从westosfile.db中认证密码
vim /etc/vsftpd/vsftpd.conf
pam_service_name=westos 把pam认证的文件改为westos
guest_enable=YES 允许游客登陆
虚拟帐号身份指定
默认使用虚拟用户时,登陆后在pub目录
guest_username=westos 修改参数后,登陆在为westos家目录
chmod u-w /home/westos
虚拟帐号家目录独立设定($USER当前用户)
env 查看当前系统的环境变量
vim /etc/vsftpd/vsftpd.conf
local_root=ftphome/$USER 建立家目录区分虚拟帐号
user_sub_token=$USER 让配置适用当前shell语法
mkdir /ftphome/user1/user1dir -p 分别建立虚拟用户家目录
mkdir /ftphome/user2/user2dir -p
虚拟帐号配置独立
chgrp ftp /ftphome -R 将虚拟用户身份都更改为ftp
ll /ftphome/user*
chmod 775 /ftphome/user1/user1dir
chmod 775 /ftphome/user2/user2dir
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconf
mkdir -p /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/user1
在此文件中设定配置文件中的所有参数,此文件的优先级高
例如:anon_upload_enable=YES 上传权限
测试:不编写user2
分别使用user1和user2登陆lftp上传文档,user1可以,user2不行