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

Publicados: 2022-01-29
Uma janela de terminal em um sistema Linux.
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 quais comandos ele tem acesso. Veja como configurar um shell restrito no Linux.

Conchas restritas

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

Como shells restritos são apenas outra maneira de usar seu 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 tiverem sido escritos incorretamente será limitado aos limites de seu mundo restrito e que eles não terão acesso a todo o seu computador.

Esteja ciente, porém, de que os projéteis restritos não são completamente à prova de fuga. Alguém com conhecimento suficiente pode escapar de um shell restrito. Eles são ótimos para colocar limites seguros em um usuário casual, mas não dependem de 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 ​​de ambiente $PATH , $SHELL , $BASH_ENV ou $ENV (mas elas podem ler os valores atuais).
  • Leia ou altere as opções ambientais do shell $SHELLOPTS .
  • Redirecione a saída de um comando.
  • Invoque comandos que requerem 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.
Propaganda

Você pode invocar um shell Bash restrito usando a opção -r (restrito). Tentar fazer 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 também seja iniciado como um shell restrito. 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”. A página man está no diretório “/usr/share/man/man1”.

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

 onde está rbash
 ls -l /usr/bin/rbash 

No Manjaro e no 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
 onde está rbash 

Propaganda

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

Restringindo um usuário

Vamos criar uma nova conta de usuário chamada “Minnie”. Vamos definir o shell deles 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 qualquer diretório pai que ele precise criar também. Então, criando o diretório “/home/minnie/bin”, criamos o diretório “/home/minnie” ao mesmo tempo.

 sudo useradd minnie -s /bin/rbash
 sudo passwd minnie
 sudo mkdir -p /home/minnie/bin 

Quando a minnie fizer login, ela estará rodando em um shell restrito.

 CD 

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

 /usr/bin/ping 

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

 ping 

Propaganda

Esse não é o comportamento que você poderia esperar, e certamente não é o que queremos. Para apertar ainda mais as restrições, precisamos alterar o caminho que o shell da minnie usará para procurar comandos.

Apertando as Restrições

Quando criamos o diretório home da minnie “/home/minnie”, também criamos um diretório “/home/minnie/bin”. Este é o lugar onde esse diretório entra em jogo.

Vamos editar o arquivo “.bash_profile” da minnie e definir seu caminho para apontar apenas para esse diretório. Também restringiremos o arquivo “.bash_profile” da minnie 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:

 CAMINHO=$HOME/bin 

Salve o arquivo. Vamos alterar o proprietário do arquivo para root usando o comando chown e alterar as permissões do arquivo usando o comando chmod . Somente 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 a usuária minnie fizer login, seu caminho apontará para uma única pasta.

Propaganda

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

 ls 

Precisamos afrouxar um pouco nosso domínio se quisermos que eles sejam capazes de fazer qualquer coisa útil. Vamos criar alguns links simbólicos do diretório “bin” da minnie para os comandos que queremos que a 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 

Quando a minnie fizer logon, ela descobrirá que pode usar os comandos internos do Bash, além dos comandos aos quais foram vinculados.

 ls
 dave mindinho
 tempo de atividade 

Restringindo usuários existentes

Criamos a 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 arquivo “/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.

Propaganda

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.

Restringindo Scripts

Um usuário regular e irrestrito pode iniciar 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 inicia no shell Bash normal
echo "## No modo UNrestricted! ##"

eco
echo "Diretório atual: `pwd`"
echo "Mudando diretório"
cd /usr/compartilhar
echo "Agora no diretório: `pwd`"
echo "Mudando para o diretório inicial"
CD ~
echo "Agora no diretório: `pwd`"

# Configurando o modo restrito
set -r

eco
echo "## Em modo restrito! ##"

eco
echo "Diretório atual: `pwd`"
echo "Mudando o diretório para /home/"
cd/casa
echo "Ainda no diretório: `pwd`"

eco
echo "Tentando iniciar outro shell"
/bin/bash

eco
echo "Tentando redirecionar a saída do comando"
ls -l $HOME > my_files.txt
gato meus_arquivos.txt
eco

saída 0

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

 chmod +x restrito.sh 

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

 ./restricted.sh 

A segunda parte do script – o bit após a linha “set -r” – é executada em um shell restrito.

Nenhuma das ações tentadas é bem-sucedida na parte restrita do script.

Propaganda

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

 !#/bin/bash -r

Lembre-se de Houdini

Conchas restritas são úteis, mas não completamente infalíveis. Um usuário suficientemente habilidoso pode escapar deles. Mas, quando usados ​​criteriosamente, são uma maneira útil de estabelecer um conjunto de limitações para uma conta específica.