Desejo dar a um cliente acesso ao meu servidor, mas quero limitar esses usuários aos seus diretórios pessoais. Vou montar montagem em todos os arquivos que eu quero que eles possam ver.
Criei um usuário chamado bob
e o adicionei a um novo grupo chamado sftponly
. Eles têm um diretório inicial em /home/bob
. Mudei o shell deles /bin/false
para parar os logins do SSH. Aqui está a /etc/passwd
linha deles :
bob:x:1001:1002::/home/bob:/bin/false
Também alterei o /etc/ssh/sshd_config
para incluir o seguinte:
Match Group sftponly
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
Quando tento fazer login como eles, eis o que vejo
$ sftp bob@server
bob@server's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
Se eu comentar a ChrootDirectory
linha, posso entrar no SFTP, mas eles terão rédea livre no servidor. Eu descobri que ChrootDirectory /home
funciona, mas ainda dá acesso a qualquer diretório pessoal. Eu tentei explicitamente, ChrootDirectory /home/bob
mas isso também não funciona.
O que estou fazendo errado? Como posso limitar bob
a /home/bob/
?
----EDITAR-----
Ok, então eu só dei uma olhada /var/log/auth.log
e vi o seguinte:
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May 9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob
Não tenho certeza do que está acontecendo lá, mas sugere que algo está errado com o diretório do usuário. Aqui está a ls -h /home
saída:
drwxr-xr-x 26 oli oli 4096 2012-01-19 17:19 oli
drwxr-xr-x 3 bob bob 4096 2012-05-09 14:11 bob
ChrootDirectory /home/%u
pode ser substituídoChrootDirectory %h
.Respostas:
Toda essa dor se deve a vários problemas de segurança, conforme descrito aqui . Basicamente, o diretório chroot deve pertencer
root
e não pode ter acesso de gravação em grupo. Adorável. Então você precisa essencialmente de transformar o seu chroot para uma cela e dentro de que você pode ter seu conteúdo editável.E bam, você pode fazer login e escrever
/writable
.fonte
root
. Neste exemplo,/home
também deve pertencer à raiz.Subsystem sftp /usr/lib/openssh/sftp-server
linha paraSubsystem sftp internal-sftp -f AUTH -l VERBOSE
antes que isso funcionasse.Para chroot um diretório SFTP, você deve
Crie um usuário e force a raiz a ser o proprietário
Altere o local do subsistema em / etc / ssh / sshd_config:
e crie uma seção do usuário no final do arquivo (o ssh pode morrer de novo se colocado após a linha do subsistema):
fonte
john
está bloqueado no/home/john
diretório você concedeu755
permissões ao diretório. então o proprietário leu (4), escreve (2) e executa (1), e o grupo leu (4) e executou (1). você também definiu o proprietário e o grupo comoroot
, entãojohn
pertence a outro. ele também leu e executou (4 + 1 = 5) então. então você bloqueou john em um diretório em que ele não tem privilégios de gravação. Como consertar isto? alterar privilégios757
ou até777
interromper o login. alterar o grupo ou proprietário para john também interrompe o login./home/userx/sftproot/uploads
e sftpuser em / home / sftpuse. Eu configurei o chroot/home/usex/sftproot
para pertencer a root: root e chmod 755. Ele/home/usex/sftproot/uploads
é exibido por sftpuser: sftpuser. Eu recebo o mesmo erro da pergunta inicial acima. O chroot e todas as pastas pai precisam pertencer a root: root para que o sftp funcione?Passei o dia inteiro tentando obter um compartilhamento de rede na minha framboesa. Eu queria bloquear o usuário para que ele não pudesse navegar por todo o sistema de arquivos, sem acesso de login ssh e queria ter acesso de gravação ao compartilhamento de rede.
E aqui está como eu consegui:
Primeiro, criei um usuário:
Em seguida, editei
/etc/passwd
e verifiquei que ele possui/bin/false
para o usuário, para que a linha fosse:Eu editei
/etc/ssh/sshd_config
para incluir:Proprietário e permissões do diretório inicial alterados:
Ok, então, depois de tudo isso, consegui conectar usando o
sshfs
modo somente leitura. O que eu tive que fazer para obter uma pasta gravável:Foi isso, funcionou sem mais alterações. Observe que eu tenho apenas permissões graváveis para o usuário , não para o grupo, como muitas outras soluções online. Consegui criar / excluir / editar / renomear arquivos / pastas sem problemas.
Ao acessar usando
sshfs
com o usuário netdrive por causa da configuração do chroot, eu veria apenas as coisas armazenadas no/home/netdrive/
diretório do servidor , perfeitas. A/home/netdrive/home/netdrive/
estrutura de diretórios repetida foi o que fez com que eu trabalhasse com uma solução gravável chroot ssh limpa .Agora vou explicar abaixo os problemas que tive:
Você provavelmente não deve executar os seguintes parágrafos :
Depois de analisar as soluções acima (e muitas outras na rede que até usavam o acl (listas de controle de acesso)), eu ainda não conseguia fazê-lo funcionar, porque o que fiz a seguir foi:
O seguinte NÃO funcionou para mim:
Porque o usuário netdrive ainda não conseguiu escrever nesse
/home/netdrive/writable/
diretório, apesar de possuir a pasta e ter as permissões. Então fiz: sudo chmod 775 / home / netdrive / writable / E agora eu podia criar um diretório e excluí-lo, mas não consegui editá-lo porque estava sendo criado sem permissões de gravação de grupo. Aqui, pelo que vi na internet, as pessoas usamacl
para consertar. Mas não fiquei satisfeito com isso, pois tinha que instalaracl
, configurar pontos de montagem etc. Também não tenho idéia de por que precisaria de permissão de grupo para gravar em uma pasta pertencente ao mesmo usuário.Parece que, por algum motivo, ao criar
/home/netdrive/home/netdrive
e dar propriedade à últimanetdrive
pasta, pude fazer tudo funcionar sem mexer nas permissões de grupo .fonte
Eu segui este artigo, mas não funcionou. Começou a funcionar depois que eu fiz essa alteração (sugerida nas respostas acima):
Além disso, criei o diretório pessoal proprietário raiz, no qual eu tinha o subdiretório gravável pelo usuário (como descrito acima).
A coisa nova e útil que desejo adicionar com esta resposta é que você pode simplificar a configuração simplesmente especificando% h como diretório inicial do usuário:
Eu descobri isso graças a este link.
fonte