A maior parte disso é bastante simples. O pure-ftpd-mysql
ou vsftpd
+ libpam-mysql
pode usar (com configuração suficiente) uma tabela MySQL para usuários "virtuais", chroot-los para seu próprio diretório e configurar arquivos recebidos ' umask
bits. Ambos podem usar SSL (FTPS) e podem forçar clientes a usar SSL ou permitir logins inseguros e seguros.
As permissões exigirão um pouco de lubrificação. A solução óbvia seria usar as permissões do sistema de arquivos unix:
- "x" bit nos diretórios permite que os usuários "insiram" o diretório
- "r" bit nos diretórios permite que os usuários listem o diretório
- "w" bit nos diretórios permite que os usuários criem ou excluam arquivos e subdiretórios.
- .... a menos que o bit "t" fixo esteja definido, caso em que eles não poderão excluir arquivos de propriedade de outra pessoa.
- "r" bit nos arquivos permite que os usuários leiam o arquivo
- "w" bit nos arquivos permite que os usuários gravem no arquivo
Existem dois problemas potenciais com base nos seus requisitos.
A questão menor é a distinção entre "escrever" e "sobrescrever". Alguém com acesso de gravação ao arquivo pode apagar todos os dados do arquivo (truncá-lo) e preencher o arquivo com dados completamente diferentes. Não tenho certeza se o protocolo FTP permite isso (continuar de um deslocamento de 0 talvez?). Alguém sem acesso de gravação ao arquivo, mas com acesso de gravação ao diretório, pode excluir o arquivo e criar um novo arquivo com o mesmo nome de arquivo.
O maior problema é que criar e excluir arquivos é um único sinalizador. Se você precisa ter arquivos que os usuários não podem excluir no mesmo diretório dos arquivos que podem, a solução mais fácil é criar dois usuários: um usuário ftpuser
para o qual todos os seus usuários virtuais serão mapeados e um usuário ftpnodel
quem será o proprietário de todos os arquivos que você não quer que eles excluam, mas que ninguém faz login como. Em seguida, você definirá o bit em todos os diretórios, chown
os arquivos undeletable para ftpnodel
.
Com esta solução, você usaria os bits rwx "user" para controlar o acesso normal a arquivos e diretórios, e os bits rwx "world" (também conhecidos como "outros") para controlar o acesso aos arquivos ftpnodel.