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

浙公网安备 33010602011771号