Header Ads

Como usar o shell restrito para limitar o que um usuário Linux pode fazer

Fatmawati Achmad Zaenuri / Shutterstock

Um shell restrito limita o que uma conta de usuário pode fazer no Linux. Um usuário restrito não pode alterar seu diretório e você controla a quais comandos ele tem acesso. Veja como configurar um shell restrito no Linux.

Cascas restritas

Um shell restrito não é um shell diferente. É um modo diferente de um shell padrão. Os shells Bash, Korn, Fish e outros podem ser iniciados no modo shell restrito. Usaremos o Bash neste artigo, mas os mesmos princípios se aplicam aos outros shells.

Como os shells restritos são apenas outra maneira de usar o shell padrão, eles são fáceis de configurar. Não há nada para instalar e eles estão disponíveis onde quer que o Linux esteja.

Shells restritos também podem ser aplicados a scripts. Isso garante que qualquer dano que eles possam causar se forem escritos incorretamente se limita aos confins de seu mundo restrito e que eles não têm acesso a todo o seu computador.

Esteja ciente, entretanto, que shells restritos não são completamente à prova de escape. Alguém com conhecimento suficiente pode escapar de uma concha restrita. Eles são ótimos para colocar limites seguros em um usuário casual, mas não confie em shells restritos para qualquer segurança do mundo real em um sistema de produção.

RELACIONADO: Qual é a diferença entre Bash, Zsh e outros shells Linux?

Bash restrito

Quando você executa o Bash como um shell restrito, o usuário tem alguns recursos removidos dele. Especificamente, o usuário não pode:

  • Use cd para alterar o diretório de trabalho.
  • Altere os valores das variáveis ​​ambientais $ PATH, $ SHELL, $ BASH_ENV ou $ ENV (mas elas podem ler os valores atuais).
  • Leia ou altere as opções de ambiente do shell $ SHELLOPTS.
  • Redirecione a saída de um comando.
  • Invoque comandos que exijam um caminho para localizá-los. Ou seja, você não pode emitir um comando que tenha uma ou mais barras “ / ” nele.
  • Invoque exec para substituir o shell por um processo diferente.
  • Use qualquer um dos recursos restritos em um script.

Você pode chamar um shell Bash restrito usando a opção -r (restrito). Tentar realizar uma tarefa simples, como alterar o diretório de trabalho, é proibido. Uma mensagem concisa informa que o cd é restrito.

 bash -r 

 Documentos de CD 

O shell Bash também pode detectar quando foi invocado usando “ rbash ” em vez de “ bash. ” Isso faz com que ele inicie como um shell restrito também. Isso fornece uma maneira conveniente de definir o shell padrão para um usuário específico, que usaremos em breve.

Se usarmos o comando whereis no Ubuntu para procurar os arquivos rbash, &’ veremos que o executável está no diretório “ usr / bin ” diretório. A página do manual está em “ / usr / share / man / man1 ” diretório.

Usar o comando ls com a opção -l (long) revela que rbash é na verdade um link simbólico para o bash.

 whereis rbash 

 ls -l / usr / bin / rbash 

No Manjaro e Fedora, o link simbólico rbash teve que ser criado. Isso funciona em ambas as distribuições:

 onde está rbash 

 sudo ln -s / bin / bash / bin / rbash 

 whereis rbash 

Na segunda vez que usamos o comando whereis, ele encontra rbash na pasta “ / usr / bin ” diretório.

Restringindo um usuário

Vamos criar uma nova conta de usuário chamada “ Minnie. ” Definiremos seu shell como o shell restrito usando a opção -s (shell) do comando useradd. Também definiremos a senha da conta usando o comando passwd e criaremos uma pasta pessoal para eles.

O sinalizador -p (pais) no comando mkdir diz ao mkdir para criar o diretório de destino e quaisquer diretórios pais que ele precise criar também. Portanto, ao criar o “ / home / minnie / bin ” , criamos o diretório “ / home / minnie ” diretório ao mesmo tempo.

 sudo useradd minnie -s / bin / rbash 

 sudo passwd minnie 

 sudo mkdir -p / home / minnie / bin 

Quando Minnie faz login, ela está executando em um shell restrito.

 cd 

Ela não pode invocar comandos que precisem incluir uma barra “ / “:

 / usr / bin / ping 

No entanto, ela ainda pode executar comandos encontrados no caminho.

 ping 

Esse não é o comportamento que você esperava e certamente não é o que desejamos. Para restringir ainda mais as restrições, precisamos alterar o caminho que o shell de minnie usará para procurar os comandos.

Apertando as restrições

Quando criamos o diretório inicial de minnie &’ s “ / home / minnie ”, também criamos um “ / home / minnie / bin ” diretório. É aqui que esse diretório entra em jogo.

Vamos editar minnie &’ s “ . bash_profile ” arquivo e definir seu caminho para apontar para esse diretório apenas. Também restringiremos minnie &’ s “ . bash_profile ” arquivo para que apenas o root possa editá-lo. Isso significa que nenhum outro usuário pode editar esse arquivo e alterar seu caminho.

 sudo gedit /home/minnie/. bash_profile

Edite o “ PATH = ” existente ou adicione a seguinte linha:

 PATH = $ HOME / bin 

Salve o arquivo. Iremos alterar o proprietário do arquivo para root usando o comando chown e alterar as permissões do arquivo usando o comando chmod. Apenas o usuário root poderá editar o arquivo.

 sudo chown root: root /home/minnie/. bash_profile

 sudo chmod 755 /home/minnie/. bash_profile

 ls -l /home/minnie/. bash_profile

Na próxima vez que o usuário minnie fizer login, seu caminho apontará para uma única pasta.

Nosso usuário restrito minnie só pode usar comandos integrados do Bash, como echo, alias e logout. Ela nem consegue usar o ls!

 ls 

Precisamos afrouxar um pouco nosso estrangulamento se quisermos que eles sejam capazes de fazer alguma coisa útil. Criaremos alguns links simbólicos de minnie &’ s “ bin ” para os comandos que queremos que o minnie possa usar.

 sudo ln -s / bin / ls / home / minnie / bin 

 sudo ln -s / bin / top / home / minnie / bin 

 sudo ln -s / bin / uptime / home / minnie / bin 

 sudo ln -s / bin / pinky / home / minnie / bin 

Na próxima vez que minnie fizer login, ela descobrirá que pode usar os comandos integrados do Bash, além dos comandos aos quais foram vinculados.

 ls 

 pinky dave 

 tempo de atividade 

Restringindo usuários existentes

Criamos minnie como um novo usuário. Para alterar o shell de um usuário existente, podemos usar a opção -s (shell) do comando usermod.

 sudo usermod -s / bin / rbash mary 

Você pode usar o comando less no diretório “ / etc / passwd ” para ver rapidamente qual shell está definido como o shell padrão do usuário.

 menos / etc / passwd 

Podemos ver que a usuária mary usará o shell restrito na próxima vez que fizer login.

Lembre-se de aplicar as outras alterações para restringir sua variável de ambiente $ PATH e definir os comandos que você deseja que o usuário mary possa executar.

Scripts de restrição

Um usuário regular e irrestrito pode lançar scripts que são executados em um shell restrito. Copie as seguintes linhas e cole-as em um editor. Salve o arquivo como “ restricted. sh ” e feche o editor.

 #! / bin / bash # script começa no shell Bash normal echo "## No modo irrestrito! ##" echo echo "Diretório atual:` pwd` "echo" Alterando o diretório "cd / usr / share echo "Agora no diretório:` pwd` "echo" Mudando para o diretório inicial "cd ~ echo" Agora no diretório: `pwd`" # Configurando modo restrito set -r echo echo "## Em modo restrito! ##" echo echo "Diretório atual:` pwd` "echo" Mudando o diretório para / home / "cd / home echo" Ainda no diretório: `pwd`" echo echo "Tentando iniciar outro shell" / bin / bash echo echo "Tentando redirecionar o comando saída "ls -l $ HOME > my_files. txt cat my_files. txt echo exit 0 

Precisamos usar o comando chmod com o sinalizador + x (executar) para tornar o script executável.

 chmod + x restringido. sh 

A primeira parte do script é executada em um shell normal.

 ./ restrito. sh 

A segunda parte do script — o bit após o “ set -r ” linha — roda em um shell restrito.

Nenhuma das ações tentadas teve êxito na parte restrita do script.

Um script inteiro pode ser executado em um shell restrito adicionando -r à primeira linha:

! # / bin / bash -r 

Lembre-se de Houdini

Os shells restritos são úteis, mas não completamente infalíveis. Um usuário suficientemente experiente pode ser capaz de escapar deles. Mas, quando usados ​​com cautela, são uma maneira útil de estabelecer um conjunto de limitações para uma conta específica.

Veja Também:

Nenhum comentário