Como restringir o shell dos usuários, permitindo executar programas shell
9
É possível impedir que qualquer usuário não use comandos como ls, rm e outros comandos do sistema que possam prejudicar o sistema. Mas os usuários devem ser capazes de executar programas shell.
Por que você quer fazer isso? Você não pode escrever um programa com o qual eles interagem?
314 Joe
Que tipo de programas shell eles devem executar?
0100 Mike
Você quer dizer "programas shell prazo de sua própria criação", que tem o problema de segurança óbvio ..
pjc50
13
Oh, não, não é o lscomando perigoso !
Womble
Respostas:
11
Sua pergunta deve ser:
Eu não confio nos meus usuários. Os idiotas vêem algo na internet e experimentam sem entender o que fazem. Os desonestos gostam de bisbilhotar e olhar os arquivos de outras pessoas e roubar suas idéias. E os preguiçosos, não me iniciem nos preguiçosos.
Como protejo meu sistema e meus usuários dos meus usuários?
Primeiro, o unix possui um sistema de permissões de sistema de arquivos muito abrangente. Este parece ser um tutorial decente sobre as permissões do sistema de arquivos unix . A essência disso é que os diretórios podem ser configurados de forma que um usuário possa entrar em um diretório e executar programas a partir desse diretório, mas não pode visualizar o conteúdo desse diretório. Se você fizer isso, por exemplo, em / home, se o usuário executar ls em / home, ele receberá um erro de permissão negada.
Se você está realmente com medo de seus usuários e deseja colocá-los em um ambiente restrito do tipo supermax , use algo como cadeias do freebsd ou zonas do solaris - cada usuário obtém seu próprio ambiente personalizado. Para adicionar pontos, use o ZFS, para que você possa tirar um instantâneo do ambiente ao efetuar login. Se eles excluirem seus arquivos, basta retirá-los do instantâneo.
Há três coisas que precisam estar em vigor para fazer totalmente o que você está pedindo:
Um shell personalizado que não possui os comandos de seu interesse . É algo difícil de obter, mas se você realmente não deseja que os usuários tenham acesso a algumas primitivas do shell, essa é a única maneira de removê-las.
Defina corretamente as permissões de arquivo . Não quer que os usuários danifiquem o sistema? Defina as permissões para que não possam danificar o sistema, mesmo que tenham as ferramentas certas. Dessas três etapas, este é o passo mais fácil.
Use uma tecnologia obrigatória de controle de acesso como o AppArmor . MACs como AppArmor e SELinux incorporam permissões no kernel. Isso evita que os usuários executem as ferramentas certas, mesmo que as encontrem em algum lugar (e, como as permissões de arquivo, evitam que sejam usadas fora da caixa restrita).
Cinto, suspensórios e uma pistola de grampo para uma boa medida. Difícil de dar errado lá.
O AppArmor é interessante, pois o MAC para um executável específico é herdado por todos os seus filhos. Defina o login de um usuário /bin/bash-bob, defina o perfil do AppArmor para esse direito binário específico e a única maneira de sair dessa prisão de permissão é através de explorações do kernel. Se algum script de instalação preguiçoso deixar /var/opt/vendor/tmpgravável globalmente por algum motivo estúpido, o usuário que usar /bin/bash-bobcomo shell não poderá escrever lá . Defina o perfil bash-bob para permitir apenas a gravação no diretório inicial e /tmp, e esses erros de permissão não podem ser aproveitados. Mesmo que, de alguma maneira, eles encontrem a senha root, o perfil do AppArmor /bin/bash-bobainda será aplicado mesmo depois que eles suaparecerem desde então sue o bashprocesso em que são gerados são filhos /bin/bash-bob.
A parte difícil é criar esse perfil do AppArmor.
Crie um perfil do AppArmor para / bin / bash-bob e configure-o para o modo de auditoria
Defina o shell de login de Bob como / bin / bash-bob
Faça o login como Bob. Faça tudo o que você deseja que Bob possa fazer.
Use o log de auditoria para criar o perfil do AppArmor (o SUSE possui ferramentas para isso, não tenho certeza sobre outras distribuições do Linux). Isso é monstruosamente entediante, mas precisa acontecer se você precisar desse nível de segurança.
Você estará fazendo coisas como:
Aprovando o acesso de leitura à maioria das bibliotecas do sistema
Aprovar direitos de leitura e execução para os poucos comandos de sistema permitidos selecionados
Aprovando o acesso de gravação a espaços temporários
Aprovar a criação de soquete, se necessário
Defina a política a ser aplicada.
Faça o login como Bob, faça as coisas.
Faça ajustes.
Na minha opinião, você só precisa das etapas 2 e 3, pois, em combinação, elas impedem a capacidade de fazer algo prejudicial fora da caixa cuidadosamente construída que você configurou nas duas etapas.
Bem, você pode definir o shell do usuário para um programa que você escreveu que apenas permite executar determinados scripts de shell.
Claro que isso seria tão seguro quanto o programa e os scripts de shell; na prática, esse tipo de shell restrito normalmente não é seguro contra um invasor inteligente.
Não tente limitar comandos, limite as permissões de arquivo. Você não pode praticamente limitar o acesso das pessoas aos syscalls; portanto, tudo o que alguém precisa fazer é fornecer sua própria cópia de quaisquer comandos "perigosos" que você não queira que eles executem, e você estará cheio.
Se você deseja que o usuário possa executar apenas determinados scripts / binários, use um shell restrito . Isso (como o artigo da Wikipedia menciona) não é completamente seguro, mas se você pode garantir que nenhum aplicativo com permissão para executar seja capaz de executar um novo shell, é uma boa alternativa.
Para configurar um shell restrito do usuário, defina /bin/rbash(ou similar, a maioria dos shells entra no modo restrito quando o binário é nomeado r *** name *) como shell do usuário. Em seguida, edite **. Bashrc (ou equivalente) e defina $PATHum diretório em que todos os binários / scripts permitidos sejam armazenados.
Sim, é possível, mas na prática seria preciso muito trabalho e planejamento. Você pode criar scripts e executá-los como um uso privilegiado e remover todos os privilégios do usuário em questão. Ou, você pode definir o shell do usuário para algo que você mesmo criou, permitindo que eles façam apenas o que você permitir explicitamente.
No entanto, as permissões padrão no linux tornam quase impossível para um usuário normal "prejudicar o sistema". Que tipo de dano você está tentando evitar? É trivial impedir que os usuários possam instalar software ou executar programas fora do diretório inicial, e você pode usar o chroot para bloquear ainda mais o sistema.
Estou tentando impedir possíveis comandos como rm -rf / bin, ls / home / *, rm -rf / usr / bin, ls / .................... .....
2
Você pode impedir que aqueles que utilizam permissões padrão de arquivo linux ...
ChristopheD
1
Você pode tentar [lshell] [1] (shell limitado).
lshell é um shell codificado em Python, que permite restringir o ambiente de um usuário a conjuntos limitados de comandos, optar por ativar / desativar qualquer comando sobre SSH (por exemplo, SCP, SFTP, rsync etc.), registrar comandos do usuário, implementar restrições de tempo, e mais.
A maneira como eu geralmente implemento esse tipo de restrição exige que várias condições sejam atendidas; caso contrário, a restrição pode ser facilmente contornada:
O usuário não pertence ao wheelgrupo, o único autorizado a usar su(imposto via PAM).
O usuário recebe uma proteção adequadarbash com um PATHapontamento somente leitura para um privado ~/bin, esse ~/bin/diretório contém links para utilitários simples:
Além disso, /etc/security/namespace.inittorna todos os arquivos esqueléticos somente leitura para o usuário e de propriedade de root.
Dessa forma, você pode escolher se $USERpode executar qualquer comando em seu próprio nome (por meio de um link no ~/bindiretório privado , provisionado por /etc/skel, como explicado acima), em nome de outro usuário (por sudo) ou nenhum.
ls
comando perigoso !Respostas:
Sua pergunta deve ser:
Eu não confio nos meus usuários. Os idiotas vêem algo na internet e experimentam sem entender o que fazem. Os desonestos gostam de bisbilhotar e olhar os arquivos de outras pessoas e roubar suas idéias. E os preguiçosos, não me iniciem nos preguiçosos.
Como protejo meu sistema e meus usuários dos meus usuários?
Primeiro, o unix possui um sistema de permissões de sistema de arquivos muito abrangente. Este parece ser um tutorial decente sobre as permissões do sistema de arquivos unix . A essência disso é que os diretórios podem ser configurados de forma que um usuário possa entrar em um diretório e executar programas a partir desse diretório, mas não pode visualizar o conteúdo desse diretório. Se você fizer isso, por exemplo, em / home, se o usuário executar ls em / home, ele receberá um erro de permissão negada.
Se você está realmente com medo de seus usuários e deseja colocá-los em um ambiente restrito do tipo supermax , use algo como cadeias do freebsd ou zonas do solaris - cada usuário obtém seu próprio ambiente personalizado. Para adicionar pontos, use o ZFS, para que você possa tirar um instantâneo do ambiente ao efetuar login. Se eles excluirem seus arquivos, basta retirá-los do instantâneo.
fonte
Há três coisas que precisam estar em vigor para fazer totalmente o que você está pedindo:
Cinto, suspensórios e uma pistola de grampo para uma boa medida. Difícil de dar errado lá.
O AppArmor é interessante, pois o MAC para um executável específico é herdado por todos os seus filhos. Defina o login de um usuário
/bin/bash-bob
, defina o perfil do AppArmor para esse direito binário específico e a única maneira de sair dessa prisão de permissão é através de explorações do kernel. Se algum script de instalação preguiçoso deixar/var/opt/vendor/tmp
gravável globalmente por algum motivo estúpido, o usuário que usar/bin/bash-bob
como shell não poderá escrever lá . Defina o perfil bash-bob para permitir apenas a gravação no diretório inicial e/tmp
, e esses erros de permissão não podem ser aproveitados. Mesmo que, de alguma maneira, eles encontrem a senha root, o perfil do AppArmor/bin/bash-bob
ainda será aplicado mesmo depois que elessu
aparecerem desde entãosu
e obash
processo em que são gerados são filhos/bin/bash-bob
.A parte difícil é criar esse perfil do AppArmor.
Na minha opinião, você só precisa das etapas 2 e 3, pois, em combinação, elas impedem a capacidade de fazer algo prejudicial fora da caixa cuidadosamente construída que você configurou nas duas etapas.
fonte
Bem, você pode definir o shell do usuário para um programa que você escreveu que apenas permite executar determinados scripts de shell.
Claro que isso seria tão seguro quanto o programa e os scripts de shell; na prática, esse tipo de shell restrito normalmente não é seguro contra um invasor inteligente.
fonte
Não tente limitar comandos, limite as permissões de arquivo. Você não pode praticamente limitar o acesso das pessoas aos syscalls; portanto, tudo o que alguém precisa fazer é fornecer sua própria cópia de quaisquer comandos "perigosos" que você não queira que eles executem, e você estará cheio.
fonte
Se você deseja que o usuário possa executar apenas determinados scripts / binários, use um shell restrito . Isso (como o artigo da Wikipedia menciona) não é completamente seguro, mas se você pode garantir que nenhum aplicativo com permissão para executar seja capaz de executar um novo shell, é uma boa alternativa.
Para configurar um shell restrito do usuário, defina
/bin/rbash
(ou similar, a maioria dos shells entra no modo restrito quando o binário é nomeado r *** name *) como shell do usuário. Em seguida, edite **. Bashrc (ou equivalente) e defina$PATH
um diretório em que todos os binários / scripts permitidos sejam armazenados.fonte
Sim, é possível, mas na prática seria preciso muito trabalho e planejamento. Você pode criar scripts e executá-los como um uso privilegiado e remover todos os privilégios do usuário em questão. Ou, você pode definir o shell do usuário para algo que você mesmo criou, permitindo que eles façam apenas o que você permitir explicitamente.
No entanto, as permissões padrão no linux tornam quase impossível para um usuário normal "prejudicar o sistema". Que tipo de dano você está tentando evitar? É trivial impedir que os usuários possam instalar software ou executar programas fora do diretório inicial, e você pode usar o chroot para bloquear ainda mais o sistema.
fonte
Você pode tentar [lshell] [1] (shell limitado).
[1]: http://lshell.ghantoos.org/Overview lshell
fonte
A maneira como eu geralmente implemento esse tipo de restrição exige que várias condições sejam atendidas; caso contrário, a restrição pode ser facilmente contornada:
wheel
grupo, o único autorizado a usarsu
(imposto via PAM).O usuário recebe uma proteção adequada
rbash
com umPATH
apontamento somente leitura para um privado~/bin
, esse~/bin/
diretório contém links para utilitários simples:o usuário é dado um, somente leitura ambiente restrito (pense em coisas como
LESSSECURE
,TMOUT
,HISTFILE
variáveis).staff_u
e recebe direitos para executar comandos como outro usuário, conforme necessáriosudo
.do usuário e
/home
,/tmp
possivelmente,/var/tmp
são instituídos por meio de/etc/security/namespace.conf
:Além disso,
/etc/security/namespace.init
torna todos os arquivos esqueléticos somente leitura para o usuário e de propriedade deroot
.Dessa forma, você pode escolher se
$USER
pode executar qualquer comando em seu próprio nome (por meio de um link no~/bin
diretório privado , provisionado por/etc/skel
, como explicado acima), em nome de outro usuário (porsudo
) ou nenhum.fonte
Sim, basta alterar as permissões nesses comandos.
Você pode ter uma melhor chance de lutar escrevendo um comando shell que se comporte aos seus requisitos.
O que não é apropriado das permissões padrão para usuários normais no Linux?
fonte