Conta FTP para apenas um diretório

3

Informações básicas:

Estou usando o Serverpilot para gerenciar meu servidor Ubuntu que não fornece nenhum serviço de FTP.

  • Existe um usuário: serverpilot
  • Com o diretório inicial: /srv/users/serverpilot/
  • E há um site em execução neste diretório: /srv/users/serverpilot/apps/website/public/ .

O que eu quero:

Agora eu gostaria de ter uma conta de FTP que só pode ler e gravar neste diretório: /srv/users/serverpilot/apps/website/public/ftpdir/ .

O que eu tentei:

  • Eu instalei o vsftpd: sudo apt-get install vsftpd
  • Criado um novo usuário com esse diretório como home: sudo useradd -m -d /srv/users/serverpilot/apps/website/public/ftpdir ftpuser (provavelmente não é uma boa ideia ter um diretório inicial de um usuário em outro diretório inicial de usuários)
  • alterei a senha com sudo passwd ftpuser
  • Editou a configuração padrão vsftpd com sudo vi /etc/vsftpd.conf
    • local_enable=YES para que o ftpuser possa ser usado como login de ftp
    • write_enable=YES o usuário é capaz de escrever
    • chroot_local_user=YES não pode acessar nada fora de seu diretório inicial
    • pam_service_name=ftp porque eu estava recebendo um 530 Erro incorreto de login
  • E abri meu firewall com: sudo ufw allow 21/tcp

Os problemas:

  • Outros usuários ao lado de ftpuser também podem ser usados como login de FTP. Eu só quero ter um usuário ftp e não permitir que outros usuários do sistema usem o FTP.
  • O ftpuser também pode ser SSH no servidor.
  • Estou recebendo um erro 553 error: could not create file ao tentar enviar um arquivo. Para corrigir isso, me deparei com essa pergunta: link mas não acho que esse seja o caminho certo porque o arquivo deve ser de propriedade do usuário serverpilot , não do usuário ftpuser . O site que está sendo executado sob o usuário serverpilot deve processar os arquivos enviados.

Como já resolvi isso antes:

No passado, em outro servidor, mudei a propriedade do diretório e, depois de adicionar essas opções extras de configuração do vsftpd, ele estava finalmente funcionando:

file_open_mode=0775
local_umask=022
allow_writeable_chroot=YES
pam_service_name=vsftpd

Mas nesse servidor eu tive problemas com o processamento dos arquivos enviados por causa da propriedade, então eu estou usando a função file_get_contents() PHP para obter os arquivos pela web ao invés de acessá-los diretamente no servidor que não é ' t que bom.

A pergunta final:

Como eu posso simplesmente ter 1 login de ftp que pode ler e gravar em um diretório em um diretório home de usuários onde a propriedade permanece no usuário de onde o diretório home é?

    
por Roy 19.05.2016 / 15:30

3 respostas

2

local_enable = YES é o que está permitindo que os outros usuários façam o login, você deve adicionar seu usuário à lista de usuários explt

do manual:

local_enable
Controls whether local logins are permitted or not. If enabled,       normal user accounts in /etc/passwd (or wherever your PAM config references) may be used to log in. This must be enable for any non-anonymous login to work, including virtual users.
Default: NO

userlist_file
This option is the name of the file loaded when the userlist_enable option is active.
Default: /etc/vsftpd.user_list

Para classificar seus problemas de permissão, habilite o comando SITE CHMOD e faça com que o seu cliente ftp use-o

chmod_enable
When enabled, allows use of the SITE CHMOD command. NOTE! This only applies to local users. Anonymous users never get to use SITE CHMOD.
Default: YES
    
por Amias 06.06.2016 / 11:53
4

vsftpd não suporta usuários de limite, mas proftpd é mais poderoso e tem uma opção no arquivo de configuração ( proftpd.conf ) para limitar o login a um usuário assim:

<Limit LOGIN>
AllowUser barb
AllowUser dave
AllowGroup ftpuser
DenyAll
</Limit>

Editar

  1. para o seu primeiro problema, a solução é como acima.
  2. O segundo problema
  3. também pode ser resolvido adicionando DenyUsers ftpuser a /etc/ssh/sshd_config
  4. e o terceiro problema pode ser resolvido adicionando ftpuser ao grupo de serverpilot e adicionando serverpilot ao grupo de ftpuser . você também deve alterar a permissão da pasta /srv/users/serverpilot/apps/website/public/ftpdir para 775.

Lembre-se de que a pasta /srv/users/serverpilot/ deve ter 755 permissões.

    
por Ghasem Pahlavan 03.06.2016 / 11:06
0

Você pode usar a função pure-ftpd do PureDB para criar um login de ftp apenas para o serviço pure-ftpd .

    
por dhchen 06.06.2016 / 10:16