0
点赞
收藏
分享

微信扫一扫

项目实践-vsftpd虚拟用户-使用总结

b91bff6ffdb5 2022-03-26 阅读 97
javamysql

-----------业务需求-------

1、需求1: 数据共享。用户a用 ftp提交文件,其他用户通过ftp可以下载文件。到期不让用户下载文件。

2、需求2: 数据汇交。不同用户连ftp将自己汇交的文件提交到自己的目录,然后指定一个用户连ftp去收集那些用户的文件。

 

-------实现方案--------

用vsftpd +MySQL虚拟用户实现

 

----------踩坑之路,十分心酸-----

在弄vsftpd的时候,遇到了很多问题,都是遇到一个,百度查阅一个,解决一个。

 

----------vsftpd安装------

     大概是三步。

    1.安装mysql。建张存放虚拟用户的表ftpuser,存放虚拟用户的账号密码。密码可以明文、password、md5值,跟pam.d文件配置对应。

    2.安装vsftpd。安装完,/etc/vsftpd/vsftpd.conf要配置用户权限文件夹,pam.d模块等信息。

    3.安装vsftpd MySQL pam.d 的安全模块。配置mysql虚拟用户表的相关信息。

 

百度很多安装的文章(搜索关键字 :vsftpd mysql虚拟用户),找了大概的一篇(因为也不是我安装的基础环境,所以这边细的不懂)

https://www.cnblogs.com/lvzhenjiang/articles/14406450.html

 

----------开发思路与步骤------

    1.java

代码里用root用户去创建用户权限文件夹,以及创建用户权限文件。(百度有相关的java操作linux的帮助类)

    2.根据读写需求,写虚拟用户的权限文件内容。往mysql 建的用户表写用户账号密码。只有mysql里账号密码对了+有权限文件,以及对应的权限,用户才能登陆上分配给他对应的目录。

    3.设置创建的ftp文件夹的归属用户,第一步创建的是root用户的,要改成虚拟用户映射用户(比如说用户是 ftpuser)以及组的权限,让文件夹变成这个用户和组的,才有权限写文件。

      修改目录以及子子目录的归属。chown -R ftpuser:ftpuser /data/ftpuser

        (用户:组  目录)

    4. 设置用户不能访问ftp。相当于说是 没有权限,就是把用户从mysql  ftpuser表数据里删了。没删权限文件跟提交的文件。

 

--------遇到的问题-------

 

-----Ftp登陆不上----

Mysql密码加不加密,就看pan.d加密函数与mysql版本的加密函数是否一样,一样才有用。选择没加密。

-------

问题:输入ftp地址-用户密码后赚到目录报错。

错误:

响应: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

错误: 严重错误: 无法连接到服务器

解决:

用户配置加allow_writeable_chroot=YES

 

---------

问题:文件上传-修改出错

错误:ftp上传(553 Could not create file.) 修改(550 Rename failed.)

 解决:把ftp的路径(比如:/data/ftpuser),目录赋给ftp的虚拟用户ftpuser。(在root用户登录的情况,赋予opt目录给liuhai这个用户权限)。

 没给之前,文件夹归属显示的是root root。设置之后,是ftpuser的。

chown -R ftpuser:ftpuser /data/ftpuser

 

--------

问题:自己能上传下载文件,其他人不能下载。

原因:因为linux对文件权限有控制,需要设置文件的属性,支持其他用户操作。

解决:

因为是每个用户提交的文件,所以不能也不现实说用户提交一个文件,然后通过Linux命令去修改属性。

vsftpd有个控制虚拟用户对文件的权限,anon_umask=022 后面这个数字表示linux.权限777-022=755,755的权限。

 

 

 

 

-----vsftpd 虚拟用户-写的--权限--------

 

 

# 虚拟用户根目录

local_root=/data/ftpuser/test

# 允许写入

write_enable=YES

# 允许下载

download_enable=YES

# 允许上传

anon_upload_enable=YES

# 允许新建文件夹

anon_mkdir_write_enable=YES

# 允许删除_修改等操作

anon_other_write_enable=YES

# 允许在根目录下操作。

allow_writeable_chroot=YES

# lzr 虚拟用户的权限,这样写出来的文件其他人才能下载。linux的文件属性

anon_umask=022

 

 

------linux chown详解-------

 

 

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。

 

 

1.命令格式:

 

 

chown[选项]...[所有者][:[组]]文件...

 

 

2.命令功能:

 

 

    通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。

 

 

3.命令参数:

 

 

  必要参数:

 

 

-c显示更改的部分的信息

 

 

-f忽略错误信息

 

 

-h修复符号链接

 

 

-R处理指定目录以及其子目录下的所有文件

 

 

-v显示详细的处理信息

 

 

-deference作用于符号链接的指向,而不是链接文件本身

 

 

  选择参数:

 

 

--reference=<目录或文件>把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组

 

 

--from=<当前用户:当前群组>只有当前用户和群组跟指定的用户和群组相同时才进行改变

 

 

--help显示帮助信息

 

 

--version显示版本信息

举报

相关推荐

0 条评论