Defina o nome do host sem raiz e sem CAP_SYS_ADMIN

1

Eu tenho um aplicativo que quero poder alterar o nome do host no Linux. Atualmente fazendo isso executando o comando hostname. Eu não quero definir CAP_SYS_ADMIN também. Eu também não quero editar / etc / hostname e reiniciar.

Existe um recurso que apenas permite alterar o nome do host? Se não, quais são minhas opções?

    
por Antonius Bloch 26.02.2015 / 01:31

1 resposta

2

Configurar o hostname no linux é feito através do syscall sethostname (2). E / bin / hostname é um invólucro nu em torno deste syscall (e alguns syscalls relacionados). O / etc / hostname deve ser lido durante o processo de inicialização por algum script, que subseqüentemente executa o / bin / hostname para completar seu trabalho.

CAP_SYS_ADMIN é um dos recursos do linux (7), permite que um encadeamento execute várias operações de administração do sistema, que incluem sethostname . Eu não estou ciente de uma ganularidade menor dentro da estrutura de capacidades.

No entanto, existem outras opções. Podemos conceder ao usuário algum recurso para executar algum comando como outro usuário, pelo sudo (8), de uma maneira customizada. Este exemplo sudoers (5) configuração permitirá ao usuário alice executar / bin / hostname como root.

alice ALL=(root:ALL) /bin/hostname

Como descrito nesta pergunta de superusuário , o primeiro" ALL "pode ser substituído pelos hosts onde o comando é executado, não sendo usado a menos que em um ambiente cooperativo. "root" pode ser substituído por "ALL" para permitir que Alice seja executada como qualquer usuário . Segundo "ALL" pode ser substituído pelos grupos.

O último campo é o comando alice tem permissão para ser executado. Como / bin / hostname tem uso limitado, acho que está tudo bem. Caso contrário, podemos tê-lo seguido por um argumento, portanto, Alice não pode executar o comando sem este argumento, para restringir o poder.

    
por 03.03.2015 / 01:32