SELinux - CentOSx86_64: Limitação de comando do usuário

1

SELinux - CentOSx86_64: Limitação de comando do usuário

O SELinux é a ferramenta certa para este trabalho? Se sim, qual é a melhor maneira de fazer isso?

Eu gostaria de limitar um usuário em particular a apenas executar uma lista de comandos / scripts pré-definidos (talvez em seu diretório pessoal). Além disso, os scripts de usuários podem ter permissão para executar comandos que o usuário não pode executar diretamente (por exemplo, o script de usuário test.sh poderia chamar 'ping localhost', mas o usuário não poderia chamar 'ping localhost' diretamente da linha de comando). Vale ressaltar que acho que essas limitações são necessárias apenas para uma conta de usuário (não precisarei de várias configurações diferentes para diferentes contas de usuário).

O SO é o CentOSx86_64 e o SELinux está ativado da seguinte forma:

SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

Sou muito novo no SELinux, mas experimentei o seguinte:

(1) Eu achava que a política do MLS talvez fosse mais adequada (este link parecia promissor: link ) para esta tarefa, então tentei ativá-lo pela primeira vez. O 'GUI Administrativo do SELinux' não fornece nenhuma opção para alterar a política do alvo, então eu tentei alterar diretamente o / etc / selinux / config. Isso terminou com 'kernel panic' após a reinicialização, então decidi usar a política original instalada (ou seja, segmentada).

(2) Na GUI do Administrador do SELinux, criei uma nova política com um tipo de política de 'Função mínima do usuário do terminal'. Para o 'nome' eu chamei de 'limiteduser'. Não selecionei papéis para os quais seria transferido. Não selecionei papéis adicionais. Selecionei todas as portas TCP e UDP para ligações / conexões. Eu não adicionei booleanos à política. Depois de executar o .sh, o novo usuário e função do SELinux foi criado. Em seguida, atribuí um nome de login ao 'limiteduser'. Como esperado, isso me deu um usuário com privilégios muito limitados.

(3) Inicialmente, esse novo usuário poderia criar um script em seu diretório pessoal, mas não poderia executá-lo. Depois de definir um booleano chamado 'allow_guest_exec_content', o usuário pôde executar o script. Inicialmente, o script continha apenas um 'eco', mas depois que eu mudei para ping ele falhou novamente. Em uma tentativa de permitir 'ping' para este novo usuário, desmarquei o user_ping booleano (embora eu ache que isso só se aplica a user_u em vez de guest_u). Para fazer o que eu quero, acho que uma alternativa seria definir um tipo baseado em 'user_u' e então remover permissões (em vez de usar a abordagem que eu escolhi, que é usar um tipo baseado em guest_u e adicionar permissões - No entanto eu não sei como fazer isso!).

(4) Várias fontes on-line discutem arquivos de política de um diretório src, mas isso não foi instalado e não consegui descobrir qual pacote instalar que adicionaria isso. Eu tenho os seguintes pacotes relacionados a selinux instalados:

libselinux.x86_64                   2.0.94-5.3.el6                     installed
libselinux-devel.x86_64             2.0.94-5.3.el6                     installed
libselinux-python.x86_64            2.0.94-5.3.el6                     installed
libselinux-utils.x86_64             2.0.94-5.3.el6                     installed
selinux-policy.noarch               3.7.19-126.el6_2.4                 @updates 
selinux-policy-targeted.noarch      3.7.19-126.el6_2.4                 @updates 
setools-console.x86_64              3.3.7-4.el6                        @base    
setools-devel.x86_64                3.3.7-4.el6                        @base    
setools-gui.x86_64                  3.3.7-4.el6                        @base    
setools-libs.x86_64                 3.3.7-4.el6                        @base    
setools-libs-java.x86_64            3.3.7-4.el6                        @base    
setools-libs-python.x86_64          3.3.7-4.el6                        @base    
setools-libs-tcl.x86_64             3.3.7-4.el6                        @base 

(5) Eu olhei para um shell limitado alternativo, como o link , mas a exigência da minha empresa é usar o SELinux - ou - se tudo falha ao usar algo já fornecido pelo sistema operacional (por exemplo, bash restricted), mas isso pode não ser tão seguro.

Acho que preciso definir uma política personalizada e dentro dela:

(a) Permitir que o usuário execute arquivos em seu diretório pessoal.

(b) Permitir que os scripts do usuário façam a transição para diferentes tipos, a fim de executar comandos para os quais o usuário não tem permissões.

Usando a GUI de administração do SELinux (e os arquivos de configuração que conheço) não sei como fazer isso.

Obrigado por qualquer ajuda que você possa fornecer.

    
por Stuart 22.11.2012 / 13:32

1 resposta

0

Nas versões dos pacotes que é o CentOS 6. A abordagem para este problema que estou implementando atualmente, cujas principais vantagens são os recursos de auditoria (através do sudo), simplicidade (não exigindo MLS / MCS) e confinamento, é o seguinte:

  • Os usuários recebem um diretório HOME usando pam_namespace
  • Os usuários recebem rbash login shell
  • HOME está montado noexec,ro , com coisas como HISTFILE apontando para fora de suas casas para um lugar controlado em outro lugar
  • Os usuários são mapeados para user_u seuser
  • Os usuários têm seu PATH set readonly e limitados a ~/bin , onde existem links simbólicos para binários permitidos (básicos)
  • O uso de sudo é obrigatório para qualquer outro comando que não esteja em ~/bin
  • O arquivo /etc/sudoers contém regras que levam em conta a imposição de função e tipo do usuário / comando de destino usando SELinux_Spec para especificar as opções role e type sudoers.

Esta postagem no blog descreve uma caso de uso. Este tópico refere-se ao estado de coisas com relação ao RHEL5 / CentOS5 e RHEL6 / CentOS6

    
por 07.04.2013 / 20:55