• ubuntu下配置ProFtpd服务使用sqlite3作为后端用户认证


    个人机器需要开个文件共享,Linux机器懒得配置SMB,就直接安装了ProFtpd,以做FTP服务器

    Ubuntu安装挺简单,可使用就不那么友好了,配合GAdmin-Proftpd,一样不好用。

    首先就卡在用户上,默认ftp用户等等都登录不进,各种认证失败,麻烦死了

    搜索一下资料,可以支持Sqlite3做后端用户认证

    就修改了一下Proftpd的配置,首先在modules.conf打开sql认证的终端

    LoadModule mod_sql.c
    
    ......
    
    # Install proftpd-mod-sqlite and decomment the previous
    # mod_sql.c module to use this
    LoadModule mod_sql_sqlite.c
    

    然后再配置Sqlite3的配置,直接从网络上抄下来的,内容直接存为一个文件,放在/etc/proftp.d/conf.d/目录下

    #首先来说这俩,定义proftpd以什么身份来运行,跟apache里的是一个意思
    #我是习惯了apache定义为www用户和www组,配置proftpd也就这样了
    #以什么身份运行,我个人感觉没啥特别意义,关键是虚拟用户对实体用户的映射!
    User ftp
    Group nobody
    #sqlite2跟3差别较大,各软件平台对其支持也是分开来的,比如PHP
    #这里就是指明,使用sqlite3
    SQLBackend sqlite3
    #数据库文件的绝对路径,一定要绝对
    SQLConnectInfo /usr/local/lib/ftpd.db
    #数据库内虚拟用户的密码认证方式
    #我认为Backend的意思就是数据库自己的认证方式,比如mysql的password方案
    #该方案可以指定多种,使用空格隔开,按照先后,依次try
    #下面这句的意思就是“先用sqlite自己的认证方式(我用的明文,其他解决方案没研究)
    #如果不行,再使用crypt(3)的方案”,实际配置文件里我只要了一个Plaintext
    SQLAuthTypes Plaintext Backend Crypt
    #自定义存放用户信息的表和字段
    #下面这句的意思就是
    #users表 里的 字段:用户名 密码 系统映射uid 系统映射gid 主目录 shell路径
    #切记:表和字段的名字可以随便起(跟实际数据库中的表和字段相对应),但顺序不可乱
    #按照我对英文howto的理解,前4个字段名是必须要设置的,后两个如果自己用不上
    #必须使用NULL来填补,这样mod_sql模块就不会去检索这俩字段了
    SQLUserInfo users user_name user_passwd uid gid home_dir NULL
    #如果主目录字段名设置为NULL,那么这里这个就必须要定义
    #这个是用来定义那些没有“主目录定义的用户”的主目录,有点绕口:P
    #SQLDefaultHomedir “/tmp”
    #这个参数设置为off的意思,是不让proftpd去检查该FTP用户映射到系统里的用户的shell
    #就是说,有没有shell,我都让你登陆。特别是上面的字段,将shell路径这个设置为了NULL
    RequireValidShell off
    #组信息,没啥意思,就这么放着吧,意思跟上面那个SQLUserInfo一样
    #表名 组名 组id 成员
    SQLGroupInfo groups group_name gid members
    #这里是用户身份认证的程度,只验证user,连带group啥的都验证
    #图简单,我这里只验证user这一层
    SQLAuthenticate users
    #设置ProFTPD允许登陆的最小UID,这个UID是映射到linux系统内实际用户的UID,小于这个值将不允许登陆
    #这个值如果不设置,系统默认的是999,在很多国内的文章里,uid和gid都是设置5000多
    #所以即使不管这个值,也不会有问题,可是如果你跟我一样,映射用户的uid和gid都小于999了,就要注意它了
    #我的www用户的uid和gid都是504,在这里,卡了我有一个多小时,TNND
    SQLMinUserUID 1000
    #这两个的意思,是所有未在数据库中定义uid和gid的用户的默认uid及gid
    SQLDefaultUID 1001
    SQLDefaultGID 1002
    

    最后建立SQLITE3的数据库

    执行sqlite3 /usr/local/lib/ftpd.db

    输入如下两个SQL语句,分别创建表,及插入一个用户 

    CREATE TABLE "users" ("user_name" varchar(20), "user_passwd" varchar(50), "uid" int(11) NOT NULL DEFAULT 1001, "gid" int(11) NOT NULL DEFAULT 1002, "home_dir" varchar(200), "shell" varchar(200));
    
    INSERT INTO "users" VALUES('test','test',1001,1002,'/home/www/ftp/test',NULL);
    

     使用test用户就可以登录了。

    表的uid和gid的默认值都设置为了1001/1002,即XXX用户在系统内的uid和gid的值。新添加字段时,这两个字段我也设置了。XXX用户和组在我系统内是早就建好的,uid和gid分别都是1001/1002。

    通过这两个字段的值,就完成了proftpd内的虚拟用户跟系统内实体用户的映射 

    如果插入的虚拟用户的UID与GID都是1000,那创建的文件/目录就归属于当前用户了(大多是系统建立时的第一个用户)

    然后配置目录权限,我希望做到是所有用户只允许上传、下载,不允许删除

    简单配置一个文件放在/etc/proftp.d/conf.d目录下

    <Limit DELE RMD> 
         DenyAll #全部匿名用户在download文件夹不能WRITE写入、删除、删除文件夹 
    </Limit> 

    配置文件备份:https://files.cnblogs.com/files/eaglexmw/proftpd.conf.tar.gz

  • 相关阅读:
    Java面向对象编程之异常处理机制
    LinkedList链式集合
    Java之反射机制
    适配器模式
    QuickHit
    Java之单例模式
    Java面向对象之接口
    多线程
    线程同步
    试题分析
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/10205859.html
Copyright © 2020-2023  润新知