连接真机yum源
ftp知识点:
ftp(文件传输协议)是internet上常用的最老的网络协议之一,ftp(file transfer protocol)是TCP/IP协议组中的协议之一,它为系统提供了通过网络与远程服务器进行传输的简单方法,在red hat entreprise liunx 中,ftp服务器包在vsftpd,它在very secure file transferprotocol damon服务器名称也叫做vsftpd。默认配置文件让匿名用户只能下载位于chroot目录下的内容。/var/ftp/。这意味着远程ftp客户端能以匿名用户或ftp身份连接到服务器(无需密码),并从ftp服务器上的/var/ftp/目录下载文件(其本地ftp用户可以读取这些文件)。
ftp协议组成:
ftp服务器、ftp客户端。
ftp服务器用来存储文件,用户使用ftp客户端通过ftp协议访问位于ftp服务器上的资源,在开发网站时,通常利用ftp协议把网页或程序传到web服务器上。ftp传输效率非常高,在网络传输大的文件时,一般也采用该协议。
默认情况下。ftp协议使用tcp端口中的20或21端口,20端口传输数据,21端口传输控制信息。
ftp工作方式
standard(PORT)主动方式,客户端需要接收数据时在这个通道上发送port命令,发送到ftp服务器上。访问端口为21端口,数据传输端口为20端口。
passive(PASV)被动方式,此方式发送的是pasv命令。访问端口为21端口,随即开启大于1024的端口。
安装ftp包
vsftpd:ftp服务的软件
lftp:测试ftp,相当于浏览ftp
yum istall vsftpd.x86_64 lftp.x86_64 -y
启动ftp服务
systemctl start vsftpd
systemctl enable vsftpd
火墙开启ftp服务
firewall-config ##开启火墙图形界面
runtime:当前
permanent:永久
设置完成后:Options—>reload firewalld
firewall-cmd --list-all
在另外一台主机上测试结果:
ftp默认发布目录:/var/ftp,在访问时会访问到这个目录下。
ftp默认配置文件:/etc/vsftpd/vsftpd.conf(主配置文件),主配置目录:/etc/vsftpd
访问方式:被动方式
服务访问端口:21端口,数据传输时随机开启的端口(大于1024的端口),这种方式安全性高
ftp主配置文件
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd.service
anonymous_enable=YES | 匿名用户可以登陆 |
local_enable=YES | 本地用户可以登陆 |
write_enable=YES | 本地用户可写 |
anon_upload_enable=YES | 允许匿名用户上传 |
anon_world_readable_only=YES | 不允许匿名用户下载 |
anon_mkdir_write_enable=YES | 匿名用户建立目录 |
anon_other_write_enable=YES | 匿名用户删除目录 |
anon_umask=022 | 匿名用户上传文件默认权限修改为755 |
anon_root=/westos | 匿名用户家目录修改 |
anon_max_rate=102400 | 限制匿名用户最大上传速率 |
max_clients=2 | 限制登陆用户为2个 |
local_umask=022 | 本地用户上传文件权限 |
local_root=/westos | 让所有本地用户登录时都会进入/westos |
chroot_local_user=YES | 所有用户被锁定到自己家目录中 |
chroot_list_enable=YES | 在列表的用户是可以锁定到自己的家目录里 |
chroot_list_file=/etc/vsftpd/chroot_list | 相当于一个黑名单,但是默认这个目录是没有的 |
userlist_deny=NO | 临时黑名单改为白名单 |
pam_service_name=westo | pam文件名称 |
userlist_enable=YES | |
guest_enable=YES | 启用虚拟用户 |
guest_username=ftp | 虚拟帐号身份指定 |
报错id | 解析 |
---|---|
530 | 用户认证失败 |
500 | 文件系统权限过大 |
550 | 服务功能未开放 |
553 | 本地文件系统权限过小 |
匿名用户登陆
允许匿名用户登陆:
不允许匿名用户登陆:
改错:
本地用户登陆
在做这个实验之前更改文件,selinux关闭:
vim /etc/sysconfig/selinux
每次更改这个文件时,都得重启才能生效:
reboot
允许本地用户登陆:
不允许本地用户登陆:
530报错,用户认证失败,打开本地用户登陆就可以了。
改错:
本地用户可写
本地用户可写:
本地用户不可写:
550报错,服务功能未开放,打开本地用户可写即可。
改错;
匿名用户上传
匿名用户不能上传:
550报错,服务功能未开放,开启允许匿名用户登陆即可。
改错:
553报错,本地系统权限过小。
改错:
chmod 775 /var/ftp/pub/ ##修改目录权限
chgrp ftp /var/ftp/pub/ ##设定上传目录对ftp用户可写
匿名用户可以上传:
匿名用户下载
允许匿名用户下载:
anon_world_readable_only=NO
不允许匿名用户下载:
anon_world_readable_only=YES
550报错,服务功能未开放。
匿名用户建立目录
匿名用户不能建立目录:
550报错,服务功能未开放。
允许匿名用户建立目录:
匿名用户删除目录
允许匿名用户删除目录:
不允许匿名用户删除目录:
550报错,服务功能未开放。
修改上传文件权限
没有修改前:
权限为600
修改后:
权限为622
匿名用户家目录修改
匿名用户默认家目录为/var/ftp/pub/,现在建立一个目录/var/ftp/westos,将默认家目录修改为/var/ftp/westos/
限制匿名上传速率
anon_max_rate=102400 ##限制匿名用户的上传速率最快为100k/s
限制登陆用户为2个
保证服务器的性能不会崩掉。
max_clients=2 ##限制匿名用户登录数量为2个,超过两个不能登录
本地用户的设定
在做实验前先建立文件,可以看到实验效果:
touch /home/student/studentfile
让所有用户登录都进入到/westos下
local_root=/westos
本地用户能浏览服务器的根目录,不安全
把用户锁到家目录里:
chmod u-w /home/* ##把/home/的所有子目录的权限写权限去掉
ls -ld /home/*
实验结果会看到在本地用户进入/目录下看不到其它文件:
本地用户黑名单建立(本地用户是否可以浏览/目录)
创建本地用户
useradd lee
passwd lee
开启黑名单服务设置
chroot_local_user=NO ##本地用户不被锁定在自己的家目录下
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
创建黑名单
touch /etc/vsftpd/chroot_list ##创建黑名单
Vim /etc/vsftpd/chroot_list ##编写黑名单lee
实验结果显示:本地用户lee登录不了
chmod u-w /home/lee
实验结果显示:本地用户可以登录,但是/目录下显示不了文件
用户白名单建立(本地用户是否可以浏览/目录)
chroot_local_user=YES ##本地用户被锁定在自己的家目录下
chroot_list_enable=YES ##在列表中的用户是可以锁定在自己的家目录下
chroot_list_file=/etc/vsftpd/chroot_list
所以在/etc/vsftpd/chroot_list文件里的用户lee可以看到/目录下的文件。
限制本地用户登陆
cd /etc/vsftpd/
/etc/vsftpd/下的ftpusers为永久黑名单,无论是什么用户只要在文件里出现都不允许登录;user_list为临时黑名单。
vim /etc/vsftpd/ftpusers ##用户黑名单
vim /etc/vsftpd/user_list ##用户临时黑名单
这两文件都是即改即生效。
把临时黑名单改为白名单:参数设定,此文件变成用户白名单,只在白名单中出现的用户可以登陆ftp。
userlist_deny=NO ##临时黑名单改为白名单
实验结果显示,在/etc/vsftpd/user_list名单里的用户才可以登录。
虚拟用认证设定
虚拟用户:只有登录ftp的功能,没有其它功能。
**3A机制:**认证(authentication),验证用户的身份与可使用的网路服务;授权(authorization),依据验证结果,开放网络服务给用户;记账(accounting),记录用户对各种网络服务的用量,并提供给计费系统。
pam程序负责验证用户的名称和密码
pam认证
1.认证文件:
创建文件编写用户的账号和密码,
在这个文件中所有字符都算账号名称和密码,空格也算,所以尽量少用空格,否则很难排错。
vim /etc/vsftpd/westos ##文件名任意,此文件存放着用户及密码
2.对认证文件进行加密:
认证文件对于ftp是不能读的,所以需要进行加密。
加密工具:db_load
db_load -T -t hash -f /etc/vsdtpd/westos /etc/vsftpd/westos.db
【T】:转化 【-t】:转化的类型 【-f】:指定加密的文件【vuserlist.db】:加密过后的文件,pam访问的文件
3.生成认证策略:
客户给一个账号和密码,认证策略就是通过pam程序,访问认证文件,判断是否可以登录。
vim /etc/pam.d/ftpuser
account required pam_userdb.so db=/etc/vsftbd/vuserlist
auth required pam-userdb.so db=/etc/vsftbd/vuserlist
account:账号 auth:密码
required:通过认证就继续,没通过认证就直接终止;
pam_userdb.so:做验证的程序、插件;
db=/etc/vsftpd/vuserlist:访问的文件
4.开启pam认证:
pam_service_name=ftpuser ##pam文件
guest_enable=YES ##启用虚拟用户
guest_username=ftp ##虚拟账号身份指定,系统里存在的
测试:建立的虚拟用户身份均可登录。
虚拟用户的家目录设定及授权
指定所有人的家目录
mkdir /var/ftpuserdir/{haha,hehe,xixi} -p
mkdir /var/ftpuserdir/{haha,hehe,xixi}/pub -p
touch /var/ftpuserdir/haha/hahafile
touch /var/ftpuserdir/hehe/hehefile
touch /var/ftpuserdir/xixi/xixifile
固定用户家目录
local_root=/var/ftpuserdir/$USER ##本地用户家目录
user_sub_token=$USER ##告诉配置文件,$USER延用于所用的配置环境所用的$USER,$USER是shell里的变量
测试:每位用户都可以看到所建立的文件。
虚拟用户上传文件
553报错,权限过小。
chgrp ftp /var/ftpuserdir/ -R
chmod 775 /var/ftpuserdir/{haha,hehe,xixi}/pub
user_config_dir=/etc/vsftpd/user_config ##此文件是自定义的文件名称,需要自己建立
30 #anon_upload_enable=YES
31 #anon_world_readable_only=NO
32 #anon_umask=022
33 #anon_max_rate=102400
34 #max_clients=2
35 #anon_root=/westos
40 #anon_mkdir_write_enable=YES
41 #anon_other_write_enable=YES
没有指定授权文件之前,注销以上权限,所有用户均不可上传以及删除文件.
mkdir -p /etc/vsftpd/user_config ##建立授权文件
vim /etc/vsftpd/user_config/hehe ##只有hehe这位用户可以上传以及删除文件
anon_upload_enable=YES ##允许匿名用户上传文件
anon_other_write_enable=YES ##允许匿名用户删除文件
systemctl restart vsftpd.service