Configurando o ProFTPd com segurança em um ambiente compartilhado

1

Atualmente, temos uma pilha LAMP para hospedagem compartilhada e estamos usando o ProFTP com isso.

Atualmente, a configuração do ProFTP é razoavelmente armazenada - os usuários são chrooted para ~ . Atualmente em execução como usuário / grupo padrão. Usamos apenas usuários do sistema - sem usuários virtuais.

Usamos o SuPHP para executar cada processo PHP como o usuário / grupo apropriado.

O que eu realmente gostaria é que o ProFTP definisse automaticamente os user:group dos arquivos enviados para quem está logado. Então, se eu fizer login no FTP como "cliente-a", eu gostaria de fazer o upload os arquivos pertencem a "customer-a".

A principal razão para isso é, ao que parece, se eu fizer login como alguém agora, eles não têm permissão para gravar em seu diretório pessoal. Em vez de perder as permissões, gostaria que o ProFTP mudasse o contexto do usuário adequadamente.

Soluções possíveis

Uma coisa que eu considerei é talvez declarar um host virtual para cada domínio do cliente, o que me permitiria configurar o Usuário e Grupo diretivas individualmente.

1) Isso é uma tarefa difícil, eu prefiro evitar ter que anexar a configuração para cada usuário criado. 2) O ProFTP parece não suportar hosts virtuais baseados em nomes.

Como alternativa, posso usar o UserOwner e GroupOwner , e crie um novo bloco <Directory> para cada cliente na configuração.

Eu imagino que algo assim possa funcionar:

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

Mas seria bom poder fazer isso de uma forma mais geral, semelhante à variável %u , documentada aqui . Mas eu não acho que isso funcionará com o UserOwner.

Alguns detalhes

  • Usando o Ubuntu
  • ProFTP 1.3.4a
  • Apache 2.2
  • Usando SuPHP com PHP-CGI.
por Geekman 23.10.2013 / 07:14

1 resposta

0

Uma solução melhor seria usar a autenticação do MySQL e não ter cada cliente com uma conta do sistema. Isso lhe daria muito mais flexibilidade em termos de locais de diretório, IDs de usuário e também um aumento de segurança.

Para fazer isso, construa o proftpd com suporte a mysql.

Em seguida, no mysql, crie uma tabela (talvez chamada "usuários"):

  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);

Em seguida, adicione usuários. A senha pode estar em vários formatos (de acordo com a diretiva SQLAuthTypes no proftpd.conf), mas você deve poder colocar as senhas criptografadas existentes nela.

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

Seu proftpd.conf deve ter:

     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"
    
por 23.10.2013 / 17:00