ftp简介
FTP是文件传输协议(File Transfer Protocal)的简写,主要完成与远程计算机的文件传输。
FTP采用客户/服务器模式,客户机与服务器之间利用TCP建立连接,客户可以从服务器上下载文件,也可以把本地文件上传至服务器。
FTP服务器有匿名的和授权的两种。匿名的FTP服务器向公众开放,用户可以用“ftp”或“anonymous”为帐号,用电子邮箱地址为密码登录服务器;授权的FTP服务器必须用授权的账户名和密码才能登录服务器。通常匿名的用户权限较低,只能下载文件,不能上传文件。
客户机访问FTP服务器通常有两种方法:用FTP命令访问和用FTP客户端软件访问。
FTP模式:ftp主动模式(port):21(验证,握手),20(数据传输)
ftp被动模式(pasv):21(验证,握手),1024-65535(数据传输),一般的FTP服务器都采用此模式作为默认模式
ftp相关设置与操作
操作环境
主机一(客户端):server1—172.25.66.11
主机二(服务端):server2—172.25.66.12
两台主机必须在同一个网段,做实验时必须关闭selinux(两台主机都做)
vim /etc/sysconfig/selinux 改为 disable
之前本来就是disabled的哈u可以忽略这一步,要是之前是enforcing改为disabled之后必须要重启主机才能生效
具体操作
下载相关服务
一、在服务端server2中:
下载vsftpd服务
vsftpd:vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
1、yum install vsftpd
2、systemctl start vsftpd
systemctl enable vsftpd
3、firewalld-cmd --permanent --add-service=ftp ##使ftp服务通过防火墙
4、firewalld-cmd --reload ##重载火墙服务
二、在客户端server1中
1、yum install lftp
2、lftp 另一台主机ip
ls
配置
一、配置服务端server2中的vsftpd服务
相关操作:
1、配置文件/etc/vsftpd/vsftpd.conf
2、lftp ip ###匿名用户登录
3、lftp ip -u 用户 ####本地用户登陆
编辑配置文件:
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES|NO #匿名用户是否可以登陆
此时退出保存重启vsftpd后,匿名用户将不可以登陆
重新设置为YES既可登陆
本地用户
local_enable=YES|NO #本地用户是否可以登陆
ftp常见报错:
1、500:文件系统权限过大,此时应将所对应文件系统权限改小
2、553:文件系统权限过小
3、530:用户认证失败,即登录ftp时密码输入错误
4、550:系统不允许登录,即设置了权限!!
write_enable=YES|NO #ftp对登陆用户是否可写
此时本地用户将在登陆后无法写入
##匿名用户家目录修改
mkdir /ftpdir/dir(这两个目录名自定义)
anon_root=/ftpdir
匿名用户删除
anon_other_write_enable=YES
验证:
如果不能put(上传)文件,可以将 anon_upload_enable=YES设置为YES
###最大上传速率###
anon_max_rate=102400
我们可以截取一个100M大小的文件来用于测试
可以看到,速度维持在100K左右
###本地用户上传文件权限设置###
本地用户
local_umask=022
匿名用户
anon_umask=077
######限制本地用户浏览/目录######
没有限制之前:
本地用户是可以浏览/目录的
接下来我们做一个限制,限制本地用户访问根目录
vim /etc/vsftpd/vsftpd.conf
chroot_list_file=etc/vsftpd/chroot_list 需要编辑这个文件 (黑/白名单)
chroot_local_user=YES
chmod u-w /home/*
可以看到,本地用户已经无法浏览/目录
设置黑名单
chroot_local_user=NO
vim /etc/vsftpd/chroot_list
在里面写入需要添加到黑名单的用户名
设置白名单
chroot_local_user=YES
vim /etc/vsftpd/chroot_list
在里面写入需要添加到白名单的用户
systemctl restart vsftpd
限制本地用户登陆
黑名单
cd /etc/vsftpd/
ftpusers ###永久黑名单,优先级高
user_list ###临时黑名单,在一定情况下可转变成白名单
vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO #####将 user_list 转变为白名单
如果同一个用户同时在ftpusers 与 为白名单的user_list中,则这个用户不能登陆,因为ftpusers优先级高
lftp虚拟用户
建立lftp虚拟用户
1:编辑一个文件vim /etc/vsftpd/guest
写入三个用户及其密码(自定义)
用户名:ftpuser1
密码:123
ftpuser2
123
ftpuser3
123
哈希加密
db_load -T -t hash -f /etc/vsftpd/guest /etc/vsftpd/guest.db
2:vim /etc/pam.d/gd(自定义一个文件)
account required pam_userdb.so db=/etc/vsftpd/guest
auth required pam_userdb.so db=/etc/vsftpd/guest
3:编辑vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=gd
guest_username=ftp
guest_enable=YES
重启服务后测试用虚拟用户登陆vsftpd
虚拟用户家目录独立设定
1:vim /etc/vsftpd/vsftpd.conf
lcal_root=/ftpguo/ $ USER
user_sub_token= $USER $USER变量只能用在shell里面,不能用在配置
文件里面,需要用这个设置将 $USER引入配置文件
2:mkdir /ftpguo
chgrp ftp /ftpguo
chmod g+s /ftpguo
mkdir /ftpguo/ftpuser{1…3}
touch /ftpguo/ftpuser1/file1
touch /ftpguo/ftpuser2/file2
touch /ftpguo/ftpuser3/file3
3:测试:
lftp 172.25.66.12 -u ftpuser1
可以看到,我们看到的内容时ftpuser1目录下的内容,所以现在虚拟用户ftpuser1的家目录为ftpuser1
指定虚拟用户上传文件
1:vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconf
2:mkdir /etc/vsftpd/userconf
3:注释配置文件中属于匿名文件的
cd /ftpguo
mkdir ftpuser{1…3}/pub
vim /etc/vsftpd/userconf/ftpuser1
4:chgrp ftp /ftpguo/ftpuser{1…3}/pub
chmod 775 /ftpguo/ftpuser{1…3}/pub
lftp 172.25.66.12 -u ftpuser1
lftp 172.25.66.12 -u ftpuser2
由上面的测试可以看出,只有指定的虚拟用户才能写入,没有指定的将会出现550错误