Alterar permissões de gravação para SFTP preso nega login


14

Examinei muitos sites e fóruns sobre como configurar um usuário SFTP preso a um determinado diretório usando o CHROOT. Aqui estão as etapas que segui, mas não consigo obter permissões de gravação para funcionar.

Configuração

sshd_config

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp


Match group webmaster
        X11Forwarding no
        ChrootDirectory %h
        AllowTcpForwarding no
        ForceCommand internal-sftp

Criar pasta

mkdir /var/www/sites

Criar usuário e grupo

useradd uploader
passwd uploader
usermod -d /var/www/sites uploader
groupadd webmaster uploader
groupadd www-data uploader

Permissões e Propriedade

chown root:root /var/www
chmod 755 /var/www/sites

Agora, com essas configurações, o usuário que fez o upload do arquivo pode fazer o SFTP no diretório inicial, mas não pode gravar no diretório.

Existem 2 erros típicos que ocorrem: não consigo fazer login ou não tenho permissões de gravação.

Erro de login

Error:    Network error: Software caused connection abort
Error:    Could not connect to server


Changing permissions of /var/www/sites to 775 or 777 causes login error.
chown /var/www/sites to uploader:root causes login error.
chwon root:webmaster or root:www-data I have no write permissions

Estou no fim tentando descobrir isso e se alguém puder me indicar a direção certa, eu agradeceria muito.

Obrigado.

Respostas:


16

Descobri a solução. O usuário está preso em /var/www/sites. Eu criei outra pasta /var/www/sites/site1.

Eu uso:

chown root:webmaster /var/www/sites/site1 
chmod 775 /var/www/sites/site1

Isso permitiu que o diretório inicial tivesse as permissões corretas para fazer login e, em seguida, pudesse gravar na próxima pasta.

Se o usuário precisar de acesso de gravação /var/www/sites, você deverá prender o usuário no /var/wwwqual possui root:root755 permissões e permissões. Você precisará atribuir a /var/www/sitespropriedade root: (seu grupo) e permissões 775.


1

Talvez a melhor solução seja:

mkdir /var/www/sites/myfirstuser/hisownsite
mkdir /var/www/sites/myseconduser/hisownsite

...

chown root:root /var/www/sites /var/www/sites/{myfirstuser,myseconduser} && chmod 755 /var/www/sites/{myfirstuser,myseconduser}

chmod 775 /var/www/sites/myfirstuser/hisownsite
chmod 775 /var/www/sites/myseconduser/hisownsite
chgrp www-data /www/sites/myfirstuser/hisownsite /var/www/sites/myseconduser/hisownsite

Adicione os usuários:

useradd -d /var/www/sites/myfirstuser -s /bin/false -g www-data  dev1
useradd -d /var/www/sites/myseconduser -s /bin/false -g www-data dev2
passwd dev1
passwd dev2

Em seguida, para cada usuário que você criou, adicione uma tag ssh assim: (você também pode usar a diretiva "Match Group", como no seu exemplo, em vez de "Match User")

Match User dev1
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Match user dev2
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Assim, você pode gerenciar todos os usuários necessários em um ambiente chroot.

Fabrizio Hth


Re seu bloco de código final: Matches suportam vários destinos em listas separadas por vírgula, para que pudéssemos simplificar / organizar bastante que, com um único conjunto de substituições para os dois usuários, por cabeçalhoMatch User dev1,dev2
underscore_d

1
Então, como você o define para que fiquem bloqueados na pasta à qual têm acesso de leitura / gravação?
Kevin B Burns,
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.