在共享环境中安全地配置 ProFTPd

在共享环境中安全地配置 ProFTPd

我们目前有一个用于共享虚拟主机的 LAMP 堆栈,并正在使用 ProFTP。

目前,ProFTP 配置相当固定 - 用户已 chroot 到~.当前作为默认用户/组运行。我们只使用系统用户 - 没有虚拟用户。

我们使用 SuPHP 以适当的用户/组身份运行每个 PHP 进程。

我真正想要的是让 ProFTP 自动将user:group上传的文件设置为登录的任何人。因此,如果我以“customer-a”身份登录 FTP,我希望所有上传的文件都归“customer-a”所有。

其主要原因似乎是,如果我现在以某人身份登录,他们无权写入其主目录。我希望 ProFTP 适当地切换用户上下文,而不是放松权限。

可能的解决方案

我考虑过的一件事可能是为每个客户域声明一个虚拟主机,这将允许我配置用户团体单独的指令。

1)这是一个痛苦的事情,我宁愿避免为每个创建的用户附加配置。 2)ProFTP好像不支持基于名称的虚拟主机。

或者,我可以利用用户所有者集团所有者指令,并<Directory>为配置中的每个客户创建一个新块。

我想这样的事情可能会起作用:

<Directory /home/customer-a/>
    UserOwner customer-a
    UserGroup customer-a
</Directory>

但如果能够以更通用的方式做到这一点,类似于变量%u,记录下来,那就太好了这里。但我认为这不适用于 UserOwner。

一些细节

  • 使用Ubuntu
  • ProFTP 1.3.4a
  • 阿帕奇2.2
  • 将 SuPHP 与 PHP-CGI 结合使用。

答案1

更好的解决方案是使用 MySQL 身份验证,而不是让每个客户都有一个系统帐户。这将为您提供目录位置、用户 ID 方面更大的灵活性,并提高安全性。

为此,请构建具有 mysql 支持的 proftpd。

然后在 mysql 中创建一个表(可能称为“users”):

  CREATE TABLE users (
    userid VARCHAR(30) NOT NULL UNIQUE,
    passwd VARCHAR(80) NOT NULL,
    uid INTEGER UNIQUE,
    gid INTEGER,
    homedir VARCHAR(255),
    shell VARCHAR(255),
    active BOOLEAN DEFAULT true
  );

  CREATE INDEX users_userid_idx ON users (userid);

然后添加用户。密码可以采用多种格式(根据 proftpd.conf 中的 SQLAuthTypes 指令),但您应该能够将现有的加密密码放入其中。

   INSERT INTO users (username,password, uid, homedir) VALUES ('username','APassWord', 77, '/home/sftpcustomers/custname/')

你的proftpd.conf应该有:

     SQLBackend            mysql
     SQLAuthenticate       users
     AuthOrder             mod_sql.c
     SQLAuthTypes          OpenSSL Plaintext Crypt
     SQLConnectInfo        dbname@localhost:3306 db_username db_password

     SQLUserInfo     users username password uid NULL homedir NULL
     SQLUserWhereClause "Active = 1"

相关内容