Como configurar usuários virtuais para o vsftpd com acesso a um subdiretório específico?

21

Eu preciso adicionar usuários virtuais ao vsftpd que tenham acesso somente a uma subpasta. A razão pela qual eu quero usar usuários virtuais é que eu só quero ter 1 usuário real no servidor.

A estrutura do FTP é:

  • %código%
    • %código%
      • www
    • %código%
      • website_name1
      • sub_folder1
    • website_name2
    • sub_folder2

A conta principal tem acesso à pasta www e a todos os subdiretórios e desejo adicionar um usuário virtual que possa ter acesso ao sub_folder1 e somente sub_folder1 p>

Além disso, para evitar confusão, eu também exigiria que outro usuário acessasse sub_folder3 e apenas sub_folder3 . Meu ponto de vista é que eu preciso ser capaz de escolher qual pasta e subpastas em um usuário por usuário.

Eu encontrei maneiras de adicionar usuários para ver a estrutura inteira ou o usuário de configuração chamado de pastas, que não têm utilidade para mim.

Encontrei uma pergunta semelhante postada aqui:

Como configurar o VSFTPD para vários usuários incluindo a adição de diretórios específicos

mas recomenda sub_folder3 , que eu achava geral, menos seguro.
Ou eu perdi o ponto aqui?

    
por Avenyet 19.01.2015 / 22:30

3 respostas

24

Com um pouco de brincadeira, consegui criar uma solução semi (não perfeita, mas boa o suficiente)

usando a resposta 2707974 e as informações que ganhei mais onde consegui o que preciso.

Primeiro você precisa do vsftp e do PAM instalado

apt-get install vsftpd libpam-pwdfile

Edite /etc/vsftpd.conf

nano /etc/vsftpd.conf

depois, cole o seguinte

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Edite para suas necessidades exatas o bit mais importante para os usuários virtuais é tudo após as configurações do usuário virtual comentarem

Criando usuário

Você pode usar um banco de dados ou htpasswd Achei htpasswd mais rápido e fácil de usar.

crie um diretório para armazenar seus usuários

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

adicionando usuários adicionais, basta omitir o -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Eu só consegui fazê-lo funcionar usando o CRYPT, que limita a 8 caracteres para usar mais de 8 caracteres usa o openssl para gerar um hash e um pipe compatíveis diretamente no htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

Uma vez que seus usuários são criados, você pode agora alterar o seu arquivo de configuração do PAM

nano /etc/pam.d/vsftpd

e remova tudo dentro desse arquivo e substitua pelo seguinte

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Isso ativará o login dos usuários virtuais definidos em /etc/vsftpd/ftpd.passwd e desativará os usuários locais

Em seguida, precisamos adicionar um usuário para esses usuários virtuais usarem. Esses usuários não terão acesso ao shell e serão chamados vsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

o usuário deve corresponder a guest_username=vsftpd no arquivo conf vsftpd

Definir o acesso ao diretório

A linha importante aqui é a seguinte

user_config_dir=/etc/vsftpd_user_conf

isso significa que quando user1 efetuar login, procurará o seguinte arquivo

/etc/vsftpd_user_conf/user1

este arquivo é igual ao vsftpd.conf , para que você possa definir um novo local_root

voltando à pergunta que queremos que user1 tenha acesso somente a var/www/website_name1/sub_folder1 , precisamos criar a pasta vsftpd_user_conf :

mkdir /etc/vsftpd_user_conf

Agora crie o arquivo do usuário:

nano /etc/vsftpd_user_conf/user1

e digite a seguinte linha

local_root=/var/www/website_name1/sub_folder1

Agora reinicie o vsftp

service vsftpd restart

agora você deve conseguir fazer o login como user1, que só poderá ver var/www/website_name1/sub_folder1 e qualquer pasta e arquivo dentro dele.

É agora que você pode adicionar quantos usuários desejar e limitar o acesso deles à pasta desejada.

importante lembrar que se você não criar um arquivo conf do usuário, o padrão será a pasta var / www como root (no exemplo acima)

Se a subpasta tiver a intenção de ser modificada pelo usuário, pode ser necessário alterar o proprietário da subpasta compartilhada:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1
    
por Avenyet 20.01.2015 / 17:34
10

Tente com este manual. Talvez trabalhe para você.

Como fazer isso

Instale o vsftpd e uma biblioteca PAM

Edite /etc/vsftpd.conf e /etc/pam.d/vsftpd

Crie user accouts com diretórios personalizados (em / var / www / por exemplo)

Definir diretórios com os chmod e chown

corretos

Crie um usuário administrador com acesso total ao servidor

  1. Instale vsftpd (Very Secure FTP Deamon) e libpam-pwdfile para criar usuários virtuais

Eu queria criar usuários de FTP, mas não queria adicionar usuários unix locais (sem acesso ao shell, sem diretório inicial e assim por diante). Um PAM (Pluggable Authentication Modules) ajudará você a criar usuários virtuais.

sudo apt-get install vsftpd libpam-pwdfile

  1. Editar vsftpd.conf

Primeiro, você precisa fazer o backup do arquivo original

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Em seguida, crie um novo

sudo vim /etc/vsftpd.conf

Copie e cole as seguintes linhas. O arquivo deve conter apenas estas linhas:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Registrar usuários virtuais

Para registrar um usuário, use htpasswd , por isso, suponho que você tenha apache2 trabalhando em seu servidor. Crie uma pasta vsftpd e coloque os arquivos de configuração nela.

sudo mkdir /etc/vsftpd

então

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c significa que criaremos o arquivo se ele ainda não existir -d força o MD5, você precisa dele no Ubuntu 12.04, apenas use sempre

O comando solicitará uma senha.

Se você quiser adicionar novos usuários depois:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Configurar o PAM em /etc/pam.d/vsftpd

Novamente, você precisa fazer o backup do arquivo original

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

e crie um novo

sudo vim /etc/pam.d/vsftpd

Copie e cole essas duas linhas (esse deve ser o único conteúdo). Eu insisto apenas nessas 2 linhas, perdi muito tempo mantendo os originais e apenas adicionei estes.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Crie um usuário local sem acesso ao shell

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Você pode verificar se ele foi criado com o comando id: id vsftpd. Definimos o usuário com o shell / bin / false por causa do parâmetro check_shell (mesmo se você não usá-lo). Quando o usuário final se conecta ao servidor FTP, ele será usado para direitos e propriedade:

chmod e chown .

  1. Reinicie o vsftpd

A maneira mais comum é usar o init.d como todo deamon

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Crie diretórios

De acordo com a configuração, todos os usuários serão colocados nesta pasta: / var / www / user1.

Você precisa criá-los com direitos específicos: a pasta raiz não pode ser gravada!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Nota: o usuário não pode criar arquivos ou pastas no diretório raiz.

Em vsftpd.conf , temos chroot_local_user=YES para que o usuário não consiga ver nada fora de sua pasta. Para ele, o servidor é assim:

Então, basta executar estes comandos:

mkdir /var/www/user1'
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

A pasta /var/www/user1 tem que existir ou a conexão falhará.

Agora você pode tentar se conectar ao seu FTP

  1. Crie um usuário Admin para acessar o servidor inteiro

Para criar um usuário administrador, precisamos registrar um novo usuário com htpasswd .

Antes de fazer isso, aconselho você a verificar o arquivo /etc/ftpusers que define determinados usuários que não podem se conectar ao ftp. Eu acho que é apenas para usuários locais e não para usuários virtuais, mas apenas no caso de não escolher um nome contido neste arquivo.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Agora precisamos adicionar uma nova linha em /etc/vsftpd.conf

chroot_list_enable=YES

Isso significa que seu usuário será colocado em sua pasta (como uma prisão) EXCETO usuários no / etc /

vsftpd.chroot_list

Vamos criar esse arquivo e adicionar nosso usuário. O arquivo é uma linha simples que contém "theadmin". Adicione um usuário por linha. Isso significa que você não precisa criar uma pasta /var/www/theadmin , o usuário fará o login e iniciará em /home/vsftpd .

Reinicie o servidor e pronto!

    
por 2707974 20.01.2015 / 10:06
0

sim, você pode e, para flexibilidade, criar um diretório e um arquivo userconfig,   mkdir /var/www/userconfs ou o que você quiser para mudar o nome do userconfs, então crie um arquivo específico

vi /var/www/userconfigs/ftpuseraccount

dentro do tipo, local_root=/var/www (ou o que você quiser acessar por dir) guest_username=www-data (o proprietário do ubuntu do arquivo top edit

depois de atualizar seu vsftpd.conf adicionando user_config_dir=/var/www/userconfigs (ou o que quer que você tenha substituído, essa conta acessará qualquer sdir yo especificado)

    
por Agunbiade Bolaji 09.06.2016 / 18:17