É possível alterar a propriedade de um executável para root usando o sudo?

É possível alterar a propriedade de um executável para root usando o sudo?

Eu tenho um executável criado pelo meu ID de usuário que preciso executar como root. Portanto, preciso alterar a propriedade do meu executável para root:root e usar setuid. Quando eu tento

sudo chown root:root [EXE_NAME]

Eu recebo o erro:

chown: changing ownership of `[EXE_NAME]`: Operation not permitted

Minhas restrições são:

  • Eu tenho sudo ALL ALL para meu ID de usuário no arquivo sudoers, mas não consigo fazer login como root
  • O executável que precisa ser executado como root está tentando se vincular a uma interface de rede (daí a necessidade de ser executado como root) em modo promíscuo usando a função pcap_open_live.

Existe uma maneira melhor de resolver meu problema final, ou seja, precisar executar um executável que se ligue a uma interface de rede que seja segura e não exija sudo ou a criação de um shell de propriedade raiz ( sudo tcsh)

Responder1

Se sudorealmente fornecer UID 0 (verifique com sudo id), suspeito que o arquivo resida em um sistema de arquivos que não suporta permissões (por exemplo, FAT32). Nesse sistema de arquivos você não pode alterar a propriedade (ou permissões) de um arquivo.

Responder2

Se o seu sistema de arquivos oferece suporte à propriedade, há mais três motivos em que posso pensar:

  1. A partição é montada somente leitura.

    Tente renomear o arquivo ou criar outro arquivo no mesmo diretório. Se você puder, esse não é o problema.

  2. O arquivo está bloqueado.

    Verifique se o programa está em execução. Tente renomear o arquivo.

  3. O arquivo está definido comoanexar apenasouimutável.

    Para alterar isso, execute o seguinte comando:

    sudo chattr -ai filename
    

Responder3

Se você só precisa mudarpropriedade(e não a propriedade e o grupo), então você pode usar chown root filename. Prefixado por sudo se você não for root.

Se você também quiser mudar de grupo sempre existe chgrp.

(Concedido, não tão bom quanto tudo em um único comando).

Responder4

Usuários normais também podem vincular-se a uma interface de rede, mas não a portas abaixo de 1024. Assim, você pode vincular seu programa a uma porta >= 1024 e, em seguida, redirecionar para essa porta externamente ou via ssh -fN -L 0.0.0.0:<PRIV_PORT>:localhost:<UNPRIV_PORT>.

Dito isto, o seu problema também pode estar relacionado ao SElinux, que é habilitado por padrão no RHEL. Para desativá-lo, SELINUX=disableddefina /etc/selinux/config.

informação relacionada