缺月挂梧桐 漏断人初静

导航

ftp相关

一、安装

yum install vsftpd -y

 

二、配置vsftpd.conf

先备份一个配置文件,然后再修改,注意所有配置行尾不能有空格,否则启动ftp会报错,提示不识别参数

基本配置:

anonymous_enable=no  #禁止匿名登录
local_enable=YES     #允许本地账户登录
write_enable=YES     #允许本地账户写权限
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES    #开启日志
connect_from_port_20=YES  #表面vsftp使用主动模式
xferlog_file=/var/log/vsftp  #日志文件
xferlog_std_format=YES
chroot_local_user=YES    #将所有用户限制在主目录,YES为启用 NO禁用   见注1
allow_writeable_chroot=YES #拥有写权限
local_root=/data1/vsftp/data  #ftp主目录位置,默认为各个用户的home目录

chroot_list_enable=YES  #是否启动限制用户的名单 YES为启用  NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list
userlist_enable=YES #启用user_list文件  见注2
listen=YES pasv_enable=NO pam_service_name=vsftpd  tcp_wrappers=YES

 

注1:

chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable #是否启动限制用户的名单 YES为启用  NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!

对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:

 

 

 

注2:

vsftpd有两个默认存放用户名单的文件(默认在/etc/vsftpd/ 目录下),来对访问FTP服务的用户身份进行管理和限制。vsftpd会分别检查两个配置文件,只要是被任何一个文件所禁止的用户,FTP访问到本机的请求都会被拒。

 user_list:可以作为用户白名单,或者是黑名单,或者无效名单。完全由userlist_enable和userlist_deny这两个参数决定。

 ftpusers:只能是用户黑名单,不受任何参数限制。

 

决定user_list文件性质的参数 userlist_enable和userlist_deny

userlist_enable=YES   userlist_deny=YES  启用user_list文件,但文件是黑名单,拒绝文件中的用户FTP访问
 
userlist_enable=YES   userlist_deny=NO   启用user_list文件,但文件是白名单,拒绝除文件中的用户外的用户FTP访问
 
userlist_enable=NO   userlist_deny=YES/NO  无效名单,表示没有对任何用户限制FTP访问

 

三、新增虚拟用户

  1、修改vsftpd.conf配置文件,增加虚拟用户相关的配置

pam_service_name=vsftpd #设置PAM使用的名称,该名称就是/etc/pam.d/目录下vsfptd文件的文件名
guest_enable=YES     #表示是否开启vsftpd虚拟用户的功能,yes表示开启,no表示不开启。
user_config_dir= /etc/vsftpd/vmuser_conf #指定每个虚拟用户账号配置目录

 

 2、然后创建虚拟用户目录

mkdir  /etc/vsftpd/vmuser_conf

3、创建虚拟用户文件,把这些用户名和密码存放在一个文件中。该文件内容格式是:用户名占用一行,密码占一行,且奇数行为用户名,偶数行为密码。如下:

vim /etc/vsftpd/vmuser_list
#虚拟用户列表
test test123

这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,所以我们需要使用db_load命令生成db口令数据库文件,命令如下:

db_load -T -t hash -f /etc/vsftpd/vmuser_list /etc/vsftpd/vmuser_list.db

 

4、为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件,如下图:

 

 

 

主要是注销原有的配置并增加如下俩行:

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

auth是指对用户的用户名口令进行验证。

accout是指对用户的帐户有哪些权限哪些限制进行验证。

再后面的/lib64/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。

注意该函数会根据系统的位数而所在位置不同。

如果是32bit系统,该文件所在位置是/lib/security/pam_userdb.so
如果是64bit系统,该文件所在位置是/lib64/security/pam_userdb.so
 
最后db=/etc/vsftpd/vmuser_list则指定了验证库函数将到这个指定的数据库中调用数据进行验证。其实该文件指的是/etc/vsftpd/login.db文件。
 
注意:db=/etc/vsftpd/vmuser_list格式是这样的,去掉.db后缀。

 

5、虚拟用户权限配置

PAM配置完毕后,我们现在开始创建虚拟用户与系统用户对应的文件。切换到/etc/vsftpd/vmuser_conf目录下,并创建test文件。

注意该文件名称一定要与vmuser_list中的虚拟用户要对应。比如现在vmuser_list文件有test用户,那么在 /etc/vsftpd/vmuser_conf目录下创建一个文件名为test的文件。设置权限有三种方法,

1、设置虚拟用户和本地用户有相同的权限,这种无需刻意修改ftp目录权限

[root@test-03 vsftpd]# cat  /etc/vsftpd/vmuser_list   
#虚拟用户列表
test test123
[root@test
-03 vsftpd]# vim /etc/vsftpd/vmuser_conf/test local_root=/data1/vsftp/data #虚拟用户登录到ftp时的默认目录 virtual_use_local_privs=YES #虚拟用户和本地用户有相同的权限 guest_username=www #设置虚拟用户对应的系统用户为www,www对/data1/vsftp/data有什么权限,虚拟用户就有什么权限
anon_umask=022

test虚拟用户,故不需要事先创建系统用户。

 

2、也可以单独配置权限,但这种单独配置权限,需要给ftp目录/data1/vsftp/data赋权为777

chmod -R 777  /data1/vsftp/data

然后编辑用户权限文件  /etc/vsftpd/vmuser_conf/test 

local_root=/data1/vsftp/data
write_enable=YES              #开启写权限
anon_umask=022                #
anon_world_readable_only=YES  #用户可以浏览目录和下载文件  
anon_upload_enable=YES        #上传权限
anon_mkdir_write_enable=YES   #创建目录权限
anon_other_write_enable=YES   #修改文件名和删除权限

 

3、可以设置虚拟用户和本地用户有相同的权限,但用参数限制详细权限,这种就不用设置ftp目录权限是777了,这个方法最安全,推荐此方法。

local_root=/data1/vsftp/data
virtual_use_local_privs=YES
guest_username=www
anon_umask=022

write_enable=NO  #禁止写入
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=NO #禁止
anon_other_write_enable=NO

 

 

 

四、启动

systemctl start vsftpd  && systemctl enable vsftpd 

 

五、客户端登录

win ,下载ftp客户端,我用的是FileZilla Client

 

 

 六、添加新用户

1、在vmuser_list 添加新用户账户密码,记住奇数行账户  偶数行密码

2、加密文件

db_load -T -t hash -f /etc/vsftpd/vmuser_list /etc/vsftpd/vmuser_list.db

3、在user_list添加一行  内容为新用户,这是允许新用户可以访问ftp

4、在vmuser_conf下添加文件,文件名就是用户名,内容为相关权限控制

5、重启ftp即可

 

七、其他知识

1、ftp主动模式及被动模式

默认为主动模式,如若修改成被动模式,

pasv_enable=YES
pasv_min_port=3000
pasv_max_port=3999
pasv_promiscuous=YES

 

工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

 

 

 

被动模式:

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

 

posted on 2019-11-08 15:43  勤劳の洗碗机  阅读(170)  评论(0编辑  收藏  举报