• 首页
  • 狐文
  • 狐图
  • About
狐窝
OvO
  1. 首页
  2. Linux
  3. 正文

vsftpd 安装以及配置虚拟用户上传下载

2019年04月19日 279点热度 0人点赞 0条评论

2018-10-22 from--https://blog.csdn.net/axing2015/article/details/83187315

新增的文件以及文件夹(不需要执行,下面用到的时候会创建)

touch /home/login_user.txt #存放虚拟用户名和密码(单行用户名,双行密码)
/etc/vsftpd/login_user.db #虚拟库(认证)文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_back #备份
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_back #备份
mkdir /etc/vsftpd/vsftpd_user_conf #虚拟用户配置文件目录
touch /etc/vsftpd/vsftpd_user_conf/jin01 #虚拟用户配置文件

1、安装

yum install -y vsftpd #vsftpd安装程序,配置文件默认在 /etc/vsftpd
yum install -y pam* db4* #vsftpd虚拟登陆账户必要依赖包

 

2、建立虚拟用户
1)创建用户名和密码

vi /home/login_user.txt #编辑
jin01 #单行:用户名
123456 #双行:密码
:wq #退出保存

 

2)生成虚拟库(认证)文件

执行下面命令生成虚拟库(认证)文件

db_load -T -t hash -f /home/login_user.txt /etc/vsftpd/login_user.db

 

虚拟库(认证)文件只对 root 用户可读写

chmod 600 /etc/vsftpd/login_user.db

 

扩展

-rw------- (600) #只有拥有者有读写权限。
-rw-r--r-- (644) #只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) #只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) #拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) #拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) #所有用户都有文件读、写权限。
-rwxrwxrwx (777) #所有用户都有读、写、执行权限。

 

3)配置 PAM 文件

先备份 vsftpd,再修改 vsftpd

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_back #备份
vi /etc/pam.d/vsftpd #编辑

 

在文件 vsftpd 最上面增加下面内容

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

 

pam_userdb.so 的目录在 /usr/lib64/security/pam_userdb.so
login_user 即是 login_user.db
PAM 关键字解释,请参考PAM可插拔的认证模块详解

4)增加系统用户,来对应所有虚拟用户,虚拟用户使用系统用户来访问ftp服务器

系统用户 ftpuser ,登录目录 /home/ftpuser ,禁止登录

useradd ftpuser -d /home/ftpuser -s /bin/false
chown ftpuser:ftpuser /home/ftpuser

 

useradd 命令参考 http://www.runoob.com/linux/linux-comm-useradd.html
chown 命令参考 http://www.runoob.com/linux/linux-comm-chown.html

5)修改配置文件 vsftpd.conf ,使虚拟用户可以访问 vsftpd 服务器

先备份,后修改

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_back #备份
vi /etc/vsftpd/vsftpd.conf #修改

 

增加下面配置

#使用PAM验证
pam_service_name=vsftpd
#启用虚拟用户,激活虚拟账户
guest_enable=YES
#把虚拟账户绑定为系统账户ftpuser
guest_username=ftpuser
#虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/vsftpd_user_conf

 

6)配置虚拟用户配置文件

建立 vsftpd_user_conf 配置文件目录

mkdir /etc/vsftpd/vsftpd_user_conf

 

设置虚拟用户配置文件,与虚拟账户同名,上面的 2.1

vi /etc/vsftpd/vsftpd_user_conf/jin01

 

配置 jin01 文件,增加下面配置

#浏览FTP目录和下载
anon_world_readable_only=NO
#允许上传
anon_upload_enable=YES
#允许建立和删除目录
anon_mkdir_write_enable=YES
#允许改名和删除文件
anon_other_write_enable=YES
#指定虚拟用户在系统用户下面的路径,限制虚拟用户的家目录,虚拟用户登录后的主目录。
local_root=/home/ftpuser

 

3、启动 vsftpd 或重启 vsftpd

systemctl start vsftpd #启动
systemctl restart vsftpd #重启

 

4、解决登录异常

暂时不用

setsebool -P tftp_home_dir 1

 

执行下面命令解决 500 OOPS: cannot change directory:/home/ftpuser 异常

setsebool -P ftpd_full_access 1

 

注意:在 centos7 已经没有 ftp_home_dir,使用 tftp_home_dir 替代了

在配置文件 /etc/vsftpd/vsftpd.conf 中增加下面配置,解决 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 异常

allow_writeable_chroot=YES

 

登录看不到目录问题
确保 在配置文件 vsftpd.conf 中有

#随机端口
pasv_min_port=30000
pasv_max_port=30100

 

再开启端口,执行下面命令

# 开放端口,永久
firewall-cmd --zone=public --add-port=30000-30100/tcp --permanent
# 重载配置文件
firewall-cmd --reload
# 重启firewalld服务
systemctl restart firewalld

 

5、vsftpd.conf 文件配置说明(可以直接复制使用)

#不允许匿名登录(默认YES)
anonymous_enable=NO

#允许本地登录,可以确保任何非匿名用户可以登录工作,包括虚拟用户(默认NO)
local_enable=YES

#启用任何形式 FTP 写入命令(默认NO)
write_enable=YES

#本地用户创建文件的默认权限(默认077)
local_umask=022

#匿名用户在特定环境下允许上传文件。为了让它生效,选项write_enable必须激活(write_enable是前提),
#匿名ftp用户必须要求上传位置的写的权限。这个设置也要求虚拟用户具有上传功能,
#在默认情况,虚拟用户被当做匿名用户对待(最大限制)权限。(默认NO)
#When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
anon_upload_enable=YES

#匿名 FTP 用户能够创建新目录(默认NO)
anon_mkdir_write_enable=YES

#FTP 用户但第一次进入一个新的目录将会展示消息。在默认情况下,目录扫描.message文件。但是可以通过message_file重写文件的路径(默认NO)
dirmessage_enable=YES

#录上传下载日志,默认放置到/var/log/vsftpd.log。通过设置属性 vsftp_log_file 重写(默认NO)
xferlog_enable=YES

#确保 PORT 传输连接来自端口20(默认NO)
connect_from_port_20=YES

#可以安排上传的匿名文件由其他用户拥有,chown_username进行设置(默认NO)
#chown_uploads=YES
#chown_username=whoever

#日志文件位置,可以覆盖
#xferlog_file=/var/log/xferlog

#传输日志文件的写的格式是标准的xferlog格式(默认NO)
xferlog_std_format=YES

#超时设置,客户端两个命令之间的最大时间(默认300秒)
#idle_session_timeout=600

#数据传输过程中暂停/延迟最长时间超时(默认300秒)
#data_connection_timeout=120

#定义一个唯一的用户,ftp服务器可以将其用作完全隔离且无特权的用户
#nopriv_user=ftpsecure

#服务器将识别异步ABOR请求。不推荐用于安全性(代码非常重要)。但是,不启用它可能会混淆较旧的FTP客户端(默认NO)
#async_abor_enable=YES

#ASCII模式数据传输数据上传(默认NO)
#ascii_upload_enable=YES
#ASCII模式数据传输数据下载(默认NO)
#ascii_download_enable=YES

#可自定义登录欢迎语
#ftpd_banner=Welcome to blah FTP service.

#指定不允许的匿名电子邮件地址的文件。显然对于打击某些DoS攻击非常有用(默认NO)
#deny_email_enable=YES
#可自定义匿名电子邮件地址
#banned_email_file=/etc/vsftpd/banned_emails

#登录之后本地用户(默认)会被限制到其根目录下(默认NO)
chroot_local_user=YES
#提供一个本地用户列表,然后改变他们根目录的位置(登录进来的时候的目录)(默认NO)
#chroot_list_enable=YES
#可自定义本地用户列表位置
#chroot_list_file=/etc/vsftpd/chroot_list

#允许用户使用"ls -R"命令,这个有个很小的风险。因为一个ls -R如果是在大型站点将会消耗大量资源(默认NO)
#ls_recurse_enable=YES

#vsftpd将以独立模式运行并侦听IPv4套接字,与 listen_ipv6 互斥(默认YES)
listen=NO

#监听IPv6套接字,与 listen 互斥(默认NO)
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

#本地用户登录目录
local_root=/home
#匿名用户登录目录
anon_root=/home/ftpuser
#解决异常 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
#开启虚拟用户
guest_enable=YES
#虚拟用户映射本地用户
guest_username=ftpuser
#虚拟账户配置位置
user_config_dir=/etc/vsftpd/vsftpd_user_conf
#随机端口
pasv_min_port=30000
pasv_max_port=30100
#与本地时间一致
use_localtime=YES

 

6、扩展之 SELinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统

文件位置:/etc/sysconfig/selinux
相关命令:

更多 getsebool 命令
更多 setsebool 命令

查询 ftp 相关设置信息(centos7)

getsebool -a | grep ftp

1

下面注释仅供参考

#关闭这个布尔变量会阻止 vsftpd 读取 public_content_rw_t 类型的文件和目录。如果允许用户通过 FTP 上传文件。必须开放这个布尔变量。
allow_ftpd_anon_write
#当开放这个布尔变量时只有Linux(DAC)的权限来控制访问,通过验证的用户可以读取和写入标记为 public_content_t 或 public_content_rw_t 类型的文件。
allow_ftpd_full_access
#当开放这个布尔变量时vsftpd 允许 cifs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 Samba 文件系统。
allow_ftpd_use_cif
#当开放这个布尔变量时 vsftpd 允许 nfs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 NFS 文件系统。
allow_ftpd_use_nfsvsftpd
#当开放这个布尔变量时认证用户可以读写自己的主目录中的文件。
ftp_home_dir
#当开放这个布尔变量时允许vsftpd 连接数据库。
ftpd_connect_db
#当开放这个布尔变量时容许的 httpd 作为 FTP 服务器,并且监听 FTP 端口。
httpd_enable_ftp_server
#当开放这个布尔变量时允许TFTP 访问一个公共的目录
tftp_anon_write

标签: 暂无
最后更新:2019年04月19日

OvO

狐狸

点赞
< 上一篇
下一篇 >
最新 热点 随机
最新 热点 随机
EFI Shell 命令参考命令 说明 证书的SCT相关 ssl证书生成时插入OID TrueNAS SCALE docker安装使用联合文件系统mergerfs Iptables 端口(流量)转发 如何在GIT中删除第一个提交 TrueNas 虚拟机无法连接主机 dnsmasq ipset iptables 实现对流量进行分流 新版 Ubuntu 修改IP DCHP K3S 创建portainer 通过声音进行数据传输 Windows精简部署相关简易内容 ConstraintLayout 和 Coordinator 对比 Android 为View分配id wireshark解析TCP tcpdump rpcapd 相关编译方法 双网卡调整优先级 Android 禁用IPv6
EFI Shell 命令参考命令 说明
SSH无需密码密钥登录 VPS基本安全设置介绍 Brave 编译后打包提示缺少文件 Windows下的cmd替代工具? 〔转〕戴眼镜的一定要看 在Docker容器中部署相互依赖的应用 关于 N1 旁路由的设置 6个网盘中转站 Chromium网页URL加载过程分析 windows和linux的远程桌面 Windows去重服务如何工作 编译报错 CoCreateInstance CLSID_DiaSource {E6756135-1E65-4D17-8576-610761398C3C} failed (msdia*.dll unregistered?) pycharm 有些库(函数)没有代码提示 MySQL修改root密码的多种方法 验证码破解技术四部曲之使用Tesseract(二) TrueNAS SCALE docker安装使用联合文件系统mergerfs 安卓刷机包 system.img解压 C++解密Chrome80版本数据库的方法示例代码
标签聚合
linux ipv 网卡 com 密码 下载 ssl 编译 http windows docker chrome git android https 未分类

COPYRIGHT © 2020 狐窝. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS