XFCE - Executa um atalho como root, sem senha

1

Eu uso o XFCE que não suporta as teclas de controle de iluminação do teclado do meu laptop.

Eu encontrei um script ( /etc/acpi/asus-keyboard-backlight.sh ) que pode controlá-lo, mas preciso executá-lo como root.

Eu não quero inserir minha senha de root toda vez que eu mudar a luz de fundo do teclado.

Como posso configurar um atalho de teclado para que ele seja executado como root sem solicitar minha senha?

    
por Arno 08.01.2017 / 00:04

2 respostas

2

Você poderia executá-lo com sudo , depois de executar visudo para adicionar YOURUSER ALL=(ALL) NOPASSWD:ALL , o que impedirá que sudo solicite senhas ao usuário.

    
por 08.01.2017 / 00:10
1

Escreva um pequeno programa em C que chame o Bash para executar o script. Você compila este programa e dá a ele um suid bit para que ele execute o Bash (e consequentemente o script) como root.

Veja um exemplo do dito wrapper:

#include <unistd.h>

int main(void) {
    const char *bin = "/bin/bash";
    const chrar *script = "/tmp/myscrypt.sh";
    char *const argv[] = {bin, script, NULL};
    char *const env[] = {"SHELL=/bin/bash", 
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "HOME=/root", "LOGNAME=root", "_=/usr/bin/env", NULL};

    execve(bin, argv, env);

    return 0;
}

Observe que isso executa o script como root , incluindo acreditar que a raiz é /root . Se você não quiser isso, modifique o wrapper.

Assim, uma vez compilado, tudo o que lhe resta é dar um suid .

gcc wrapper.c -o wrapper
chown root wrapper
chmod u+wrxs,g+rx,o-wrx wrapper

Se você ls -l , as permissões serão assim:

-rwsr-x--- 1 root group [snip] wrapper

Isso significa que apenas o usuário do grupo group poderá executar esse wrapper. E quando o fizerem, o s in significará que o seu ID de usuário efetivo será 0.

Se você estiver fazendo isso em um ambiente compartilhado em que muitos usuários pertencem ao mesmo grupo, você poderá criar um grupo especial somente para esse arquivo e adicionar apenas seu usuário a esse grupo. Por exemplo, talvez você faça o login com o LDAP e todos os usuários pertençam ao grupo "Usuários do Domínio". Você pode criar um grupo local chamado, digamos, "JulieOnly" e adicionar somente seu usuário a esse grupo. Então você chown o wrapper para root:JulieOnly .

    
por 08.01.2017 / 00:53