hualinux2.3 环境基础:centos8安装基于虚拟用户的vsfp
  f8a0V3iFVhbW 2023年11月02日 41 0


目录

​1.安装vsftp​

​1.1 dnf安装vsftp​

​1.1.1 安装vsftp​

​1.1.3 生成的目录结构及说明​

​1.1.4 用户配置文件相关参数说明​

​1.1.5 vsftp用户操作说明​

​1.2 测试​

​2.注意事项​

​2.1 每次修改必须生成一次密码并重启​

​2.2 使用guest_username指定系统用户​

​2.3 FTP客户端使用注意事项​


一般网站开发,小企业都会要求在服务器上安装ftp,我这里使用常用vsfp,使用的是虚拟用户的,虚拟用户也是在指定的系统用户的基础上再进行更细粒度的细分而已。

1.安装vsftp

1.1 dnf安装vsftp

1.1.1 安装vsftp

在linux中FTP最常用的是vsftp,一般建立是基于虚拟用户,即是非linux真实用户来做,

直接复制下面命令即可:

#需要关闭防火墙,如果不关闭则需要添加端口例外,端口为21、5000至5100

#需要关闭selinux

#------------------------------------------------------直接刷命令 开始--------------------
#1.安装vsftpd-3.0.3-28.el8
dnf -y install vsftpd
systemctl enable vsftpd
#2.基于虚拟用户的配置
cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.orig
#写入配置文件含被动模式
cat>>vsftpd.conf<<EOF
#by hua
user_config_dir=/etc/vsftpd/vuser_conf
pasv_enable=YES
pasv_min_port=5000
pasv_max_port=5100
pasv_promiscuous=YES
#force_dot_files=yes
EOF
#3.进行认证,安装Berkeley DB工具
#centos7也可以用db4 db4-utils或libdb libdb-utils
#如果db_load命令不存在则安装
if [ ! -x /usr/bin/db_load ];then dnf install libdb libdb-utils -y;fi;
#创建用户密码文本,单行为用户名,双行为密码
cat>>vuser_passwd.txt<<EOF
t1
123456fa
EOF

#生成虚拟用户认证的db文件,如添加用户则需重新生成vuser_passwd.db然后重启vsftp
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.orig
echo '#%PAM-1.0' >/etc/pam.d/vsftpd
echo 'auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd'>>/etc/pam.d/vsftpd
echo 'account required pam_userdb.so db=/etc/vsftpd/vuser_passwd' >>/etc/pam.d/vsftpd
cat /etc/pam.d/vsftpd
#创建虚拟用户配置文件
mkdir /etc/vsftpd/vuser_conf
cd /etc/vsftpd/vuser_conf/
#下面建立t1账号配置,配置名和用户名一样,有多少个用户名就有多少个配置
cat>>t1<<EOF
local_root=/disk1/tools
local_umask=022
write_enable=YES
guest_enable=yes
guest_username=daemon
anonymous_enable=no
anon_world_readable_only=no
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_umask=002
file_open_mode=0774
EOF

#修改密码文件权限只有root可以读
chmod 600 /etc/vsftpd/vuser_passwd.txt
chmod 600 /etc/vsftpd/vuser_passwd.db

#为了安全禁止匿名用户登陆,如果发现问题可以去掉
sed -i '/anonymous_enable/s/YES/NO/' /etc/vsftpd/vsftpd.conf
grep 'anonymous_enable' /etc/vsftpd/vsftpd.conf
#vsftp版本3需要用到,2版本则不需要
echo 'allow_writeable_chroot=YES'>>/etc/vsftpd/vsftpd.conf
#重启vsftp
systemctl start vsftpd
mkdir -p /disk1/tools
chown daemon.daemon /disk1/tools

#------------------------------------------------直接刷命令 结束--------------------------

ps:关于隐藏文件

如要显示隐藏文件,如果不设置的话,可以用ftp客户端选项强制显示

如果开启以'.'开头的文件和目录会被列出来,即使没有使用a标记(ls -a),也就是显示隐藏文件,默认No

force_dot_files=yes

 

1.1.3 生成的目录结构及说明

刷新上面的安装命令,则会自动生成如下/etc/vsftpd目录,结构如下:

[root@vm81 /]# tree /etc/vsftpd/
/etc/vsftpd/
├── ftpusers #这里是系统用户,这里的用户不允许通过ftp登录,
├── user_list #用户列表userlist_deny为no仅充许此文件用户,yes(默认)则永不充许
├── vsftpd.conf #配置文件,一般不用动
├── vsftpd_conf_migrate.sh #移除旧配置文件
├── vsftpd.conf.orig #这个是对原配置文件进行备份
├── vuser_conf #这个经常用到,这个是用户配置目录,里面的文件名为用户名。
│ └── t1
├── vuser_passwd.db #这个是用户生成后的密码文件,用命令生成的
└── vuser_passwd.txt #这个是我生成的,主要是明文放用户名和密码的,密码文件是根据这个明文件生成的

1.1.4 用户配置文件相关参数说明

# 本地用户登陆后改变的目录,默认是各自家目录

local_root=/disk1/tools

# 本地用户的文件umask码

local_umask=022

# 本地用户写权限

write_enable=YES

是否启用虚拟用户

guest_enable=yes

# 指定本地用户名,用来映射虚拟用户

guest_username=daemon

是否允许匿名用户登陆

anonymous_enable=no

# 如果为YES,匿名用户只能下载可读的文件,如果为no则不能读

anon_world_readable_only=no

# 是否允许匿名用户上传文件,我上面配置匿名关了,所以所有操作都不充许

anon_upload_enable=yes

# 是否允许匿名用户创建目录,我上面配置匿名关了,所以所有操作都不充许

anon_mkdir_write_enable=yes

# 是否允许匿名用户对文件增、删、改,我上面配置匿名关了,所以所有操作都不充许

anon_other_write_enable=yes

#目录为777-值,文件为666-值,新建的目录 权限是755,文件的权限是 644

anon_umask=002

#强制指定上传文件权限为0774

file_open_mode=0774

有兴趣可以看一下《​​vsftp配置文件详解​​》

 

1.1.5 vsftp用户操作说明

以后如果需要往上面增删改操作如下:

#1 添加用户

1)往vuser_passwd.txt添加账号和密码

格式为:行号为单为账号,行号为双为密码

账号

密码

账号

密码

如添加名为账号为hua 密码为123456

vuser_passwd.txt文件变成这样:

t1

123456fa

hua

123456

 

2)vuser_conf添加用户配置文件

vuser_conf目录中已经有现成的t1,直接进行修改即可,配置文件名和账号名一样

cd /etc/vsftpd/vuser_conf/

cp t1 hua

hualinux2.3 环境基础:centos8安装基于虚拟用户的vsfp_nginx

3)生成密码文件并重启服务

#重新生成密码文件并重启vsftp
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
systemctl restart vsftpd

#2 删除用户

这个更简单了,打开vuser_passwd.txt删除账号和密码,然后删除vuser_conf对应以账号命令的用户配置文件

 

#3修改用户名或密码

打开vuser_passwd.txt找到对应的账号和密码进行修改,或者对vuser_conf对应以账号命令的用户配置文件进行修改,修改后需要执行如下命令重新生成密码文件并重启vsftp

#重新生成密码文件并重启vsftp
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
systemctl restart vsftpd

1.2 测试

我使用cuteftp使用IP进行连接,我这里使用内网IP 192.168.3.81,连接效果如下图:

hualinux2.3 环境基础:centos8安装基于虚拟用户的vsfp_nginx_02

因为目录为空目录,所以没有东西,我现在测试上传一下文件试下,如果能显示则正常,如下图:

hualinux2.3 环境基础:centos8安装基于虚拟用户的vsfp_配置文件_03

有兴趣的也可以测试一下删除,点上图中已上传的1.htmlà右击“删除”

2.注意事项

2.1 每次修改必须生成一次密码并重启

每一次修改用户账号都必须生成一次密码vuser_passwd.db文件,否则不会生效!!

重启vsftp

#下面是操作命令!

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
systemctl restart vsftpd

2.2 使用guest_username指定系统用户

虚拟用户是基于系统用户的基础上,对权限再进行细分的,所以一定要指定系统用户,在配置文件中使用“guest_username=系统用户”指定。

什么叫做系统用户,简单来讲就是可以在/etc/passwd 查到的用户。

如上例子t1配置文件中guest_username=daemon

daemon是系统用户,可以在/etc/passwd 查到的。

如果是网站的话软件的进程名字。比如我的是nginx的话,就用nginx,如果有php进程我也把php配置文件进程用户改为nginx,这样的好处是web就可以对你上传的文件进行写读删除,因为有的缓存文件是php动态生成的,必须有写入权限!修改权限,删除权限!

 

比如:我查看nginx和php进程

[root@vm5  ~]# ps -ef|grep nginx|grep -v grep

nginx     1634  1632  0 May23 ?        00:00:05 php-fpm: pool www

root      1648     1  0 May23 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

nginx     1821  1632  0 May23 ?        00:00:05 php-fpm: pool www

nginx    13818  1632  0 Jun08 ?        00:00:04 php-fpm: pool www

nginx    13851  1632  0 Jun08 ?        00:00:04 php-fpm: pool www

nginx    20165  1648  0 Aug17 ?        00:11:06 nginx: worker process

nginx    20166  1648  0 Aug17 ?        00:11:18 nginx: worker process

nginx    20167  1648  0 Aug17 ?        00:11:05 nginx: worker process

nginx    20168  1648  0 Aug17 ?        00:11:23 nginx: worker process

nginx    23453  1632  0 Jun12 ?        00:00:04 php-fpm: pool www

nginx    29795  1632  0 Jul12 ?        00:00:02 php-fpm: pool www

nginx    29796  1632  0 Jul12 ?        00:00:02 php-fpm: pool www

从上面可以看到nginx和php的启动进程是nginx用户(这个用户查/etc/passwd是存在的)

[root@vm5 ~]# grep nginx /etc/passwd
nginx:x:498:499:nginx user:/var/cache/nginx:/sbin/nologin

这样guest_username配置可以写成“guest_username=nginx”,web的nginx还要能读,主要是网站是php写的,以php进程为主,一般情况都会有缓存目录要对其文件或目录进行增加,删除,修改,所以才配置“guest_username=nginx”,这样ftp虚拟用户t1的权限就和nginx一样了!

如果改为其它用户如daemon,那第目录和文件用户和组都是daemon!你上传了网站文件如果含缓存目录的话,PHP因不能写入和删除,就会出问题!

2.3 FTP客户端使用注意事项

如果用FileZilla Client连接vsftpd,

1.“常规”选项:“登陆类型”用"正常",然后输入用户名和密码

2.“传输设置”选项中:“传输模式”要用修改为“主动”不能用“默认”否则会报错,连接不上

3.“字符集”选项:建议强制用UTF-8,因为我们是centos服务器

 

如果是cuteftp,直接就可以连接

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  iFlC2TQwmEmX   2023年12月11日   34   0   0 phpthinkPHP框架
  iFlC2TQwmEmX   2023年12月09日   30   0   0 php
f8a0V3iFVhbW