引言:FTP,file transfer protocol,文件传输协议。用于Windows与Linux系统,Linux系统间的文件传输。
1 文件传输方式
ASCII码传输:传输网页文件 binary二进制传输:传输可执行文件
2 FTP服务器的两种工作模式
FTP服务是基于C/S架构的,端口是TCP的20(数据传输),TCP的21(建立连接)
1)主动模式:客户端开启一个大于1024的随机端口n连接服务器的21号端口,并告知服务器自己的数据传输端口是n+1号端口,服务器使用20号端口连接客户端的n+1号端口进行数据传输。
2)被动模式:客户端开启一个大于1024的随机端口n连接服务器的21号端口,并告知服务器自己的数据传输端口是n+1号端口,服务器通过已经建立的连接告知客户端自己的数据传输端口为大于1024的随机端口m,客户端使用自己的数据端口n,连接服务器端的端口m进行数据传输。
3 配置FTP服务
1) 配置服务器端
第一步 安装软件 yum install vsftpd -y
第二步 启动服务 systemctl restart vsftpd
注:查看服务状态 #systemctl status vsftpd // -l参数,显示详情
设置开机自启 #systemctl enable vsftpd
查看端口状态 #lsof -i 21
2) 配置client端
第一步 安装软件 yum install ftp -y
第二步 使用匿名账户访问FTP服务器 ftp 服务器IP/服务器主机名
匿名账户: 账户名ftp ,密码 随便(随便输任何东西或者不输密码都行)
注1:匿名账户登录进去之后,是客户端在以服务器的账户在登录服务器,所登录的位置默认是服务器的/var/ftp目录下
注2:服务器主机名得能够解析才行
3) FTP里面的内置命令:
切换数据传输模式:ascii(使用ASCII模式传输);binary(使用二进制模式传输)
get 下载 put 上传
exit 退出 !命令 运行系统命令
delete 删除文件 rmdir 删除目录
mget 文件1 文件2 …… 批量下载
mput 文件1 文件2 …… 批量上传
注:匿名账户的默认权限仅限于下载文件
4 设置FTP匿名账户登录权限
4.1 设置匿名账户上传文件、建立目录权限
1)在服务器端
第一步:编辑vsftpd配置文件 vim /etc/vsftpd/vsftpd.conf
//vsftpd ——very safe ftpd 非常安全的FTPD
第二步:取消29和33行注释,29 允许匿名账户上传文件 ,33 允许匿名账户创建目录
29 anon_ upload_enable=YES
33 anon_mkdir_write_enable=YES
第三步:修改 /var/ftp/pub 目录的属主和属组 #chown -R ftp.ftp /var/ftp/pub
第四步:重启ftp服务 #systemctl restart vsftpd
2)在客户端测试。匿名账户登录的默认位置是 /var/ftp,/var/ftp/pub,也就是服务器与客户端通过该目录进行通信。改完之后,在/var/ftp下只能下载,/var/ftp/pub下能够下载、上传、创建目录
注意:客户端在一定时间后会与服务器断开连接,这时候重新登录即可。
4.2 设置匿名账户删除目录权限(是在4.1的基础上做的)
1)在服务器端
第一步:编辑配置文件 vim /etc/vsftpd/vsftpd.conf
第二步:添加 anon_other_write_enable=YES
第三步:重启服务 systemctl restart vsftpd
2)在客户端测试。delete文件或rmdir 目录 都得在pub下才能进行。
4.3 vsftpd配置文件解读(了解)
#12 开启匿名访问 #16 允许本地的实体账户登录
#19 允许实体账户具有写权限 #23创建文件的权限为644(实体账户)
#29 允许匿名账户上传文件(不能上传目录)#33匿名创建目录的权限
#37 记录访问的开启 #40 开启日志记录功能
#43 开启20号端口的数据传输 #48/49改变上传文件的属主
#53 日志所在的路径及文件名 #57 日志记录时是否采用标准格式
#60 会话连接超时600s #63 数据传输超时120s
#82 上传数据传输模式 #90 不允许匿名用户的邮箱地址作为其密码
#92 记录文件的邮箱地址 #100 只让其在默认登录的位置活动
#101 开启其列表功能 #103 列表的存放位置及路径
#114 拒绝监听(ipv4) #123 ipv6监听 能帮助ipv4
#125 用户认证 #126 只要在列表中的用户,都不能登录ftp
#127 采用tcp封装
5 使用实体账户登录FTP
1)在服务器端
创建实体账户 useradd aa
设置登录密码 passwd aa
2)在客户端测试
ftp 服务器IP/主机名
账户名 aa
账户密码 账户aa对应的密码
注:实体账户登录到服务器的默认位置为实体账户对应的家目录 /home/某账户,比如/home/aa
3)实体账户的默认权限为: 上传 下载 删除文件 创建/删除目录。用aa账户登录的话,这些操作都只能在/home/aa下进行
6 禁止账户登录
1)通过 /etc/vsftpd/user_list 文件和配置文件来控制用户登录(不推荐)
如果配置文件中 userlist_enable=NO,则此时user_list文件失效,即列表内与列表外用户均可登录;
如果配置文件中 userlist_enable=YES,userlist_deny=NO,此时user_list中的用户只允许列表内的用户登录;
如果配置文件中 userlist_enable=YES,userlist_deny=YES,此时user_list中的用户禁止登录。
2)将不允许登录的实体用户名写入至 /etc/vsftpd/ftpusers 文件即可
例:直接在文件后面添加用户名 aa
注:安全起见,一般都是不允许root登录的
7 实现对本地实体账户进行chroot
chroot 是更改用户的根目录,实体账户的根目录就是实际根目录,而匿名账户的根被chroot了,所以匿名账户的根就是/var/hup。不被chroot是指不会修改用户主目录位置
对实体账户实现chroot
1)在服务器端
第一步:编辑配置文件 vim /etc/vsftpd/vstpd.conf ,去掉101,102,104行的注释。
101 对本地实体账户进行chroot
102 使用chroot_list文件控制被chroot 的账户
104 设定chroot_list 文件所在位置
第二步:将不被chroot的本地实体用户写入至 /etc/vsftpd/ chroot_list文件中,如果文件不存在,则创建该文件
第三步:重启服务 systemctl restart vsftpd
2)在客户端测试
如果被chroot的账户无法登录服务器,服务器报错为500,则需要在服务器端编辑配置文件 vim /etc/vsftpd/vstpd.conf 。在最后添加 allow_writeable_chroot=YES。然后重启服务即可。
8 使用虚拟账户登录
实体账户登录有安全隐患,从而建立虚拟账户,虚拟账户是服务器端没有的账户。实体账户与虚拟账户建立映射关系后,所有实体账户就都不能登录了。
1)配置服务器端
第一步 创建虚拟账户文件 vim /root/f.txt ,文件内容如下
虚拟账户名 如 test
虚拟账户对应密码 123
第二步 通过虚拟账户文件生成虚拟账户验证使用的数据库文件
db_load -T -t hash -f 虚拟账户文件 虚拟账户数据文件
例:db_load -T -t hash -f /root/f.txt /etc/vsftpd/xuni.db
// /etc/vsftpd/xuni.db是所生成的数据库,f.txt与xuni.db放在哪里都行
注:-T 通过文本文件生成数据库文件 ; -t指定加密算法(hash算法)
-f指定账户文本文件
第三步 生成虚拟账户验证文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
//认证之前将原有的文件进行备份, .bak 是备份后缀
cp /usr/share/doc/vsftpd-*/EXAMPLE/VIRTUAL_USERS/vsftpd.pam /etc/pam.d/vsftpd//通过PAM验证虚拟账户,将ftp虚拟账户的相关模板文件复制到认证文件中进行认证,copy后的文件只能放在/etc/pam.d下
第四步 修改验证文件 vim /etc/pam.d/vsftpd,去掉验证模块的路径,修改验证虚拟账户使用的数据库
例:将原有的auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
改为 auth required pam_userdb.so db=/etc/vsftpd/xuni
account required pam_userdb.so db=/etc/vsftpd/xuni
//将虚拟用户的信息加入到认证文件中(即指定虚拟用户的数据库),在pam中的验证数据库不用加 .db 。db=/etc/vsftpd/xuni这个路径必须与第二步的一致
第五步 配置虚拟账户映射本地实体账户,这样的话,虚拟账户登录之后就会登录到本地实体账户家目录下
修改实体账户家目录权限 chmod -Rv 555 /home/aa
编辑配置文件 vim /etc/vsftpd/vstpd.conf
在配置文件末尾添加 guest_enable=YES
guest_username=aa
第六步 重启服务 systemctl restart vsftpd
2)客户端使用虚拟账户登录测试。ftp 服务器IP/服务器主机名 ,用户名是test,密码是123 。该虚拟账户只有下载权限。
转载请注明出处,谢谢!