1、ftp的定义
ftp:// :文件传输协议
2、ftp协议提供的软件
在rhel7中:vsftpd
3、部署ftp服务
| 命令 | 功能 |
|---|---|
| vim /etc/yum.repos.d/rhel_dvd.repo | 检查yum源是否设置好 |
| yum search ftp | 搜索ftp相关信息 |
| yum install vsftpd.x86_64 lftp.x86_64 | 下载这两款软件(vsftpd为服务端软件,lftp为客户端软件) |
| systemctl start vsftpd | 启动vsftpd服务 |
| firewall-cmd --list-all | 显示防火墙信息 |
| firewall-cmd --add-service=ftp --permanent(永久) | 添加ftp服务至防火墙 |
| firewall-cmd --reload | 重新加载 |
| firewall-cmd --list-all | 显示防火墙信息(查看是否添加ftp服务) |
| lftp 172.25.254.110(服务端ip) | 在客户端连接服务端 |
| 打开浏览器输入ftp://172.25.254.110(服务端ip) | 可访问到服务端的文件 |
| touch /var/ftp/file | 建立一个测试文件 |
| lftp 172.25.254.110(服务端ip) | 在客户端连接服务端 |
| ls | 查看是否有file测试文件 |
| getenforce | 查看selinux状态是否为Disabled |
| vim /etc/sysconfig/selinux | 若不是则修改配置文件,更改selinux状态为Disabled |
| reboot | 更改后重启生效(内核文件需要重启,不能只读取配置文件) |
4、ftp服务的基本信息
| 名称 | 信息 |
|---|---|
| 软件安装包 | vsftpd |
| 默认的发布目录 | /var/ftp |
| 协议接口 | 21/tcp |
| 服务配置文件 | /etc/vsftpd/vsftpd.conf |
报错id的解析:
| ID | 意义 |
|---|---|
| 500 | 文件系统权限过大 |
| 530 | 用户认证失败 |
| 550 | 服务本身功能未开放(需在配置文件中添加功能) |
| 553 | 本地文件系统权限过小(修改该目录的权限和所属组,所属组为ftp,家目录权限不可修改) |
5、服务配置文件设置
(1)基本权限设定
| 命令 | 功能 |
|---|---|
| vim /etc/vsftpd/vsftpd.conf | 修改配置文件 |
| anonymous_enable=YES/NO | 匿名用户是否可以登陆 |
| local_enable=YES/NO | 本地用户是否可以登陆 |
| write_enable=YES/NO | 本地用户是否可以写入 |
| local_umask=xxx | 本地用户写入的文件umask |
(2)匿名用户权限设定
| 命令 | 功能 |
|---|---|
| anon_root=/dir | 设定匿名用户家目录为/dir,家目录权限不可被修改 |
| anon_umask=xxx | 设定匿名用户上传文件时的umask |
| anon_mkdir_write_enable=YES/NO | 匿名用户是否可以建立目录 |
| anon_world_readable_only=YES/NO | 匿名用户是否只可以下载有可读权限的文件 |
| anon_other_write_enable=YES/NO | 匿名用户是否可以删除 |
| chown_uploads=YES/NO | 启用此项,匿名上传的用户转换用户身份可以执行 |
| chown_username=student | 设定匿名用户登陆时以student用户身份运行 |
| chown_upload_mode=0644 | 设定以该身份建立文件时权限为0644 |
| anon_max_rate=204800 | 设定限速为200k/s |
| max_clients=2 | 设定最大连接用户数 |
(3)本地用户基本权限及是否被锁家目录设定
| 命令 | 功能 |
|---|---|
| local_enable=YES/NO | 本地用户是否可以登陆 |
| write_enable=YES/NO | 本地用户是否可以写入 |
| local_root=/directory | 指定本地用户的家目录(所有本地用户将都以此目录为家目录) |
| local_umask=xxx | 设定本地用户上传文件时的umask值 |
| chroot_local_user=YES/NO | 本地用户是否被锁在家目录中,不可访问其他目录,YES为是,NO为否 |
| chmod u-w /home/* | 更改所有用户家目录的权限 |
| chroot_local_user=YES/NO | 该条为是或者否决定了名单是黑名单还是白名单 |
| chroot_list_enable=YES/NO | 是否开启名单 |
| chroot_list_file=/etc/vsftpd/chroot_list | 名单上的用户为/etc/vsftpd/chroot_list文件中的用户 |
| vim /etc/vsftpd/chroot_list | 该名单默认没有,vim新建一个为此名的名单 |
| 123 | 写入123,意味123用户在名单中,若本地用户被锁在家目录,则该名单为白名单,仅123用户可以不被锁,若本地用户没有被锁在家目录,则该名单为黑名单,仅123用户被锁在家目录 |
(4)本地用户是否能登陆ftp设定
| 命令 | 功能 |
|---|---|
| vim /etc/vsftpd/ftpusers | 用户永久黑名单(此名单优先级大于临时黑名单,该改动即改即用,无需重读) |
| vim /etc/vsftpd/user_list | 用户临时黑名单(可在特定时变为白名单,该改动即改即用,无需重读) |
| vim /etc/vsftpd/vsftpd.conf | 修改配置文件 |
| userlist_deny=NO | 当该命令为NO时,用户临时黑名单变为白名单 |
| systemctl restart vsftpd | 修改配置文件后,需重读配置文件才能生效 |
(5)虚拟用户登陆ftp设定(不真实存在的用户)
| 命令 | 功能 |
|---|---|
| vim /etc/vsftpd/ftpuserlist | 文件名称可自拟,地址不可,建立该文件创建虚拟用户身份 |
| 虚拟用户名1 | 创建虚拟用户1 |
| 虚拟用户密码1 | 创建虚拟用户1密码 |
| 虚拟用户名2 | 创建虚拟用户2 |
| 虚拟用户密码2 | 创建虚拟用户2密码,输入所有想建立的虚拟用户后退出保存 |
| db_load -T -t hash -f ftpuserlist ftpuserlist.db | 以hash加密的形式,以ftpuserlist文件为基本建立ftpuserlist.db文件 |
| rpm -qc pam | 查看pam的配置文件,pam是执行认证策略的程序 |
| rpm -qc vsftpd | 查看vsftpd的配置文件,可发现vsftpd与pam有关 |
| vim /etc/pam.d/ftpauth | 建立一个认证策略文件 |
| account required pam_userdb.so db=/etc/vsftpd/ftpuserlist(自动加.db所以不用手动写入) | 用户帐号认证,用pam_userdb.so的方式读取/etc/vsftpd/ftpuserlist.db名单,该命令给文件自动加.db后缀,所以此处不需加后缀,若认证成功则继续,失败则拒绝 |
| auth required pam_userdb.so db=/etc/vsftpd/ftpuserlist | 用户密码认证,pam_userdb.so的方式读取/etc/vsftpd/ftpuserlist.db名单,成功则继续,失败则拒绝,编辑完成后退出保存 |
| vim /etc/vsftpd/vsftpd.conf | 修改配置文件 |
| pam_service_name=ftpauth | 读取的认证策略是ftpauth |
| guest_enable=YES | 是否允许虚拟用户登陆 |
| guest_username=ftp | 虚拟用户以ftp用户的身份登陆 |
| userlist_enable=YES | 用户名单启用 |
| #userlist_deny=NO | 必须注释掉,否则无法成功,因为当该条存在时,存在用户白名单,修改完成后退出保存 |
| systemctl restart vsftpd | 重读配置文件,使修改立即生效 |
(6)不同虚拟用户指定不同的家目录
| 命令 | 功能 |
|---|---|
| mkdir -p /ftphome/user{1…4} | 递归建立虚拟用户家目录,此时家目录的名称要与虚拟用户名相同 |
| touch /ftphome/user1/userfile1 | 建立虚拟用户1的测试文件1 |
| touch /ftphome/user2/userfile2 | 建立虚拟用户2的测试文件2 |
| touch /ftphome/user3/userfile3 | 建立虚拟用户3的测试文件3 |
| touch /ftphome/user4/userfile4 | 建立虚拟用户4的测试文件4 |
| mkdir -p /ftphome/user{1…4}/pub | 递归建立家目录下的子目录pub |
| chmod 775 /ftphome/user(1…4}/pub | 更改pub的权限为775 |
| chgrp ftp /ftphome/user(1…4}/pub | 更改pub的所属组为ftp |
| vim /etc/vsftpd/vsftpd.conf | 修改配置文件 |
| local_root=/ftphome/$USER | 设定虚拟用户家目录为同名目录 |
| user_sub_token=$USER | 在本地root目录中插入用户名 |
| systemctl restart vsftpd | 重读配置文件,使修改立即生效 |
(7)不同虚拟用户如何独立配置
| 命令 | 功能 |
|---|---|
| vim /etc/vsftpd/vsftpd.conf | 修改配置文件 |
| user_config_dir=/etc/vsftpd/user_conf | 指定虚拟用户的单独配置文件目录 |
| mkdir /etc/vsftpd/user_conf | 建立虚拟用户的配置文件目录 |
| vim /etc/vsftpd/user_conf/user1 | 建立user1的单独配置文件 |
| anon_upload_enable=YES | 添加想要单独设置给user1的权限 |
| systemctl restart vsftpd | 重读配置文件,使修改立即生效 |