Usuário SFTP com acesso apenas a uma pasta específica - permissão negada para criar arquivos

Usuário SFTP com acesso apenas a uma pasta específica - permissão negada para criar arquivos

Então, estou tentando criar um usuário que só tenha acesso a uma pasta específica dentro da minha public_htmlpasta. Criei o usuário com sucesso e consigo fazer login. Tive alguns problemas para fazer login, no início, porque a pasta precisava pertencer ao root, antes que o usuário do sftp pudesse fazer o sftp.

Então segui este guia:https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component– me instruindo a mudar a propriedade da pasta para root.

Depois de fazer isso, consigo fazer o login com sucesso, porém, depois de fazer o login, não consigo adicionar arquivos ou fazer qualquer coisa dentro desta pasta, pois ela é de propriedade do root.

Tentei criar um grupo e adicionar o usuário root e o usuário sftp como membros desse grupo, mas também não funcionou.

Minha solução foi criar outro diretório dentro da pasta sftp, usando o usuário root, e depois mudar a propriedade para o usuário sftp, mas isso parece muito hacky para mim e adicionalmente adiciona outra pasta à estrutura em árvore da qual não sou um grande fã de.

Alguma idéia de como permitir que um usuário sftp tenha acesso de gravação a uma pasta, enquanto o root permanece o proprietário?

Responder1

Há muita conversa sobre esse tipo de coisa em alguns sites de troca de pilhas. Mas caso isso não seja uma duplicata ...

No meu CentOS 7, quando você usa ChrootDirectory para restringir um usuário a um diretório, esse diretório deve pertencer ao root e não pode permitir acesso de gravação a qualquer outro usuário por permissões ou FACLs. Você pode configurar um link simbólico, mas o usuário sftp não poderá segui-lo se estiver restrito a um diretório. Então você tem que fazer isso.

Crie um usuário

useradd ftp_user

configurar senha

passwd ftp_user

Configure permissões. Seu diretório residencial será sua prisão.

chown root:root /home/ftp_user
chmod 0755 /home/ftp_user

Restrinja o usuário a essa prisão agora

vi /etc/ssh/sshd_config

Mude isso:

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

para

Subsystem sftp internal-sftp

Adicionar

Match User ftp_user
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

Salve e saia do vi.

Não se esqueça:

systemctl restart sshd 

Agora nós os enganamos. Digamos que seu cliente tenha um site no qual você permitirá que ele continue brincando em /var/www/corny_website

Certifique-se de que ele tenha permissões nesse diretório

setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website

Agora você o monta em vez de criar um link simbólico para ele.

mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/

Agora, quando o usuário faz o sftps. Ele não receberá aquele erro de pipe quebrado e só poderá ver /home/ftp_user e, além do mais, só poderá fazer upload ou download de /var/www/corny_website que ele vê como / brega_website.

informação relacionada