FTP连接及传输模式
控制连接:TCP21,用于发送FTP命令信息
数据连接:TCP 20,用于上传、下载数据
数据连接的建立类型
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内某个端口被动等待客户端连接
FTP传输模式
文本模式:ASCLL模式,以文本序列传输数据
二进制传输:Binary模式,以二进制序列传输数据
FTP用户类型
匿名用户:anonymous或ftp
本地用户:
账号名称、密码等信息保存在passwd、shadow文件中
虚拟用户:
使用独立的账号/密码数据文件
常见的FTP服务器程序
IIS、Serv-U
wu-ftpd、Proftpd
vsftpd
常用的匿名FTP配置
anonymous_enable=YES:启用匿名访问
anon_umask=022:匿名用户所上传文件的权限掩码
anon_root=/var/ftp:匿名用户所在的FTP目录
anon_upload_enable=YES:允许上传文件
anon_mkdir_write_enable=YES:允许创建目录
anon_other_write_enable=YES:开放其他写入权
anon_max_rate=0:限制最大传输速率(字节/秒)
本地常用的FTP配置
local_enable=YES:是否启用本地系统用户
local_umask=022 :本地用户所上传文件的权限掩码
local_root=/var/ftp : 设置本地用户的FTP根目录
chroot_local_user=YES :是否将用户禁锢在主目录
local_max_rate=0 :限制最大传输速率(字节/秒)
使用FTP
安装vsftpd
yum -y install vsftpd
启动vsftpd服务,设置为开机自启动
systemctl start vsftpd
systemctl enable vsftpd
使用命令行下载,上传ftp服务
1.下载ftp服务
yum -y install ftp
2.连接第一台虚拟机,参考如图操作
1.dir :用于列出FTP服务器上的目录内容
2.get 文件名 下载:可以把连接的虚拟机的指定文件下载到,当前所在位置中
ftp> get kgc.txt
local: kgc.txt remote: kgc.txt
227 Entering Passive Mode (192,168,27,131,27,218).
150 Opening BINARY mode data connection for kgc.txt (16 bytes).
226 Transfer complete.
16 bytes received in 3.2e-05 secs (500.00 Kbytes/sec)
3.quit : 退出
4.上传 : put
put anaconda-ks.cfg
1.失败原因,匿名用户只能读,不能写
匿名上传
1.在第一台虚拟机中编辑 /etc/vsftpd/vsftpd.conf配置文件,在12行添加以下信息(方便管理)
anonymous_enable=YES
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
2.重启vsftpd服务
3.更改文件或目录的所有者为ftp(为了让客户端上传)
[root@bogon ~]# ls -l /var/ftp/
总用量 0
drwxr-xr-x 2 root root 21 6月 13 08:47 pub
[root@bogon ~]# chown ftp /var/ftp/pub/
[root@bogon ~]# ls -l /var/ftp/
4.切换到第二台机器,退出(quit) 重新登录
5.切换到pub目录,put上传
cd pub
put anaconda-ks.cfg
本地上传
1.在服务端使用vi编辑vsftpd.conf配置文件为如图
2.在客户端连接ftp ,登录服务端创建的账号
3.测试上传下载是否可以(下载的文件都在登录的普通用户的家目录,即 /home/普通的用户 )
4.权限控制 /etc/vsftpd/user_list![](https://img-blog.csdnimg.cn/direct/aa0a8a6c888240058e2759317297474a.png)
1.如图信息代表黑名单,即在尾部添加用户,即禁用用户,服务端就不可在登录
2.相反即代表白名单
虚拟用户
1.编辑并创建文件
vi /etc/vsftpd/vusers.list
2.添加如图虚拟用户
[root@bogon vsftpd]# cat /etc/vsftpd/vusers.list
lisi
123
wangwu
123
zhanglong
123
zhaohu
123
jingsang
123
3.在/etc/vsftpd/目录下使用hash算法加密
db_load -T -t hash -f vusers.list vusers.db
4.设置权限(将 /etc/vsftpd/
目录下所有以 vusers.
开头的文件的权限更改为只有文件所有者可以读和写,而组和其他用户都没有任何权限)
chmod 600 /etc/vsftpd/vusers.*
1.第一个数字(6
)代表文件所有者的权限。6
是 4 + 2
的和,表示文件所有者有读(4
)和写(2
)权限,但没有执行(1
)权限。
2.第二个数字(0
)代表与文件关联的组的权限。0
表示该组的成员没有任何权限(读、写或执行)。
3.第三个数字(0
)代表其他所有用户的权限。同样,0
表示其他用户没有任何权限(读、写或执行)
5.测试
1.创建用户(创建一个名为 kc65
的新用户,他们的家目录是 /var/ftproot
,并且他们不能直接登录到系统(因为他们的shell是 /sbin/nologin
)。这样的设置通常用于为FTP服务或其他需要特定家目录但不需要直接shell访问的服务创建用户)
useradd -d /var/ftproot -s /sbin/nologin kc65
2.设置权限
chmod 755 /var/ftproot/
7
是 4 + 2 + 1
(读、写、执行),5
是 4 + 1
(读、执行)
3.添加pam认证
[root@bogon vsftpd]# cat /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
4.修改配置文件vsftpd.conf,根据如图信息,在尾部修改为如图
#pam_service_name=vsftpd
pam_service_name=vsftpd.vu
guest_enable=yes
guest_username=kc65
userlist_enable=YES
tcp_wrappers=YES
5.重启服务,在服务端连接登录测试
为不同的虚拟账户建立独立的配置文件
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
添加:
user_config_dir=/etc/vsftpd/vusers_dir
[root@localhost vusers_dir]# vi john
添加:
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
[root@localhost vusers_dir]# touch mike
[root@localhost vusers_dir]# systemctl restart vsftpd