scripting: como interativamente chamar setreuid () / setregid () em um script bash com as permissões corretas?

3

Eu tenho um script bash iniciado com cap_sys_admin,cap_setgid,cap_setuid+i (o que significa que esses recursos são herdáveis) , o que é o comando para se tornar root sem digitar a senha (observe isso significa usar setreuid(0,0) ) ?

O objetivo é realizar isso sem estar no modo de desenvolvedor, nem desativando a verificação do rootfs . Isso significa que não posso chamar um wrapper que eu teria escrito nem posso usar python ou perl, a menos que haja uma maneira de usar o cap_sys_admin para remontar um executável de partição.
O script é iniciado durante o processo de inicialização.

    
por user2284570 02.05.2017 / 01:05

3 respostas

2

A resposta é simples como o mount.exfat-fuse depende apenas das permissões e não verifica ᴜɪᴅ 0:

/sbin/mount.exfat-fuse /media/removable/Y/dev /media/removable/archive -o exec,nonempty

Claro, isso só funciona para as versões que eu me preocupo com o upgrade exfat-fuse graças à minha descoberta .

    
por 14.05.2017 / 15:46
4

Minha primeira observação é que você tem 3 recursos. Você está tentando perguntar como escalar seu conjunto de recursos para todos os recursos, tornando-se root? À primeira vista, parece que você está tentando ganhar todos os recursos (tornando-se root), tendo apenas 3.

A segunda observação é que você não especifica qual é o recurso de limitação do sistema. Ou seja Se o conjunto global de limites for apenas aqueles 3 recursos, tornar-se root não terá efeito.

Terceira observação é que você não especifica quais são os "securebits". Dependendo do seu valor, pode ser impossível adicionar qualquer outra capacidade ou pode ser o caso de se tornar root não faz mais do que mudar seu UID (ou seja, o root não é mais especial).

Quarta observação - enquanto você está iniciando o shell bash com os recursos listados, você não mostra que o bash realmente reteve esses recursos. Você pode querer ter certeza.

Mas eu vou com a observação # 1 e digo que o que você está pedindo não deveria ser possível. Se for, parece que seria um bug de segurança do kernel - especificamente um escalonamento de privilégios. Se você encontrar uma maneira de fazê-lo, eu pensaria que não ficaria por muito tempo, pois os bugs de segurança geralmente são corrigidos o mais rápido possível.

Estou faltando alguma coisa no seu caso de uso para saber por que isso não seria um bug de segurança?

    
por 11.05.2017 / 04:12
1

Nova resposta: Não é possível, a menos que você esteja disposto a assumir os riscos, que como você indicou (sabiamente), você não está disposto a aceitar.

Para resumir o problema:

  1. Todos os discos, exceto rootfs, são montados como noexec, portanto, podem conter scripts, mas não programas
  2. Rootfs (o sistema) é checksum e não pode ser modificado
  3. Os verbos modificadores do sistema só são permitidos no modo de desenvolvimento (admin)
  4. A remontagem de discos com exec só é possível no modo de desenvolvimento
  5. A menos que no modo de desenvolvimento, recursos suid e modificadores de sistema não estão operacionais.

Soluções e soluções alternativas:

  1. Os programas podem ser executados por um script que começa com a linha she-bang (começa com #!), que executará o executável nomeado nessa linha. Mas, a menos que no modo de desenvolvimento, somente um número limitado de programas do rootfs pode ser executado dessa maneira.
  2. Remova a verificação rootfs e torne o sistema de arquivos gravável por meio de sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification
    Consulte o link com avisos.
  3. Escreva seus próprios rootfs com checksum ( link para o documento eliminado no cache do google ).

[Resposta antiga]

Você solicitou o recurso CAP_SYS_ADMIN , que equivale a raiz permissão, uma vez que concede a capacidade de montar / desmontar sistemas de arquivos, de modo a ligar um novo sistema de arquivos a um existente para fazer backdoor de qualquer binário no sistema.

Como no Chrome OS, foi feito um grande esforço para bloquear todas as falhas de segurança, até e inclusive bloqueando suid quando não estiver no modo dev, eu não sei se os recursos também foram bloqueados e não tenho um Chromebook para testar (mas você faz).

Tais capacidades podem ser concedidas via:

$  sudo setcap cap_sys_admin+ep executable

Referências:

por 11.05.2017 / 09:17