配置 vsftpd.note

noteId: WEB26c01f92feb748b7a259ac71bccd6199 · 原始路径:/ALL/Linux - A模块/服务配置/FTP - TCP 21、TCP 990/vsftpd/配置 vsftpd.note · 图片:65 · 附件待处理:0

 
 
 
一、配置 不加密FTP(TCP 21端口):
 
 
·如果遇到报错:
 
 
编辑配置文件:
vim /etc/vsftpd.conf
## 将其取消注释,并设置为 NO
 
 
 
 
 
ftp 是直接使用本地用户进行用户认证
1、安装即可用(但是没有加密是不安全连接):
 
(1)安装 vsftpd:
apt install -y vsftpd
 
vsftpd默认就能够使用本地用户进行登陆,因为配置文件中默认开启了:
 
 
(2)创建一个新用户给客户端登陆:
# 创建一个新用户(vsftpd默认使用本地数据库进行登陆):
adduser ftpuser
 
 
(3)允许 root 用户登陆(root用户默认被vsftpd禁用)
# 启用root用户:
## vsftpd有一个文件:/etc/ftpusers 在其中的用户都会被禁止登陆,将其中默认存在的 root 删除或者注释掉即可:
vim /etc/ftpusers
在这个文件中定义的用户都将会被vsftpd给禁止登陆
 
 
 
(4)客户端登陆:
默认会位于用户家目录下,且默认可以使用 cd 自由切换目录
 
或者使用创建的用户登陆(创建了就能够登陆,无需额外操作)
 
用户默认的 根目录是他们的家目录
 
 
 
 
2、配置允许普通用户上传、删除 文件:
mkdir /ftp
chmod -R 777 /ftp    // 必须要有写入权限,才能够成功上传
vim /etc/vsftpd.conf
 
 
 
·测试:
 
下载文件:
 
 
 
3、配置 允许匿名用户登陆:
 
 
(1)配置 vsftpd:
mkdir /anon
chmod 755 /anon    // 匿名用户目录不允许有写入权限,否则匿名用户无法登陆( 5 是 读取r 和 执行x )
chown root:root /anon    // 匿名用户的目录属主必须是 root,否则匿名用户无法登陆
vim /etc/vsftpd.conf
# 允许匿名用户登陆(默认是NO,不允许)
 
 
 
(2)客户端登陆:
# ftp 匿名用户默认有两个:ftp、anonymous
 
 
 
4、配置允许 匿名用户 上传、删除 文件:
此时就有一些麻烦,因为要求 匿名用户上传和删除文件,匿名用户目录就必须要有可写入权限,而如果匿名用户的目录如果有写入权限,匿名用户就无法登陆
也不能够使用 acl 单独指定权限,acl指定的权限也会导致匿名用户无法登陆
因此匿名用户无法在根目录上传文件,只能够在其子目录创建一个可写的目录来上传文件
 
mkdir /anon
chmod 755 /anon
chown root:root /anon
mkdir /anon/upload
chmod 777 /anon/upload
 
# 编辑配置文件,允许  ftp 匿名用户上传文件:
vim /etc/vsftpd.conf
 
 
 
·测试 上传文件、删除文件:
 
创建目录:
 
下载文件:
 
·如果 匿名用户无法下载文件(无法下载自己上传的文件):
因为匿名用户默认只允许下载 权限为 777的文件,可以将这个限制关闭
vim /etc/vsftpd.conf
# 在末尾新增一行:
 
或者:
vim /etc/vsftpd.conf
# 在末尾新增一行:
 
测试:
 
 
5、如果要修改 匿名用户上传文件的所属用户:
vim /etc/vsftpd.conf
# 更改这两个字段,将其改为想要的即可(默认匿名用户上传的文件所属用户和组是 root)
 
二、配置 SSL FTP:
 
创建证书的步骤不赘述
1、配置(explicit ftp)显式ftp(TCP 21端口):
 
(1)配置 vsftpd:
# 在本地信任根证书:
cp ~/demoCA/cacert.pem /usr/local/share/ca-certificates/ca.crt
update-ca-certificates
 
# 配置加密
vim /etc/vsftpd.conf
force_local_logins_ssl=YES 和 force_local_data_ssl=YES 可以不用输入,因为默认值是 YES
配置常规选项:
mkdir /ftp
mkdir -p /anon/upload
chmod 777 /ftp
chmod 755 /anon    // 匿名用户的根目最大只能够给到这个权限
chmod 777 /anon/upload  // 给匿名用户上传文件的目录
 
 
(2)配置 客户端:
ftp 命令不支持 ssl,需要使用 lftp命令(lftp命令必须信任根证书才能够成功登陆)
apt install -y lftp
scp root@10.1.10.11:~/demoCA/cacert.pem /home/ca.crt    // 复制根证书
cp /home/ca.crt /usr/local/share/ca-certificates    // 信任根证书
update-ca-certificates    
 
·本地用户访问:
# 语法:lftp -u [用户名],[密码] [ftp地址]
lftp -u skills,Skills39 ftp://ftp.cisco.com
或者:
lftp -u skills,Skills39 ftp.cisco.com
 
·匿名用户访问:
lftp ftp://ftp.cisco.com
或:
lftp ftp.cisco.com
 
 
·此时匿名用户还是可以选择不使用 ssl:
 
# 可以强制匿名用户使用ssl:
 
 
2、配置(implicit ftp)隐式ftp(TCP 990端口):
 
(1)配置 vsftpd:
vim /etc/vsftpd.conf
配置常规选项:
mkdir /ftp
mkdir -p /anon/upload
chmod 777 /ftp
chmod 755 /anon    // 匿名用户的根目最大只能够给到这个权限
chmod 777 /anon/upload  // 给匿名用户上传文件的目录
 
 
# 查看990端口是否启用:
ss -ntupl | grep 990
 
 
(2)客户端配置:
apt install -y lftp
scp root@10.1.10.11:~/demoCA/cacert.pem /home/ca.crt    // 复制根证书
cp /home/ca.crt /usr/local/share/ca-certificates    // 信任根证书
update-ca-certificates    
 
 
·本地用户访问:
# 需要访问 ftps://    (ftps: 默认是以 990端口访问的)
lftp -u skills,Skills39 ftps://ftp.cisco.com:990
或:
lftp -u skills,Skills39 ftps://ftp.cisco.com
 
但是此时匿名用户还是无法访问
 
 
(3)配置允许匿名用户访问:
vim /etc/vsftpd.conf
# 新增一条:
 
 
·匿名用户访问:
访问的目录自然是 anon_root 定义的匿名用户目录
 
 
三、限制用户处于自己的主目录中,不允许切换到其它目录(使用 chroot):
 
1、限制所有用户处于自己的主目录中:
使用 chroot_local_user=yes
 
vim /etc/vsftpd.conf
#  取消注释:
 
 
测试登陆:
 
 
 
但是开启了 chroot_local_user 后,用户就无法登入自己拥有写入权限的根目录,会报错:
 
·设置隔离例外(指定用户不受隔离限制):
vim /etc/vsftpd.conf
# 取消注释:
 
 
# 编辑文件:(在此文件中指定的用户将不受隔离限制,该文件默认不存在)
vim /etc/vsftpd.chroot_list
## 指定 skills 用户不受 chroot_list 限制
 
·测试:
 
 
2、允许用户在自己的主目录中拥有写的权限:
如果配置了 chroot ,用户登陆时,主目录有写的权限,而没有指定该参数,那么就会报错,无法登陆上
# 添加参数:
allow_writeable_chroot=YES
这样就不会报错:500 OOPS....
 
测试登陆:
 
 
 
四、可以为每个用户(包括 虚拟用户)单独定义权限:
如果不定义,那么虚拟用户就会使用 /etc/vsftpd.conf 中的配置
 
1、配置:
vim /etc/vsftpd.conf
# 具体配置与 (五、基于 PAM 的 ftp 虚拟用户)相同
 
 
mkdir -p /etc/vsftpd/users_dir
cd /etc/vsftpd/users_dir
# 定义了两个虚拟用户(ftp1、ftp2),和一个普通用户:ftpuser
## 创建与虚拟用户同名的文件
touch ftp1
touch ftp2
touch ftpuser
 
mkdir /ftp1 /ftp2 /ftpuser
chown ftp:ftp /ftp1 /ftp2 /ftpuser    //因为前面虚拟用户(guest_username)定义的是ftp
 
# 虚拟用户:
vim ftp1
 
# 虚拟用户:
vim ftp2
 
# 普通用户:
vim ftpuser
 
 
·测试:
 
登陆ftp1虚拟用户上传文件,然后去服务器上查看ftp1根目录:
 
查看ftp1根目录:
 
 
登陆ftp2虚拟用户上传文件,然后去服务器上查看ftp2根目录:
查看ftp2根目录:
 
 
登陆ftpuser普通用户上传文件,然后去服务器上查看ftpuser根目录:
 
查看ftpuser根目录:
 
 
 
五、启用基于主机的访问控制(基于IP地址或域名):
 
1、配置 vsftpd:
vim /etc/vsftpd.conf
## 可以在man文档中查询到该参数
 
# 开启了 tcp_wrappers 后, /etc/hosts.allow 和 /etc/hosts.deny 两个文件就会生效
## hosts.allow 优先于 hosts.deny(当同时定义一个用户时,allow优先)
 
例如:要禁止来自 192.168.10.2的IP访问,允许来自 192.168.10.3的IP
 
vim /etc/hosts.allow
# 如果 hosts.deny 定义的不是 ALL,就不用写,因为默认是允许的。
 
vim /etc/hosts.deny
 
编辑后立即生效,无需重启 vsftpd服务(当然前面修改vsftpd配置文件还是需要重启的)
 
·测试:
使用 192.168.10.2机器访问:
访问失败
 
使用 192.168.10.3机器访问:
访问成功
 
 
 
六、配置 vsftpd 以 LDAP为后端:
需要配置 虚拟用户才能连接