vsftpd FTP服务器安装与配置
时间:2022-05-03
本文章向大家介绍vsftpd FTP服务器安装与配置,主要内容包括3.4. vsftpd - The Very Secure FTP Daemon、3.4.2. ftp 帐号的shell权限、3.4.3. vsftpd 认证模块、3.4.4. chroot、3.4.5. FAT、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
本文节选自《Netkiller Linux 手札》
3.4. vsftpd - The Very Secure FTP Daemon
3.4.1. 安装 vsftpd
3.4.1.1. Ubuntu 环境安装
$ sudo apt-get install vsftpd
test
[08:25:37 jobs:0] $ ncftp ftp://127.0.0.1
NcFTP 3.2.1 (Jul 29, 2007) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.7)
Logging in...
Login successful.
Logged in to 127.0.0.1.
Current remote directory is /.
ncftp / >
enable local user
$ sudo vim /etc/vsftpd.conf
# Uncomment this to allow local users to log in.
local_enable=YES
chroot_local_user=YES
$ sudo /etc/init.d/vsftpd reload
testing for local user
$ ncftp ftp://neo@127.0.0.1/
NcFTP 3.2.1 (Jul 29, 2007) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.7)
Logging in...
Password requested by 127.0.0.1 for user "neo".
Please specify the password.
Password: *******
Login successful.
Logged in to 127.0.0.1.
Current remote directory is /home/neo.
ncftp /home/neo >
3.4.1.2. CentOS 7 环境安装
yum install -y vsftpd
systemctl enable vsftpd
cp /etc/vsftpd/vsftpd.conf{,.original}
sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf
sed -i 's/listen_ipv6=YES/listen_ipv6=NO/' /etc/vsftpd/vsftpd.conf
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
systemctl start vsftpd
firewalld 防火墙
# firewall-cmd --permanent --add-port=21/tcp
iptables
sed -i 's/IPTABLES_MODULES=""/IPTABLES_MODULES="ip_conntrack_ftp"/' /etc/sysconfig/iptables-config
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
3.4.2. ftp 帐号的shell权限
我们不想让FTP用户通过shell登录系统, 可以将用户的Shell改为/sbin/nologin
neo:x:1000:1000:neo,,,:/home/neo:/sbin/nologin
3.4.3. vsftpd 认证模块
3.4.3.1. pam_shells.so
# cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
/etc/vsftpd/ftpusers 列表中的用户将不能登录ftp服务器
3.4.3.2. virtual user
创建明文密码文件,一行用户名后回车跟一行密码
# cat virtual-users.txt
user
password
neo
123456
jam
654321
转为数据库文件
# sudo apt-get install db-util
# db_load -T -t hash -f virtual-users.txt /etc/vsftpd/virtual-users.db
创建插件认证配置文件 /etc/pam.d/vsftpd-virtual
auth required pam_userdb.so db=/etc/vsftpd/virtual-users
account required pam_userdb.so db=/etc/vsftpd/virtual-users
/etc/vsftpd/vsftpd.conf:
# virtual users to use local privs, not anon privs
virtual_use_local_privs=YES
# the PAM file used by authentication of virtual uses
pam_service_name=vsftpd-virtual
# in conjunction with 'local_root',
# specifies a home directory for each virtual user
user_sub_token=$USER
local_root=/var/www/virtual/$USER
# the virtual user is restricted to the virtual FTP area
chroot_local_user=YES
# hides the FTP server user IDs and just display "ftp" in directory listings
hide_ids=YES
guest_enable=YES
guest_username=nobody
# the umask for file creation
local_umask=022
guest_username=nobody 虚拟用户将使用nobody用户作为他的uid,gid.
# mkdir /var/www/virtual/mary
# chown ftp:ftp /var/www/virtual/mary
3.4.3.3. 虚拟用户权限
vim /etc/vsftpd.conf
user_config_dir=/etc/vsftpd/conf.d
mkdir /etc/vsftpd/conf.d
neo 只能下载不能上传
echo "anon_world_readable_only=NO" > /etc/vsftpd/conf.d/neo
jam 可以下上传跟下载
echo "anon_world_readable_only=NO" > /etc/vsftpd/conf.d/jam
echo "anon_upload_enable=YES" >> /etc/vsftpd/conf.d/jam
echo "write_enable=YES" >> /etc/vsftpd/conf.d/jam
3.4.4. chroot
3.4.4.1. local user
chroot 所有本地用户
chroot_local_user=YES
3.4.4.2. /etc/vsftpd/chroot_list
受限用户用户添加到文件vsftpd.chroot_list
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
注意:每行一个用户名
3.4.4.3. test
adduser -o --home /www --shell /sbin/nologin --uid 99 --gid 99 --group nobody www
echo "www:chen" | chpasswd
echo www > /etc/vsftpd/chroot_list
ncftp ftp://www:chen@172.16.0.1
3.4.5. FAT
3.4.5.1. vsftpd: refusing to run with writable root inside chroot()
添加 allow_writeable_chroot=YES 项到 /etc/vsftpd/vsftpd.conf 配置文件
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
重启 vsftpd
- php-redis扩展模块安装记录
- [silverlight基础]仿文字连接跑马灯效果-高手绕道
- 未解决:长字符串含…
- Iptables防火墙规则使用梳理
- “正在注册字体”问题解决
- linux下安装php的swoole扩展模块(安装后php加载不出来?)
- linux下查询域名或IP注册信息的操作记录(whois)
- 域名资讯:多枚区块链域名结拍,区块链概念火热
- 一批好米交易:qrf.com15.4万元结拍
- mysql主从同步(2)-问题梳理
- 老丁独家!前方高能,与“程序崩溃”的第一次邂逅!
- 微信可接收火车购票、退票及改签等通知啦!别忘了,春运火车票下周开售!
- 如何用SPSS分析问卷?用SPSS分析调查问卷数据的方法
- 【5】基于Log4Net的日志系统
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 算法——递归
- LeetCode 94 | 基础题,如何不用递归中序遍历二叉树?
- 读源码——cglib动态代理
- 每日一题 | 字符串转换问题
- Git同时上传到github和码云(国内知名的男性交友网站)
- 读源码——Guava-Cache
- LeetCode 94 | 构造出所有二叉搜索树
- 每日一题 | 最大考试分数问题
- 计算广告——收入分解
- 浅谈mybatis中的占位符
- Python | 详解Python中的协程,为什么说它的底层是生成器?
- 初识Mybatis中的动态sql
- Raw use of parameterized class 'Future'
- javaweb遇到的报错问题以及解决方案(持续更新)
- Spark Java UDAF 输入struct嵌套结构