Quão seguro é sudo ao executar a partir da raiz para executar um aplicativo como um usuário menos privilegiado?

6

Digamos que eu esteja logado em um terminal raiz e eu corro algo como o seguinte comando:

sudo -u '#1000' dbus-launch chromium
  • Há algum possível problema de segurança com o qual eu deveria me preocupar?
  • Existe uma maneira mais segura de fazer isso? Com o requisito de que ele funcione com aplicativos GUI, o runuser não. Se eu usar runuser , recebo failed to open display .

Com isso eu posso executar comandos de terminal do meu teclado através de drivers personalizados (g15daemon), que só podem ser ativados como root.

    
por Cestarian 01.07.2014 / 21:23

1 resposta

3

sudo

A partir da página de manual relevante:

The real and effective uid and gid are set to match those of the target user as specified in the passwd file.

Além disso, na descrição da opção -P (preservar vetor de grupo) para sudo:

The real and effective group IDs, however, are still set to match the target user.

Basicamente, quaisquer comandos executados usando sudo serão executados com os IDs de usuário e grupo efetivos do usuário de destino.

Para responder à pergunta, “Existe uma maneira mais segura de fazer isso? , ao executar o sudo como um usuário não privilegiado, prefiro usar a opção -H (HOME) para < em> “defina a variável de ambiente HOME para o homedir do usuário de destino” . Em algum momento no passado, fui surpreendido por algum comportamento inesperado (não lembro dos detalhes) que consegui evitar, adicionando a opção -H aos scripts de shell que usavam o sudo.

Você provavelmente também deve verificar se as opções secure_path e env_reset estão definidas corretamente em /etc/sudoers . A execução de sudo -V mostra quais variáveis de ambiente serão passadas para os comandos lançados pelo sudo e quais não serão juntamente com outras informações interessantes / úteis.

su

Como alternativa, você pode usar su $(id -un 1000) -c 'dbus-launch chromium' para executar o Chromium com o ID do usuário e com o ID do usuário # 1000.

Se você usar su para realizar a mesma tarefa, saiba que (por padrão) su define apenas as variáveis de ambiente HOME e SHELL para aquelas de o usuário alvo. Nesse caso (onde o usuário de destino é não privilegiado, ou seja, não um superusuário) os USER e LOGNAME também são definidos para os do usuário de destino. As variáveis de ambiente restantes (como PATH ) são preservadas.

Para evitar o vazamento de dados do ambiente para os processos não privilegiados que estão sendo executados, su deve ser executado com a opção --login ou -l para um shell de login, por exemplo, su $(id -un 1000) -lc 'dbus-launch chromium'

O --login desabilita todas as variáveis de ambiente, exceto TERM , e redefine HOME , SHELL , USER e LOGNAME conforme listado acima. Além disso, o PATH é definido para um valor padrão pré-compilado e o diretório de trabalho atual é definido como o diretório inicial do usuário alvo antes de executar o script de login do usuário alvo.

Eu geralmente prefiro sudo sobre su por causa de sua capacidade de registro e sua "Sistema de bilhética", que elimina a necessidade de redigitar sua senha dentro de 5 minutos do sudo anteriormente bem sucedido.

    
por 03.07.2014 / 14:54