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 sudo
realmente 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:
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.
O arquivo está bloqueado.
Verifique se o programa está em execução. Tente renomear o arquivo.
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=disabled
defina /etc/selinux/config
.