FTP文件传输协议:
ftp为系统提供了通过网络于远程服务器进行传输的简单方法,分为主动和被动两种;
vsftpd:是一种安全型的服务器其包。被动传输接口是随机的(如果要查看vsftpd的接口,输入netstaat -antlupe | grep ftp)
默认配置文件让anonymous(匿名的)用户只能下载位于chroot(改变根目录的意思)目录下的文件;
/var/ftp:远程FTP客户端能以用户匿名的或者ftp身份链接服务器,无需密码;
匿名用户形式:在默认安装的情况下,系统只提供匿名访问;
本地用户形式:以/etc/passwd中的用户名为认证方式;
虚拟用户形式:支持将用户名和口令保存在数据库文件或者数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,增加系统的安全性。
关于vsftp里面的一些报错说明:530认证失败 550程序不允许 553服务器文件系统不允许 500权限过大
在我们安装服务软件时确保我们有yum源!
yum install -y vsftpd ##服务端安装的软件
systemctl start vsftpd ##服务端启动服务
systemctl start firewald ##启动服务端的防火墙
firewall-cmd --list-all ##查看在防火墙里面有没有开启FTP服务(如果没有该服务通过上面添加服务命令进行添加)
添加方法:firewall-cmd --permanent --add-service=ftp
firewall-cmd --get-service ##通过该命令可以查看防火墙里面还可以添加其他服务;
firewall-cmd --reload ##添加完成以后需要重新启动确保该服务可以运
systemctl enable vsftpd ##服务端设置开机自启动
为了后面的测试,我们需要在客户端安装服务: yum install -y vsftpd lftp
在客户端输入:lftp 172.25.254.xxx 连接服务端进行数据传输
{如果不能成功的连接,查看/etc/sysconfig/selinux文件,将SELINUX=enforcing 改成SELINUX=disabled;然后reboot重新启动服务端,以确保服务能正常运行;在检查服务端的防火墙是否添加ftp服务成功;}
默认发布目录为/var/ftp/pub
配置文件设置用户权限:/etc/vsftpd/vsftpd.conf
1.是否允许匿名用户进行登陆
vim /etc/vsftpd/vsftpd.conf ##对配置文件进行修改
local_enable=YES ##允许匿名用户进行登陆
local_enable=No ##允许匿名用户进行登陆
保存退出;重新启动服务:systemctl restart vsftpd
2.匿名用户上传文件权限
anon_upload_enable=YES ###允许匿名用户上传文件
anon_upload_enable=NO ###禁止匿名用户上传文件
在测试之前修改pub目录的属组: chgrp ftp /var/ftp/pub
修改pub目录的权限775:chmod 775 /var/ftp/pub
(如果不能上传文件报错553可能是vaftpd.conf文件里面之前实验有些地方没有还原导致相互影响,还有就是selinux状态为关闭状态;)
3.匿名用户下载权限设置
anon_world_readable_only=NO ##允许匿名用户下载文件
anon_world_readable_only=YES ###禁止匿名用户下载文件
测试:
(如果出现550报错,vsftpd.con文件命令是YES而非NO)
4.匿名用户新建目录权限设置
anon_mkdir_write_enable=YES ##允许用户新建目录
测试:
5. 匿名用户最大上传速度
anon_max_rate=100 ####允许匿名用户上传文件最大速度100k/s
注意(上传文件时出现553报错也可能时上传文件名与pub目录下文件重名)
6.匿名用户删除文件权限
anon_other_write_enable=YES ####允许匿名用户重命名和删除文件
测试:
(有时候重名命会出现550报错是因为重新名命的名字于目录下文件名重复)
7.服务端允许登陆的最大人数
max_clients=3
8.修改文件默认权限
local_umask=022
9.限制用户最大权限在自己家目录内
chroot_local_user=YES
10. 允许用户以student的身份进行登陆
chown_uploads=YES ##允许用户改变身份的命令
chown_username=student ##用户以student身份进行登陆
11.是否允许本地用户进行登陆
vim /etc/vsftpd/vsftpd.conf ##对配置文件进行编辑
local_enable=YES ##允许本地用户进行登陆
local_enable=No ##不允许本地用户进行登陆
保存退出;重新启动服务:systemctl restart vsftpd
12.本地用户的读写权限
write_enable=YES ##允许本地用户读写权限
write_enable=NO ##不允许本地用户读写权限
保存退出;重新启动服务:systemctl restart vsftpd
13.匿名用户以及本地用户家目录设置
anon_root=/mnt ##匿名用户登陆的默认目录
测试:
(注意每次实验完毕客户端都需要退出lftp,否则修改设置不能读取;服务端设置完毕需要重新启动服务,否则会读取不到设置)
local_root=/mnt ##本地用户登陆的默认目录
13.本地用户的黑白名单设置
chroot_local_user=YES ##YES是白名单;NO是黑名单;
chroot_list_enable=YES ##YES启用限制名单
chroot_list_file=/etc/vsftpd/chroot_list ##指定限制名单的存放路径
14.黑白名单
在/etc/vsftpd/目录底下的ftpuser, user_list都是黑名单;第一个是永久黑名单,第二个是临时黑名单;
当第二个临时黑名单存在时,可以在/etc/vsftpd/vsftpd.conf 文件里面添加userlist_enable=YES 表示启动user_list名单,否则不会启用名单;
userlist_deny=YES ###表示禁止某用户查看根目录
15.虚拟用户身份登陆
a.在系统文件创建虚拟用户
vim /etc/vsftpd/users 在文件里面添加用户及其验证密码
hello(用户)
123(密码)
b.对虚拟用户的文件名单进行加密
cd /etc/vsftpd ##切换到该目录下
db_load -T -t hash -f users users.db ##对文件进行加密生成的文件放置在/etc/vsftpd/users.db里面
-T ##新建文件 -t ##加密格式
chmod 600 user.db ##该变user.db的权限,不允许其他人对该文件读写执行
cp -a user.db /etc/? ###
c.增加一个系统用户vuser ,使用它来对应所有虚拟用户,虚拟用户使用系统用户来访问ftp服务器
d.建立ftp验证文件
在/etc/pam.d/usercheck里面添加需要验证用户及其密码信息:
account required pam_userdb.so db=/etc/vsftpd/users ##用户认证
auth required pam_userdb.so db=/etc/vsftpd/users ##密码认证
d. 修改配置文件虚拟用户登陆
pam_service_name=usercheck #pam读取虚拟用户文件usercheck
guest_enable=YES ##开启虚拟用户登陆
guest_username= student ##这里用来映射虚拟用户,默认值为ftp。
virual_use_local_privs=YES/NO
#当该参数**时,虚拟用户使用与本地用户相同权限;
#当该参数关闭时,虚拟用户使用与匿名用户相同的权限。默认是关闭状态。
16.在系统中虚拟用户各自使用的权限各自不相同,而且家目录也不相同
先在/var/ftpddir创建两个用户家目录;在家目录创建一个文件,方便查看
mkdir /var/ftpddir/user1
mkdir /var/ftpddir/user2 ##创建两个用户的家目录
touch /var/ftpddir/user*/user*dir ###在家目录地下创建文件方便测试
在配置文件/etc/vsftpd/vsftpd.conf添加指定用户家目录的命令
local_root=/var/ftpdir/$USER ##指定用户的各自家目录($符号在文件中不能识别)
user_sub_token=$USER ##告诉文件识别用户的多种身份
创建每个用户的系统配置文件并且进行权限配置:
在/etc/vsftpd/vsftpd.conf系统文件中设定用户的配置文件路径
user_config_dir=/etc/vsftpd/user_conf ###用户权限文件存放位置
chmod 775 /var/ftpdir/user*/user*dir 改变文件的权限
对用户的配置文件/etc/vsftpd/user_conf/user*编辑进行测试