Tentando configurar o SFTP apenas em uma cadeia chroot para um usuário

6

Espero que vocês possam ajudar e ver se eu fiz algo estranho aqui, estou tentando fazer o login com um usuário que eu configurei, o FileZilla me mostra:

Command:    open "///@///" Command: Pass: ********
Status: Connected to ///
Error:  Connection closed by server with exitcode 1
Error:  Could not connect to server

Então, entrei no auth.log e vejo isso:

Feb 12 11:08:49 sshd[12056]: Accepted password for /// from /// port /// ssh2
Feb 12 11:08:49 sshd[12056]: pam_unix(sshd:session): session opened for user /// by (uid=0)
Feb 12 11:08:50 sshd[12164]: subsystem request for sftp by user ///
Feb 12 11:08:50 sshd[12056]: pam_unix(sshd:session): session closed for user ///

Esta é a entrada passwd para o usuário em questão:

///:x:666:666:///,,,:/chroot:/usr/bin/rssh

Se eu tentar executar o rssh, obtenho Allowed commands: sftp , então parece que ele está configurado corretamente. Quanto à pasta que eu configurei como a pasta home, ela pertence ao grupo "sftp" do qual o usuário é membro.

Obviamente, estou fazendo algo errado aqui, então qualquer dica sobre o que eu devo tentar para chegar perto de uma solução é apreciada.

edit : Funciona bem se eu mudar / usr / bin / rssh para / bin / bash, mas o usuário ainda pode navegar pelo sistema inteiro, o que não é o ideal. Basicamente, eu quero que o usuário venha direto para um diretório, faça o que quiser lá, até onde está lendo arquivos, mas não consiga subir no sistema de arquivos, executar outras coisas binárias e assim por diante.

    
por pzkpfw 12.02.2013 / 11:32

1 resposta

6

1. Crie um novo grupo

Crie um grupo chamado sftpusers. Somente usuários pertencentes a esse grupo serão automaticamente restritos ao ambiente chroot do SFTP neste sistema.

# groupadd sftpusers

2. Criar usuários (ou modificar usuário existente)

Digamos que você queira criar um usuário guestuser que deve ter permissão apenas para executar SFTP em um ambiente chroot e não deve ter permissão para executar o SSH.

O seguinte comando cria guestuser, atribui este usuário ao grupo sftpusers, faz / incoming como o diretório home, set / sbin / nologin como shell (o que não permitirá ao usuário ssh e obter acesso ao shell).

# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser
# passwd guestuser

Verifique se o usuário foi criado corretamente.

# grep guestuser /etc/passwd
guestuser:x:500:500::/incoming:/sbin/nologin

Se você quiser modificar um usuário existente e torná-lo apenas um usuário do sftp e colocá-lo na jaula do sftp chroot, faça o seguinte:

# usermod -g sftpusers -d /incoming -s /sbin/nologin john

Em uma nota relacionada, se você tiver que transferir arquivos do Windows para o Linux, use qualquer um dos clientes sftp mencionados nesta lista dos 7 principais clientes do Sftp.

3. Configuração do subsistema sftp-server no sshd_config

Você deve instruir o sshd a usar o sftp interno para o sftp (em vez do sftp-server padrão).

Modifique o arquivo / etc / ssh / sshd_config e comente a seguinte linha:

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

Em seguida, adicione a seguinte linha ao arquivo / etc / ssh / sshd_config

Subsystem       sftp    internal-sftp

Deveria ser assim:

# grep sftp /etc/ssh/sshd_config
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

4. Especifique o diretório Chroot para um grupo

Você deseja colocar apenas determinados usuários (ou seja, usuários pertencentes ao grupo sftpusers) no ambiente chroot jail. Adicione as seguintes linhas no final de / etc / ssh / sshd_config

Match Group sftpusers
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

Acima:

  • Corresponder sftpusers do grupo - Isso indica que as linhas a seguir ser correspondido apenas para usuários que pertencem a sftpusers de grupo
  • ChrootDirectory / sftp /% u - Esse é o caminho que será usado para chroot após o usuário ser autenticado. % u indica o usuário. Assim, para john, isso será / sftp / john.
  • ForceCommand internal-sftp - Isso força a execução do interno-sftp e ignora qualquer comando que são mencionados no arquivo ~ / .ssh / rc.

5. Crie o diretório pessoal do sftp

Como especificamos / sftp como ChrootDirectory acima, crie esse diretório (que é equivalente ao seu diretório / home típico).

# mkdir /sftp

Agora, sob / sftp, crie os diretórios individuais para os usuários que fazem parte do grupo sftpusers. ou seja, os usuários que terão permissão apenas para executar o sftp e estarão em ambiente chroot.

# mkdir /sftp/guestuser

Assim, / sftp / guestuser é equivalente a / para o guestuser. Quando o guestuser se desloca para o sistema e executa "cd /", eles verão apenas o conteúdo dos diretórios em "/ sftp / guestuser" (e não o real / do sistema). Esse é o poder do chroot.

Portanto, sob este diretório / sftp / guestuser, crie qualquer subdiretório que você queira que o usuário veja. Por exemplo, crie um diretório de entrada onde os usuários possam inserir seus arquivos.

# mkdir /sftp/guestuser/incoming

6. Permissão Apropriada de Configuração

Para que o chroot funcione corretamente, é necessário verificar se as permissões apropriadas estão configuradas corretamente no diretório que você acabou de criar.

Defina o proprietário para o usuário e agrupe-o ao grupo de usuários intermediários, conforme mostrado abaixo.

# chown guestuser:sftpusers /sftp/guestuser/incoming

A permissão será semelhante à seguinte para o diretório de entrada.

# ls -ld /sftp/guestuser/incoming
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming

A permissão será semelhante à seguinte para o diretório / sftp / guestuser

# ls -ld /sftp/guestuser
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser

# ls -ld /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp

7. Reinicie o sshd e teste o SFTP do Chroot

Reinicie o sshd:

# service sshd restart

Teste o ambiente chroot sftp. Como você vê abaixo, quando o gusetuser faz sftp, e faz "cd /", eles só verão o diretório de entrada.

# sftp [email protected]
guestuser@thegeekstuff's password:

sftp> pwd
Remote working directory: /incoming

sftp> cd /
sftp> ls
incoming

Quando o guestuser transfere os arquivos para o diretório / incoming do sftp, eles estarão realmente localizados no diretório / sftp / guestuser / incoming no sistema.

    
por 12.02.2013 / 13:16