Tengo postfix instalado en mi máquina y yo soy la actualización de virtual_alias en la mosca de la programación(usando python)(en alguna acción). Una vez que actualizo la entrada en el /etc/postfix/virtual_alias, estoy ejecutando el comando:

sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile

, Pero estoy recibiendo el error:

sudo: sorry, you must have a tty to run sudo

Quiero ejecutar el mencionado comando sudo en un no-humano(es decir, que estoy ejecutando este comando del sistema a partir de una secuencia de comandos de python.). Así que ¿cómo puedo obtener este comando ejecutar mediante programación?

OriginalEl autor None-da | 2009-02-24

6 Comentarios

  1. 20

    Puede ejecutar el script de python como raíz en sí – entonces usted no tendrá que agregar privilegio para recargar postfix.

    O usted puede configurar sudo para que no necesite una contraseña para /etc/init.d/postfix.

    de configuración de sudo (a través de visudo) permite NOPASSWD: para permitir que el comando sin una contraseña. Ver http://www.sudo.ws/sudo/man/sudoers.html#nopasswd_and_passwd

    <username>  ALL = NOPASSWD: /etc/init.d/postfix

    o algo similar.

    +1: hacer el sudo fuera de la secuencia de comandos de Python.
    Douglas! ¿Cómo puedo configurar sudo no necesita una contraseña, en ese script(/etc/init.d/postfix reload) solo?
    Hacer sudo no necesita passwork es sujeto de sudoers, y fuera del ámbito de la programación de la pregunta, sudo puede ser configurado por el programa por el usuario.
    visudo»
    Gracias Douglas 😀

    OriginalEl autor Douglas Leeder

  2. 5
    #include <unistd.h>
    #include <stdlib.h>
    
    // gcc -o reload_postfix reload_postfix.c
    // chown root reload_postfix
    // chmod +s reload_postfix
    
    int main( int argc, char **argv ) {
        setuid( geteuid() );
        system("/etc/init.d/postifx reload");
    }

    Envoltura de su comando en setuid-ed programa. Esto le permitirá a cualquier usuario reiniciar postfix. Por supuesto, usted puede restringir aún más el permiso de ejecución a determinados grupos.

    Estaba hablando acerca de la secuencia de comandos de python!
    Puesto que usted está haciendo cambios en la configuración de postfix, supuse que esto es para un servidor y que la seguridad sería mucho más importante que el uso de un lenguaje de programación específico. Usted no puede setuid() scripts debido a la forma en que se ejecutan, por lo tanto, esta solución (muy común).
    sudo se considera ser la mejor forma de obtener privilegios de root. Cambia la idea de la dispersión de los bits setuid a través de sistema de archivos único ejecutable capaz de que la funcionalidad (sudo) con la configuración central, más flexible políticas de auditoría-en condiciones de uso.

    OriginalEl autor codelogic

  3. 3

    Para contestar el error:»sudo: lo siento, debe tener un tty para ejecutar sudo», tenemos una configuración llamada «valores Predeterminados requiretty» en el archivo sudoers. Traté de comentar y funcionó :D.

    La otra forma es para pegarse un signo de exclamación delante de requiretty es decir, «valores Predeterminados !requiretty». De esa manera cualquiera que lea el archivo sudoers pueden ver que están explícitamente permitiendo sudo sin un tty

    OriginalEl autor None-da

  4. 2
    import os
    os.popen("sudo -S /etc/init.d/postifx reload", 'w').write("yourpassword")

    Por supuesto, esto no es casi siempre una buena idea como la contraseña en texto sin formato.

    Un sudo contraseña en texto plano es una idea TERRIBLE, hay mucho más segura maneras. El bit setuid específicamente esta preocupación.
    Contraseña de texto sin formato? Eeek! Conjunto de NOPASSWD en /etc/sudoers para el usuario o grupo, por lo que la contraseña no deberá ser proporcionado a sudo.
    No es que mucho de una mala idea si usted desea una rápida y sucia de la solución en su propio ordenador personal. Es simplemente mala en un entorno de producción.

    OriginalEl autor CTT

  5. 0

    si vas a hacer esto en python usted debe hacer lo siguiente:

    escribir este comando antes de la línea que usted llame el comando de shell

    os.setuid(os.geteuid())

    a continuación, se llame el comando de shell sin «sudo» prefijo

    OriginalEl autor torkashvan

Dejar respuesta

Please enter your comment!
Please enter your name here