前言

FTP 是File Transfer Protocol(文件传输协议)的英文简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

一般在各种linux的发行版中,默认带有的ftp软件是vsftp,我们需要利用相关命令来开启安装ftp服务器,然后再在vsftpd.conf中进行相关配置,下面我来介绍在Linux中vsftpd安装与配置增加用户的方法。

知识链接关于vsftpd服务配置讲解

一、部署

部署环境:Centos 7

  • 检查是否已经安装vsftpd,如果已经安装,会显示版本号
rpm -qa | grep vsftpd
  • 安装
yum install vsftpd  ftp db4 db4-utils pam* libcap libcap-devel tcp_wrappers tcp_wrappers-devel -y

二、配置vsftpd

cp -fr /etc/vsftpd/vsftpd.conf{,.bak}
cp -fr /etc/pam.d/vsftpd{,.default}

1、匿名用户登录配置

匿名登陆只能通过2个用户(默认:FTP 和anonymous)进行登陆

  • 创建匿名登录后的使用者

    匿名用户参数:ftp_username=anontest
useradd anontest -s /sbin/nologin -d /data/ftp/anontest
chmod 755 /data/ftp/anontest
  • 修改配置文件
# 打开匿名用户模式
anonymous_enable=YES
## 打开本地用户登录
local_enable=YES
## 打开全局写权限
write_enable=YES
## 系统用户新增或上传档案时的umask值
#local_umask=022
# 若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO
no_anon_password=YES
# 定义匿名登入的使用者名称。默认值为ftp
ftp_username=anontest
# 使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限
#anon_root=/data/ftp/anontest
anon_root=/data/ftp
# 如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO
anon_upload_enable=YES
# 开启匿名用户创建目录的权限
anon_mkdir_write_enable=YES
# 开启匿名用户可以删除目录和文件
# (如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。)
anon_other_write_enable=YES
# 开启匿名用户下载权限
anon_world_readable_only=YES
# 设置匿名用户可以下载自己上传的文件:新建的目录 权限是755,文件的权限是 644
# 设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO
chown_uploads=NO
# 设置匿名用户上传文件(非目录)的属主名。建议不要设置为root
chown_username=anontest
# 设置匿名登入者新增或上传档案时的umask值。
anon_umask=022
# 是否显示目录消息
dirmessage_enable=YES
# 是否让系统自动维护上传和下载的日志文件
xferlog_enable=YES
# 是否启用端口20进行FTP数据连接请求
connect_from_port_20=YES
# 设定系统维护记录FTP服务器上传和下载情况的日志文件
xferlog_file=/var/log/vsftpd.log
# 开启日志功能(记录删除、下载、删除所有动作)
log_ftp_protocol=yes
# 是否以标准xferlog的格式书写传输日志文件
xferlog_std_format=no
xferlog_enable=yes
#standalone模式 (must config)
# 设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式,此时listen必须设置为YES,此为默认值。建议不要更改,有很多与服务器运行相关的配置命令,需要在此模式下才有效。若设置为NO,则vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制
# 是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
listen_port=666
#listen_ipv6=YES
# 被动模式传输
pasv_enable=YES
pasv_promiscuous=YES
pasv_min_port=12351
pasv_max_port=12551
# 列出与vsftpd相关的pam文件
pam_service_name=vsftpd
# 是否启用禁止登录用户名单
userlist_enable=YES
# 是否支持tcp_wrappers
tcp_wrappers=NO
# 设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。
max_clients=0
# 设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效
max_per_ip=0
# 设置FTP服务器在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器绑定的所有IP地址进行侦听。只有在standalone模式运行才有效
#listen_address=IP地址

2、系统用户登录配置

以下配置可允许本地用户及虚拟用户的登录访问

知识链接关于vsftpd服务配置讲解

  • 修改配置文件
#允许匿名访问
anonymous_enable=NO
#允许本地用户登录
local_enable=YES
#设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录FTP服务器后,所在的目录为该用户的主目录
local_root=/data/ftp
#是否允许登陆用户有写权限
write_enable=YES
#设置本地用户的文件掩码022
local_umask=022 #是否允许匿名用户上传。
#anon_upload_enable=YES
#是否允许匿名用户建立目录。
#anon_mkdir_write_enable=YES #是否显示目录消息
dirmessage_enable=YES
#是否让系统自动维护上传和下载的日志文件
xferlog_enable=YES
#是否启用端口20进行FTP数据连接请求
connect_from_port_20=NO #设定系统维护记录FTP服务器上传和下载情况的日志文件
xferlog_file=/var/log/vsftpd.log #开启日志功能(记录删除、下载、删除所有动作)
log_ftp_protocol=yes
#是否以标准xferlog的格式书写传输日志文件
xferlog_std_format=no
xferlog_enable=yes #禁止域名反向解析,解决登录慢的问题
reverse_lookup_enable=NO
#是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
#修改默认端口21,提高安全性
listen_port=666 #被动模式传送
pasv_enable=YES
pasv_promiscuous=YES
#设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意,设置50000-60000,将有助于安全性的提高
pasv_min_port=12351
pasv_max_port=12551 #虚拟用户使用PAM认证方式;设置PAM使用的名称,默认值为/etc/pam.d/vsftpd
pam_service_name=vsftpd #(用户的访问控制可以通过user_list和ftpusers(ftpuser不受任何配制项的影响!它总是有效,它是一个黑名单)文件来实现)
#控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行
userlist_file=/etc/vsftpd/user_list #userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
#当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP
#当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
#当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
# 是否使userlist这个文件生效
userlist_enable=YES
#设置是否阻扯user_list文件中的用户登录FTP服务器
userlist_deny=YES #是否使用tcp_wrappers作为主机访问控制方式。
tcp_wrappers=NO #指定用户独立的配置文件存放目录
user_config_dir=/etc/vsftpd/vusers_dir #匿名/本地用户传输速率(单位:K/S)
anon_max_rate=30000000
local_max_rate=30000000
use_localtime=YES #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到主目录之外的)
chroot_local_user=NO #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_enable=YES
#是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误#要修复这个错误可以用命令chmod a-w 去除主目录写权限,或者你可以在vsftpd的配置文件中增加下列两项中的一项
allow_writeable_chroot=YES #禁用反向域名解析
reverse_lookup_enable=NO #每个来源IP可建立多少ftp连接
max_per_ip=0 ##最多允许100个人同时使用FTP服务器
max_clients=100 ##设置客户端/数据连接超时时间
idle_session_timeout=600
data_connection_timeout=120
#
  • 创建系统用户
useradd local_one -s /sbin/nologin -d /data/ftp/local_one
chmod 755 /data/ftp/local_one
  • 指定系统用户登录后的家目录

如果使用系统用户登录,当用户数大于1时,通过默认vsftpd.conf来管理、限制用户权限的方法显然有些力不从心;

因此通过配置文件参数--user_config_dir,将每个用户配置独立化可以解决上述问题。

例:指定用户独立的配置文件存放目录:user_config_dir=/etc/vsftpd/vusers_dir

mkdir -p /etc/vsftpd/vusers_dir
touch /etc/vsftpd/vusers_dir/local_one
cat >/etc/vsftpd/vusers_dir/local_one<<EOF
#指定该用户的登陆目录
local_root=/data/ftp/local_one
EOF
  • 创建用户限制名单
touch /etc/vsftpd/vsftpd.chroot_list

3、虚拟用户登录配置

  • 修改配置文件:
#允许匿名访问
anonymous_enable=NO
#允许本地用户登录
local_enable=YES
#设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录FTP服务器后,所在的目录为该用户的主目录
local_root=/data/ftp
#是否允许登陆用户有写权限
write_enable=YES
#设置本地用户的文件掩码022
local_umask=022 #是否允许匿名用户上传。
#anon_upload_enable=YES
#是否允许匿名用户建立目录。
#anon_mkdir_write_enable=YES #是否显示目录消息
dirmessage_enable=YES
#是否让系统自动维护上传和下载的日志文件
xferlog_enable=YES
#是否启用端口20进行FTP数据连接请求
connect_from_port_20=NO #设定系统维护记录FTP服务器上传和下载情况的日志文件
xferlog_file=/var/log/vsftpd.log #开启日志功能(记录删除、下载、删除所有动作)
log_ftp_protocol=yes
#是否以标准xferlog的格式书写传输日志文件
xferlog_std_format=no
xferlog_enable=yes #禁止域名反向解析,解决登录慢的问题
reverse_lookup_enable=NO
#是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
#修改默认端口21,提高安全性
listen_port=666 #被动模式传送
pasv_enable=YES
pasv_promiscuous=YES
#设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意,设置50000-60000,将有助于安全性的提高
pasv_min_port=12351
pasv_max_port=12551 #虚拟用户使用PAM认证方式;设置PAM使用的名称,默认值为/etc/pam.d/vsftpd
pam_service_name=vsftpd #(用户的访问控制可以通过user_list和ftpusers(ftpuser不受任何配制项的影响!它总是有效,它是一个黑名单)文件来实现)
#控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行
userlist_file=/etc/vsftpd/user_list #userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
#当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP
#当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
#当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
# 是否使userlist这个文件生效
userlist_enable=YES
#设置是否阻扯user_list文件中的用户登录FTP服务器
userlist_deny=YES #是否使用tcp_wrappers作为主机访问控制方式。
tcp_wrappers=NO #启用虚拟用户。默认值为NO
guest_enable=YES #这里用来映射虚拟用户。默认值为ftp。
#guest_username=vsftpd
guest_username=virtual #指定用户独立的配置文件存放目录
user_config_dir=/etc/vsftpd/vusers_dir #匿名/本地用户传输速率(单位:K/S)
anon_max_rate=30000000
local_max_rate=30000000
use_localtime=YES #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到主目录之外的)
chroot_local_user=NO #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_enable=YES
#是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误#要修复这个错误可以用命令chmod a-w 去除主目录写权限,或者你可以在vsftpd的配置文件中增加下列两项中的一项
allow_writeable_chroot=YES #禁用反向域名解析
reverse_lookup_enable=NO #每个来源IP可建立多少ftp连接
max_per_ip=0 ##最多允许100个人同时使用FTP服务器
max_clients=100 ##设置客户端/数据连接超时时间
idle_session_timeout=600
data_connection_timeout=120
#

虚拟用户不是系统中存在的,因此比本地用户安全,具体步骤如下:

1. 创建虚拟用户名单文件

touch  /etc/vsftpd/vftpuser.txt

加入用户的用户名和口令信息。格式很简单:“奇数行用户名,偶数行口令”。

hyywnobody
123456

2. 生成虚拟用户口令认证文件

使用db_load命令用HASH算法生成FTP用户数据库文件vftpuser.db

\db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
chmod 600 /etc/vsftpd/vftpuser.db

3. 创建FTP根目录及虚拟用户映射的系统用户

为保证其他用户可以访问,给予rwxr-xr-x权限

useradd virtual -s /sbin/nologin
mkdir -p /data/ftp/
chmod -Rf 755 /data/ftp

4. 建立支持虚拟用户的PAM认证文件

mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.back
cat /etc/pam.d/vsftpd

参数db用于指向刚刚生成的vftpuser.db文件,但不要写后缀

centos7系列:

auth       required     pam_userdb.so db=/etc/vsftpd/vftpuser
account required pam_userdb.so db=/etc/vsftpd/vftpuser

centos6系列:

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser

5. 虚拟用户访问权限设置

虚拟用户的权限默认不能上传、创建、修改文件

如果希望用户能够访问或管理FTP内的资料,就需要让FTP程序支持独立的用户权限配置文件了

首先,编辑vsftpd.conf中的配置指定用户独立的配置文件存放目录:

user_config_dir=/etc/vsftpd/vusers_dir

创建用户配置文件存放目录

mkdir -p /etc/vsftpd/vusers_dir

创建以用户名命名的配置文件

touch /etc/vsftpd/vusers_dir/hyywnobody

配置用户权限,常用组合:

  • 浏览+上传+下载
#指定该用户的登陆目录
local_root=/data/ftp/hyywnobody
anon_umask=022
#yes=禁止浏览;no=只读,下载
anon_world_readable_only=no
#是否开启写权限
write_enable=yes
#是否可上传
anon_upload_enable=yes #是否可以创建目录
anon_mkdir_write_enable=yes
#是否可删除
anon_other_write_enable=yes
  • 浏览+下载
local_root=/data/ftp/hyywnobody
anon_world_readable_only=no
  • 可上传
local_root=/data/ftp/hyywnobody
write_enable=yes
anon_upload_enable=yes

根据虚拟用户配置文件中设置的local_root,创建虚拟用户主目录并更改权限

mkdir -p /data/ftp/hyywnobody
chown virtual.virtual /data/ftp/hyywnobody

6. 重启vsftpd服务

systemctl restart vsftpd

4、登录验证

略...

FTP服务—三种登录类型的配置方法的更多相关文章

  1. phpunit 生成三种日志文件的配置方法

    #目录结构 windows bin目录下 ├── phpunit.phar ├── phpunit.cmd ├── phpunit.xml ├── build.xml ├── ArrTest.php ...

  2. 基于ftp服务的三种登录方式及其相关的访问控制和优化

    ftp(简单文件传输协议),是一种应用广泛的网络文件传输协议和服务,占用20和21号端口,主要用于资源的上传和下载. 在linux对于ftp同widows一样具有很多的种类,这里主要介绍vsfptd( ...

  3. Telnet的三种登录方式

    Telnet的三种登录方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.华为创建telnet的三种验证方式 首先,我们可以简单的看一个拓扑图,让我们可以在亦庄的路由器上对双桥 ...

  4. SEO三种职位类型:编辑型SEO、技术型SEO、营销型SEO详解

    SEO三种职位类型:编辑型SEO.技术型SEO.营销型SEO详解 网站SEO优化作为营销端的服务之一,这些年也呈现出日新月异的格局.一改过去游兵散将式的小作坊生产模式,不断有力量强大的公司团体加入到这 ...

  5. java Data、String、Long三种日期类型之间的相互转换

    java Data.String.Long三种日期类型之间的相互转换      // date类型转换为String类型   // formatType格式为yyyy-MM-dd HH:mm:ss// ...

  6. sql server 性能调优之 资源等待内存瓶颈的三种等待类型

    一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),SOS_RESERVEDMEMBLOCKLIST(0x007B),RESO ...

  7. 固本培元之三:Convert、运算符、流程控制语句、ref/out/in三种参数类型

    一.Convert类常用的类型转换方法Convert.ToInt32() 转换为整型(int)Convert.ToChar() 转换为字符型(char)Convert.ToString() 转换为字符 ...

  8. sql server 性能调优 资源等待之内存瓶颈的三种等待类型

    原文:sql server 性能调优 资源等待之内存瓶颈的三种等待类型 一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),S ...

  9. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的

    bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使 ...

随机推荐

  1. 20192113 2020-2021-2 《Python程序设计》实验一报告

    20192113 2020-2021-2 <Python程序设计>实验一报告 课程:<Python程序设计> 班级: 1921 姓名: 衣丽莎 学号:20192113 实验教师 ...

  2. 保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事

    保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事 10 things to consider when securing an embedded 802.11 Wi-Fi device 随着 ...

  3. python_request 接口测试线性框架,模块化思想,增加日志打印

    一.大框架 如下为一个简单的线性框架,同时编写common_api 模块,把一个个接口进行封装,案例编写时候只需要直接调用输入参数即可. 二. test_cases 模块具体写法 2.1  commo ...

  4. jquery给动态生成的元素绑定事件,on函数

    首先先解释一下什么是动态生成的元素:动态生成的元素即我们用jquery的内部插入函数append()所生成的html代码.相对的也有静态生成的元素:即直接编写在页面的html代码. 下面通过例子来讲解 ...

  5. 「题解」agc031_e Snuke the Phantom Thief

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 AT4695.AtCoder agc031_e. 题意简述 在二维平面上,有 \(n\) 颗珠宝,第 \(i\) 颗 ...

  6. 使用NDepend衡量代码的SOLID程度

    SOLID是面向对象的软件开发中的5条准则,也是开发人员可以提升自己代码质量的准则.那么如何衡量自己的代码是否符合SOLID准则呢?NDepend这款工具也许可以帮得上忙.本文将介绍一些NDepend ...

  7. docker入门详解

    这可能是最为详细的Docker总结 Docker是什么? 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是十分普遍的,甚至成为了一些企 ...

  8. Ruby升级的最新方法/CocoaPods安装

    今天安装cocoapods时候出现了下面的提示 Error installing pods:active support requires Ruby version >= 2.2.0//这个需求 ...

  9. Java-IO流的继承结构

    一  IO流的继承结构如下 二  字节流 1.InputStream(字节流读取数据),为抽象类,不可创建对象:其具体实现需要通过子类FileInputStream(读取文件数据).BufferedI ...

  10. VLAN协议与三层交换机 (Access/Trubk/Hrbrid)

    VLAN协议与三层交换机(Access/Trunk/Hybrid) 目录 一.VLAN概述 1.1.分割广播域 1.2.VLAN的优势 1.3.静态VLAN 二.Trunk的作用 2.1.概念 2.2 ...