debian11安装ftp服务器(vsftpd)
阅读数:298 评论数:0
跳转到新版页面分类
Linux
正文
一、概述
1、standalone和inetd(inetd或xinetd)模式的区别
(1)standalone模式
运行期间一直驻留在内存中,会战胜一定的系统资源,适合实时返回要求较高的ftp服务器。
(2)inetd模式
只有外部连接发送请求时
vsftp是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP。
(1)控制连接(持续连接)
TCP 21(命令信道),用户收发FTP命令。
(2)数据连接(按需连接)
TCP 20(数据信道),用于上传下载数据。
(1)主动模式(port)
ftp客户端首先和服务器的TCP 21端口建立连接,用于发送命令。
客户端需要接收数据的时候在这个通道上发送port命令。port命令包含了客户端用什么端口接收数据。
在传送数据的时候,服务器端通过自已的TCP 20端口连接至客户端的指定端口发送数据。
ftp server必须和客户端建立一个新的连接用来传送数据。
(2)被动模式(passive)
ftp客户端首先和服务器的TCP 21端口建立连接,用来建立控制通道命令。
但建立连接后客户端发送Pasv命令。
服务器收到Pasv命令后,打开一个临时端口(大于1023小于65535),并且通知客户端在这个端口上传送数据的请求。
客户端连接FTP服务器的临时端口,然后FTP服务器将通过这个端口传输数据。
注意:由于VSFTP的被动模式是随机端口进行数据传输,所以在设置防火墙时需要刻意放行–>这里一定要放心vsftp的服务。
Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等
ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符等
Linux的红帽发行版中VSFTP默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用
切换方式:在ftp>提示符下输入ascii即转换到ACSII方式,输入bin,即转换到Binary方式。
# vsftp配置文件,可以通过man 5 vsftpd.conf查看具体配置
/etc/vsftpd/vsftpd.conf
# PAM认证文件,主要用来作身份认证使用
#
/etc/pam.d/vsftpd
# 匿名用户默认目录
/var/ftp
# 匿名用户的下载目录
/var/ftp/pub
# 不能访问 ftp server 的用户列表,与pam认证文件有关系
/etc/vsftpd/ftpusers
# 允许访问 ftp server 的用户列表
/etc/vsftpd/user_list
二、安装
$ sudo apt install vsftpd
#启动vsftpd服务
$ sudo systemctl start vsftpd
$ sudo systemctl enable vsftpd
$ sudo systemctl status vsftpd
#添加用户、修改密码
$ useradd -m ftpuser
$ passwd ftpuser
三、配置
# 是否使用standalone启动vsftpd,而不是super daemon(xinetd)控制它
listen=YES
#类似listen选项,但该选项使vsftpd侦听的地址为IPv6格式的
listen_ipv6=NO
#是否开启匿名用户
anonymous_enable=NO
#本地用户是否可以登录
local_enable=YES
#用户是否具有写的权限(全局,若要对其中一种用户开放上传权限,此处必须YES)
write_enable=YES
#设置本地用户的文件生成掩码
local_umask=022
#是否允许匿名用户上传文件
anon_upload_enable=YES
#当切换到FTP服务器的某个目录时,是否显示该目录下的.message信息
dirmessage_enable=YES
#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
use_localtime=YES
#是否启用上传和下载日志
xferlog_enable=YES
#是否启用FTP数据端口的连接请求
connect_from_port_20=YES
#是否允许用户离开其宿主目录
chroot_local_user=YES
idle_session_timeout=150
data_connection_timeout=600
#这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd 不需要file system 的权限时,就会#将使用者限制在此数据夹中,默认值为/usr/share/empty
secure_chroot_dir=/var/run/vsftpd/empty
#PAM认证服务配置文件名称,保存在”/etc/pam.d”目录下
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#是否启用SSL
ssl_enable=NO
# 以下部分需要手动添加,模板里没有
utf8_filesystem=YES
allow_writeable_chroot=YES
#是根据user_list实行访问控制(若启用此选项,userlist_deny选项才被启动)
userlist_enable=YES
#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录
userlist_deny=NO
#指定所有本地用户登陆后的目录,如果不设置此项,用户都会登陆于自己的主目录
local_root=/home/ftpuser
#是否允许匿名用户具有建立目录,上传之外的权限,如重命名,删除
anon_other_write_enable=YES
max_login_fails=9
(1)服务器环境设置有关的设置值
connect_timeout=60 | 单位是秒,在数据连接的主动式连模式下,我们发出的连接信息在 60 秒内得不到客户端的响应,则不等待并强制断线。 |
data_connection_timeout=120 | 如果服务器与客户端的数据已经成功建立(不论主动还是被动链接),但是可能由于线路问题导致 120 秒内还是无法顺利地完成数据地传送,那客户端地连接就会被我们地 vsftpd 强制踢除。 |
idle_session_timeout=600 | 如果用户在 300 秒内都没有命令操作,强制脱机!避免无用占用空间。 |
max_clients | 限制同一时间最多有多少 client 可以同时连上 vsftpd ,限制使用 FTP 的用量。 |
max_per_ip | 同一个 IP 同一时间可允许多少连接。 |
pasv_enable | 是否支持数据流的被动式连接模式。该参数的默认值是 YES。 |
pasv_min_port,pasv_max_port | 被动连接模式使用的端口号有关 |
connect_from_port_20=YES | 支持主动式连接功能 |
listen=YES | YES,表示 vsftpd 是以 stand alone 的方式来启动。默认是 NO |
(2)与实体用户相关的设置
local_enable=YES | 这个设置值必须要为 YES,在 /etc/passwd 内地账号才能以实体用户地方式登录我们的 vsftpd 服务器。 |
local_max_rate=0 | 实体用户的传输速度限制,单位为 bytes/second,0 为不限制 |
write_enable=YES | 如果你允许用户上传数据时,就要启动这个设置值 |
chroot_local_user=YES | 在默认的情况下,是否要将用户限制在自己的用户主目录之内(chroot)?如果是 YES 代表用户默认就会被 chroot,如果是 NO,则默认是没有 chroot。 |
chroot_list_enable=YES | 这个项目需要开启,否则下面的列表文件会无效。 |
chroot_list_file=/etc/vsftp/chroot_list | |
userlist_enable=YES | 是否借助 vsftpd_enable 的阻挡机制来处理某些不欢迎的账号, |
userlist_deny=YES | 当 userlist_enable=YES 时才会生效的设置,若此设置值为 YES 时,则当用户账号被列入某个文件时,在该文件内的用户将无法登录 vsftpd 服务器。 |
userlist_file=/etc/vsfpd/user_list | 若上面 userlist_deny = YES 时,则这个文件就有用处了。在这个文件内的账号都无法使用 vsftpd。 |
(3)匿名用户登录的设置
anonymous_enable=YES | 设置允许 anonymous 登录 vsftpd 主机。默认是 YES,下面的所由相关设置都需要将这个设置为 anonymous_enable=YES 之后才会生效。 |
anon_world_readable_ONLY=YES | 仅允许 anonymous 具有下载可读文件的权限。 |
anon_other_write_enable=YES | 是否允许 anonymous 具有除了写入之外的权限,包括删除与修改服务器上的文件及文件名的权限。如果要设置为 YES,那么开放给 anonymous 写入的目录亦即需要调整权限,让 vsftpd 的PID 拥有者可以写入才行。 |
anon_mkdir_write_enable=YES | 是否让 anonymous 具有建立目录的权限,如果要设置为 YES,那么 anon_other_write_enable=YES 必须设置。 |
anon_upload_enable=YES | 是否让 anonymous 具有上传数据的功能,如果要设置为 YES,那么 anon_other_write_enable=YES 必须设置。 |
anon_umask=077 | 限制 anonymous 上传文件的权限。如果是 077 则 anonymous 传宋过来的文件权限会是 -rw-------。 |
anon_max_rate=0 | 这个设置值后面接的数值单位为 bytes/秒,限制 anonymous 的传输速度,如果是 0 则不限制(由最大带宽所限制), |
anon_root | 修改匿名用户的默认家目录(默认家目录是 /var/ftp) |
chown_uploads=YES | 是否要修改匿名用户使用的身份,如果是 YES ,那么指定的用户身份由下面那一个参数来决定 |
chown_username | 如果上面那个参数(chown_uploads)的值是 YES,那么,这个参数就是在指定使用的用户的身份 |
no_anon_password | 当设置为 YES 时,表示 anonymous 将会略过密码检验步骤,而直接进入 vsftpd 服务器内。 |
(4)与系统安全方面相关设置
tcp_wrappers=YES | 当然我们都习惯支持 TCP Wrappers 的防火墙机制(即可以利用 /etc/hosts.allow 或 /etc/hosts.deny 来作为基础防火墙) ,所以设置为 YES |
xferlog_enable=YES | 当设置为 YES 时,用户上传与下载文件都会被记录下来。记录的文件与下一个设置项目有关 |
xferlog_file=/var/log/xferlog | 如果上一个设置项目 xferlog_enable=YES 的话,这里就可以设置了。这个是日志文件的文件名 |
pam_service_name=vsftpd | 这个是 PAM 模块的名称,我们放置在 /etc/pam.d/vsftpd 中的即是这个。 |
echo "ftpuser" | sudo tee -a /etc/vsftpd.user_list
$ sudo mkdir /home/ftpuser/upload
$ sudo chmod -R 777 /home/ftpuser/upload
sudo systemctl restart vsftpd
四、3种登陆模式
客户端----->匿名用户登录---->匿名账号:ftp或者是anonymous 密码是空密码
默认的家目录:/var/ftp/目录下
客户端----->本地用户登录---->本地登录涉及到:普通用户和普通用户的家目录
/etc/passwd
/etc/shadow文件
客户端----->虚拟用户登录---->这个是最复杂的;
需要人为创建,生成数据库文件;
找一个系统用户作为虚拟用户的映射用户,借助系统用户的家目录作为默认的登陆点,/home下的其中一个用户名
每一个虚拟用户的权限都可以单独指定的
默认可以下载不可上传,如果想获得上传权限,需要在原目录下创建子目录并赋权。
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 #限制最大传输速率(0 为不限速,单位:bytes/秒)
# 新建子目录
mkdir -p /var/ftp/upload
# 修改权限
chown -R ftp /var/ftp/upload/
chmod -R 755 /var/ftp/upload/
# 重启服务
systemctl restart vsftpd
# 查询服务器IP
ip addr
# 登陆
ftp://192.168.210.201/
(1)锁定主目录和设定主目录最好配套使用。
(2)推荐使用被动访问模式
(3)本地用户掩码为local_umask,虚拟用户掩码为anno_umask,注意区分。
(4)为了安全,如果用户被限定的其主目录下,则该用户的主目录不能再具有写权限,如果检查发现还有写权限,就会报500 OOPS: vsftpd: refusing to run with writable root inside chroot()
错误。解决方式不止一种,其中通过配置allow_writeable_chroot=YES
的方式最省事、也最正规。
# 锁定主目录
chroot_local_user=YES
# 设定登陆主目录
local_root=/home
# 允许用户对于主目录具有读写权限
allow_writeable_chroot=YES
# 被动
pasv_enable=YES
pasv_min_port=12000
pasv_max_port=12199
(5)目录管理
自定义根目录,所属必须为root,权限为755,一般情况下,root用户创建的目录就符合要求。
子目录,所属必须为对应建立的用户,权限为700,这样保证自身对于文件夹有所有权限,但是其他用户无法进入。
如果在新建用户的时候指字其用户主目录为子目录,则可以跳过子目录创建阶段。
mkdir /home/FTP
chown -R root:root /home/FTP
chmod -R 755 /home/FTP
# 新增子目录(可选)
mkdir -p /home/FTP/admin_files
chown -R admin:admin /home/FTP/admin_files
chmod -R 700 /home/FTP/admin_files
local_enable=YES #是否启用本地系统用户
local_umask=022 #本地用户所上传文件的权限掩码
local_root=/var/ftp #设置本地用户的 FTP 根目录
chroot_local_user=YES #是否将用户禁锢在主目录
local_max_rate=0 #限制最大传输速率
ftpd_banner=Welcome to blah FTP service #用户登录时显示的欢迎信息
userlist_enable=YES & userlist_deny=YES
#禁止/etc/vsftpd/user_list 文件中出现的用户名登录 FTP
userlist_enable=YES & userlist_deny=NO
#仅允许/etc/vsftpd/user_list 文件中出现的用户名登录 FTP
配置文件:ftpusers
#禁止/etc/vsftpd/ftpusers 文件中出现的用户名登录 FTP,权限比 user_list 更高,即时生效