Para criar um usuário SSH que tenha permissão apenas para acessar pastas específicas


47

Eu instalei o SSH, mas descobri que se eu usar minha conta original para fazer login no Ubuntu, ela tem muitas permissões.

Quero restringir o usuário a ter apenas permissões para pastas específicas no Ubuntu. Como posso configurar esse usuário?

Respostas:


49

Isto é simples. Basta criar um novo usuário com o diretório inicial definido como aquele ao qual você precisa que ele tenha acesso (este comando deve ser executado sudono shell raiz ou no root):

adduser --home /restricted/directory restricted_user

Isso criará um usuário restricted_user, o diretório /restricted/directorye as permissões no diretório serão definidas para que o usuário possa gravar nele. Por padrão, ele não poderá gravar em nenhum outro diretório.

Se você já possui o diretório, pode executar o addusercomando com uma --no-create-homeopção anexada e definir permissões manualmente (também com privilégios de root), como:

chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory

Se você precisar tornar os diretórios graváveis ​​em todo o mundo inacessíveis para esse usuário, existem duas variantes.

1) Se você deseja fornecer uma sessão shell interativa ao usuário, considere seguir este manual sobre a criação de uma prisão chroot (na sua /restricted/directory).

Depois disso, adicione o seguinte ao seu sshd_config:

Match user restricted_user
  ChrootDirectory /restricted/directory

2) Se você precisar apenas copiar arquivos entre o ponto final de conexão e o host, tudo será muito mais fácil. Adicione estas linhas no final do seu sshd_config:

Match user restricted_user
  ForceCommand internal-sftp
  ChrootDirectory /restricted/directory

Subsystem       sftp    internal-sftp

Comente o comentário Subsystem sftp /usr/lib/openssh/sftp-servercolocando um #sinal de hash ( ) no início.

Depois de reiniciar o servidor SSH (ele não interrompe sessões interativas na reinicialização, por isso é seguro, mesmo que você tenha configurado algo errado; além disso, não fecha a sessão em execução antes de verificar se ainda é capaz de efetuar login), tudo deve funcionar como pretendido.


1
Eu tentei, mas parece que ainda posso cd .. e navegar no diretório superior. e quando eu uso o vi a.txt no diretório superior, ele mostra: pressione enter ou comando para continuar e não consigo sair do vi
Foolish

1
Posso usar a opção 2 se o usuário tiver acesso apenas ao sshfs?
Flickerfly

1
Tudo funciona bem, exceto que eu não tenho permissão de gravação. Como posso definir uma permissão de gravação para este diretório restrito. Se eu usar o chmod 775, o usuário não poderá mais fazer login.
meu nome é

3
Você deve escrever a Subsystem sftp internal-sftplinha no seu segundo exemplo acima do Matchbloco. Caso contrário, o ssh imprimirá um erro e não será iniciado.
Tik0

1
Alerta de spoiler: não funciona com scp
bicycle

5

A maneira mais fácil de criar usuário restrito que não pode se desviar do diretório especificado (por exemplo, para o diretório superior etc) e ter um conjunto de comandos limitado / escolhido para usar, é usar um Shell Restrito. Ref:

http://man.he.net/man1/rbash

Primeiro, crie um link simbólico chamado rbash(execute como usuário root).

ln -s /bin/bash /bin/rbash

Em seguida, basta criar um usuário normal com este Shell restrito e defina seu diretório inicial na pasta desejada:

useradd -s /bin/rbash -d /home/restricted_folder username

Mesmo sem o Shell Restrito, se você explicitamente não adicionar esse usuário à lista de sudoers ou a nenhum grupo especial, ele será limitado por padrão.

Com o Shell restrito, o seguinte não é permitido ou não é executado:

  • alterando diretórios com cd

  • definindo ou desabilitando os valores de SHELL, PATH, ENV ou BASH_ENV

  • especificando nomes de comandos que contêm /

  • especificando um nome de arquivo contendo um / como argumento para. comando embutido

  • Especificando um nome de arquivo que contém uma barra como argumento para a opção -p para o comando hash builtin

  • Importando Definições de Função do Ambiente Shell na Inicialização

  • analisando o valor de SHELLOPTS do ambiente shell na inicialização

  • redirecionando a saída usando os operadores de redirecionamento>,> |, <>,> &, &>, e >>

  • usando o comando exec builtin para substituir o shell por outro comando

  • adicionando ou excluindo comandos internos com as opções -f e -d ao comando enable builtin

  • Usando o comando enable builtin para ativar os buildins de shell desativados

  • especificando a opção -p para o comando builtin command

  • desativar o modo restrito com set + r ou set + o restrito.

Essas restrições são aplicadas após qualquer arquivo de inicialização

Além disso / Opcionalmente, para restringir o usuário a um conjunto de comandos limitado / selecionado a ser usado, você pode criar um .bash_profile somente leitura para esse usuário, com

PATH=$HOME/bin

e faça o link simbólico dos comandos que você permitir na pasta ~ / bin para esse usuário:

ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm

etc.

HTH


posso encontrar qualquer arquivo no sistema de arquivos, incluindo o diretório / root e posso ler esses arquivos. Querendo saber como restringir ainda mais o acesso de ver algo fora da pasta do usuário ou capturar pacotes de rede ou ler / var / log contents
16851556
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.