vsftpd文件共享

vsftpd服务器配置

关闭防火墙跟SELinux,因为SELinux默认不允许FTP共享家目录

setenforce 0

sed -i "/SELINUX=/c SELINUX=disable" 
> /etc/sysconfig/selinux

systemctl stop firewalld.service
systemctl disable firewalld.service

 

安装vsftpd,安装完成后程序位于/usr/sbin/vsftpd

yum -y install vsftpd

 

开启服务加入开机启动项

systemctl start vsftpd
systemctl enable vsftpd

 

配置文件

p187页有选项详解

主配置文件位于/etc/vsftpd/vsftpd.conf

vsftpd服务会自动寻找该目录下以.conf结尾的配置文件,并使用此配置文件启动FTP服务。

 

黑白名单

/etc/vsftpd/ftpusers文件默认是黑名单文件,格式为每一行一个用户名;

/etc/vsftpd/user_list文件比较特殊,有如下情况

#修改配置文件vsftpd.conf选项如下
userlist_enable=YES #启用user_list文件 userlist_deny=YES #此时user_list为黑名单,值为NO时为白名单

 

账户权限

1)匿名登录

用于下载服务器,对外开放不需要用户名密码,vsftpd默认开启此模式,默认共享路径为/var/ftp

 

2)本地账户登录

使用此模式需要在服务器创建用户,使用创建的账户跟密码即可登录ftp服务器

useradd -s /sbin/nologin tom
touch /home/{tom,jerry,smith}/test.txt #创建测试文件
echo "123456" | passwd --stdin tom

默认共享路径为用户家目录

需要修改配置文件/etc/vsftpd/vsftpd.conf如下选项

anonymous_enable=NO #禁止匿名访问
local_enable=YES  #开启本地账户访问
chroot_local_user=YES #禁止跨目录访问服务器其他文件。

 

3)虚拟账户登录

应用场景:大量用户访问服务器时使用。

3.1、将配置文件备份为vsftpd.conf_backup,去掉配置文件注释

grep -v "^#" /etc/vsftpd/vsftpd.conf_backup > /etc/vsftpd/vsftpd.conf

 

3.2、创建虚拟用户密码文件

vsftpd虚拟账户数据保存在Berkeley DB格式文件中,需要使用db_load工具转换。

yum -y install libdb-utils #以便使用db_load工具

vim /etc/vsftpd/vlogin
tz
123123 db_load -T -t hash -f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db #使用db_load工具将文件装换成数据库文件 chmod 600 /etc/vsftpd/{vlogin,vlogin.db} #设置权限防止其他用户跟组读取

 

3.3、配置验证PAM文件

Linux通过后缀为.pam文件来设置账户验证机制,db选项指定验证账户密码的数据库文件

vim /etc/pam.d/vsftpd.pam
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin #可不写.db后缀
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin 
#注意lib64,本次实验环境服务器为centos 64操作系统

 

3.4、增加一个系统用户virftp,所有虚拟用户都会映射到此用户

useradd -d /ftp -s /sbin/nologin virftp
mkdir -p /ftp/tz #创建虚拟用户共享目录
chown -R virftp:virftp /ftp #设置虚拟用户访问权限

 

3.5、修改vsftpd.conf配置文件

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO  #禁止匿名用户登录
local_enable
=YES #允许本地用户登录
guest_enable
=YES #启用虚拟账户
guest_username
=virftp #把虚拟账户映射到系统账户virftp
pam_service_name
=vsftpd.pam #使用虚拟用户验证(PAM验证)
user_config_dir
=/etc/vsftpd/vsftpd_viruser #设置存放各虚拟用户配置文件的目录(此目录下与虚拟用户名相同的文件为他的配置文件) allow_writeable_chroot=YES #启用chroot时,虚拟用户根目录允许写入(不写会提示错误代码500)

 

3.6、配置虚拟用户各自的配置文件

注意配置文件名称是虚拟用户名

mkdir -p /etc/vsftpd/vsftpd_viruser/;\
> vim /etc/vsftpd/vsftpd_viruser/tz

write_enable=YES  # 允许写入

anon_world_readable_only=NO  #允许浏览FTP目录和下载

anon_upload_enable=YES  # 允许虚拟用户上传文件

anon_mkdir_write_enable=YES  # 允许虚拟用户创建目录

anon_other_write_enable=YES  # 允许虚拟用户执行其他操作(如改名、删除)

anon_umask=022  # 上传文件的掩码,如022时,上传目录权限为755,文件权限为644

local_root=/ftp/  # 指定虚拟用户的虚拟目录(虚拟用户登录后的主目录)

 

3.7、使用黑白名单禁止其他用户访问

 

3.8、重启服务

systemctl restart vsftpd

 

访问FTP服务器

1)可通过浏览器访问ftp://10.154.0.110

以浏览器方式访问FTP服务器,如果配置文件中chroot_local_user没有设置为YES,则可以跨目录访问其他文件。

2)可使用curl工具

推荐使用,可以报错误码

[root@vsftp pam.d]# curl ftp://tz:123123@10.154.0.110
curl: (67) Access denied: 500
[root@vsftp pam.d]# curl ftp://tz:123123@10.154.0.110
-rw-r--r--    1 0        0               0 Sep 25 14:18 test.txt

3)利用‘FlashFXP’工具连接测试

推荐使用

4)使用我的电脑-地址栏输入

 

扩展

vsftpd是Very Secure FTP的缩写

支持IPv6和SSL加密

使用多端口通信(跟普通的ftp21传命令,20传数据不一样)

安全性体现在

  • 进程分离(不同任务的进程彼此独立运行)
  • 进程最小权限运行
  • 使用chroot禁锢进程,防止客户端访问未授权目录

主动FTP工作模式(待学习)

被动FTP工作模式

 

主动FTP工作模式

传输数据时服务器主动连接客户端

1)客户端随机开启大于1024的端口与服务器21端口建立连接,发送上传或下载命令

2)客户端随机开启大于1014的端口,并将此端口通过上一步的命令通道发给服务器21端口

3)服务器收到客户端提供的第二个端口会主动连接该端口,三次握手后完成数据通道建立

 

被动FTP工作模式

传输数据时客户端主动连接服务端

适用于客户机在防火墙后面,防止被防火墙拦截时使用

1)客户端随机开启大于1024的端口与服务器21端口建立连接

2)客户端从命令通道发送要求传输数据

3)服务器随机开启一个端口X并将端口通过命令通道发送给客户端

4)客户端收到X后,会开启一个随机端口Y,客户端主动使用Y端口与服务器X端口完成三次握手后开始数据传输

 

总结

跟着书上做,一直报错误代码500,后来百度,发现配置文件少了一行选项allow_writeable_chroot=YES

 

学习来自:《Linux运维之道 第2版》第4章

参考自:https://www.cnblogs.com/wutao1935/p/12271405.html

https://www.cnblogs.com/wangsongbai/p/11436826.html

posted @ 2020-09-25 17:15  努力吧阿团  阅读(532)  评论(0)    收藏  举报