¿Es posible cambiar la propiedad de un ejecutable a root usando sudo?

¿Es posible cambiar la propiedad de un ejecutable a root usando sudo?

Tengo un ejecutable creado por mi ID de usuario que necesito ejecutar como root. Por lo tanto, necesito cambiar la propiedad de mi ejecutable para que sea root:root y usar setuid. cuando intento

sudo chown root:root [EXE_NAME]

Recibo el error:

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

Mis limitaciones son:

  • Tengo sudo TODO TODO para mi ID de usuario en el archivo sudoers, pero no puedo iniciar sesión como root
  • El ejecutable que necesita ejecutarse como root intenta vincularse a una interfaz de red (de ahí la necesidad de ejecutarse como root) en modo promisivo utilizando la función pcap_open_live.

¿Existe una mejor manera de resolver mi problema final, es decir, la necesidad de ejecutar un ejecutable que se vincule a una interfaz de red que sea segura y no requiera sudo ni la creación de un shell de propiedad raíz ( sudo tcsh)?

Respuesta1

Si sudorealmente le da UID 0 (verifique con sudo id), sospecho que el archivo reside en un sistema de archivos que no admite permisos (por ejemplo, FAT32). En dicho sistema de archivos no se puede cambiar la propiedad (o los permisos) de un archivo.

Respuesta2

Si su sistema de archivos admite la propiedad, se me ocurren tres razones más:

  1. La partición está montada como de solo lectura.

    Intente cambiar el nombre del archivo o crear otro archivo en el mismo directorio. Si puedes, ese no es el problema.

  2. El archivo está bloqueado.

    Compruebe si el programa se está ejecutando. Intente cambiar el nombre del archivo.

  3. El archivo está configurado comoagregar solooinmutable.

    Para cambiar esto, ejecute el siguiente comando:

    sudo chattr -ai filename
    

Respuesta3

Si solo necesitas cambiarpropiedad(y no la propiedad ni el grupo), entonces puedes usar chown root filename. Con el prefijo sudo si no eres root.

Si también quieres cambiar de grupo siempre hay chgrp.

(Por supuesto, no es tan agradable como todo en un solo comando).

Respuesta4

Los usuarios normales también pueden vincularse a una interfaz de red, pero no a puertos menores de 1024. Por lo tanto, puede hacer que su programa se vincule a un puerto >= 1024 y luego redirigir a ese puerto ya sea externamente o mediante ssh -fN -L 0.0.0.0:<PRIV_PORT>:localhost:<UNPRIV_PORT>.

Dicho esto, su problema también podría estar relacionado con SElinux, que está habilitado de forma predeterminada en RHEL. Para desactivarlo, SELINUX=disabledconfigúrelo /etc/selinux/config.

información relacionada