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

Conteúdo

Uma janela de terminal em um sistema Linux.

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

Cascas restritas

Um shell restrito não é um shell distinto. É um modo diferente de um shell padrão. a Tentou, Korn, Pez, e outros shells podem ser iniciados no modo de shell restrito. Usaremos o Bash nesta postagem, mas os mesmos princípios se aplicam às outras conchas.

Porque 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 forem digitados incorretamente fique confinado aos limites de seu mundo restrito e que eles não tenham acesso a todo o seu computador..

Apesar disto, observe que os projéteis restritos não são totalmente à prova de vazamento. Alguém com conhecimento suficiente pode escapar de uma concha restrita. Eles são ótimos para definir limites seguros para um usuário casual, mas não confie em shells restritos para segurança do mundo real em um sistema de produção.

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

Hit restrito

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

  • Usar cd para mudar o diretório de trabalho.
  • Altere os valores do $PATH , $SHELL , $BASH_ENV , o $ENV variáveis ​​ambientais (mas eles podem ler os valores atuais).
  • Leia ou mude $SHELLOPTS opções ambientais de shell.
  • Redirecione a saída de um comando.
  • Invoque comandos que exijam um caminho para localizá-los. Em outras palavras, você não pode emitir um comando que tenha uma ou mais barras “/” nisso.
  • Invocar exec para substituir a casca por um procedimento diferente.
  • Use qualquer uma das funções restritas em um script.

Você pode invocar um shell bash restrito usando o -r opção (restrito). Tentar realizar uma tarefa simples, como alterar o diretório de trabalho, é proibido. Uma mensagem lacônica diz que cd É restrito.

bash -r
Documentos cd

O shell Bash também pode detectar quando foi invocado usando “rbash” ao invés de “bash”. Isso também o faz começar como um shell restrito. Isso fornece uma maneira conveniente de configurar o shell padrão para um determinado usuário, que usaremos em breve.

Se usarmos o whereis comando no Ubuntu para procurar o rbash registros, veremos que o executável está no diretório “usr / bin”. A página do manual está no diretório “/ usr / compartilhado / cara / man1 ”.

Usando o ls comando com o -l Opção (grande) revela que rbash é na verdade um link simbólico para bash .

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

Em Manjaro e Fedora, a rbash Você teve que criar um link simbólico. Isso funciona em ambas as distribuições:

onde está precipitado
sudo ln -s / bin / bash / bin / rbash
onde está precipitado

Na segunda vez, usamos o whereis comando, achar rbash no diretório “/ usr / bin ”.

Restringindo um usuário

Vamos criar uma nova conta de usuário chamada “Minnie”. Iremos configurar seu shell para ser o shell restrito usando o -s (Concha) opção do useradd comando. Também configuraremos a senha da conta usando opasswd comando, e vamos criar uma pasta pessoal para eles.

a -p (pais) bandeira no mkdir o comando diz mkdir para criar o diretório de destino e qualquer diretório pai que você precise criar adicionalmente. Então, ao criar o diretório “/ casa / minnie / bin”, criamos o diretório “/ casa / minnie” ao mesmo tempo.

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

Quando Minnie logar, será executado em um shell restrito.

CD

Você não pode invocar comandos que devem incluir uma barra “/“:

/usr / bin / ping

Apesar disto, você ainda pode executar comandos encontrados no caminho.

ping

Esse não é o comportamento que eu esperava, 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 inicial da minnie “/ casa / minnie”, Também criamos um diretório “/ casa / minnie / bin”. É aqui que esse diretório entra em jogo.

Vamos editar o arquivo “.bash_profile” da minnie e determine 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 “CAMINHO =” existente ou adicione a seguinte linha:

CAMINHO=$HOME/bin

Salve o arquivo. Nós vamos alterar proprietário do arquivo raiz usando o chown comando e alterar permissões de arquivo usando o chmod comando. Somente o usuário root poderá editar o arquivo.

raiz sudo chown:root /home/minnie/.bash_profile
sudo chmod 755 /home/minnie/.bash_profile
ls -l /home/minnie/.bash_profile

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

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

Teremos que afrouxar um pouco o controle se quisermos que eles sejam capazes de fazer algo útil.. Vamos criar alguns links simbólicos do diretório “bin” da minnie aos 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

Da próxima vez que Minnie se conectar, Você descobrirá que pode usar os comandos internos do Bash, ao mesmo tempo dos comandos aos quais foram vinculados.

ls
mindinho dave
tempo de atividade

Restringindo usuários existentes

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

sudo usermod -s / bin / rbash mary

Você pode usar o less comando 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á shell restrito na próxima vez que entrar.

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

Restrição de script

Um usuário normal 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 “restrito.sh” e feche o editor.

#!/bin / bash

# script starts in normal Bash shell
echo "## No modo UNrestrito! ##"

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

# Setting restricted mode
set -r

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

echo
echo "Diretório atual: `pwd`"
eco "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 a saída do comando"
ls -l $HOME > my_files.txt
cat my_files.txt
echo

exit 0

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

chmod +x restrito.sh

A primeira parte do script roda em um shell normal.

./restrito.sh

A segunda parte do roteiro, o bit que segue a linha “set -r”, roda em um shell restrito.

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

Um script completo pode ser executado em um shell restrito adicionando -r para a primeira linha:

!#/bin / bash -r

Lembre-se de Houdini

Projéteis restritos são úteis, mas não totalmente infalível. Um usuário suficientemente treinado pode escapar deles. Mas quando usado com sabedoria, são uma maneira útil de determinar um conjunto de limitações para uma conta específica.

setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.