O comando adicionado ao visudo ainda está falhando em permissões?

2

Meu arquivo sudo tem dois comandos que podem rodar sem fazer login como root.

Parece assim:

user ALL=(root) NOPASSWD: /home/user/prog1.py
user ALL=(root) NOPASSWD: /home/user/prog2.py

O arquivo prog1.py é executado sem a necessidade de senha. O arquivo prog2.py falha nas permissões negadas?

O primeiro programa está acessando apenas um arquivo para leitura protegido por root. O segundo programa está criando um link simbólico e removendo um arquivo protegido por root:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from random import choice
from subprocess import Popen


def back_drop_change():
    link = "/usr/share/slim/themes/default/background.jpg"
    os.remove(link) # this is the line that returns permission denied
    image_selection = list()
    for di, _, fi in os.walk("/home/user/pictures/apod"):
        for f in fi:
            image_selection.append(di + "/" + f)
    bck_img = choice(image_selection)
    Popen(["ln", "-s", bck_img, link])

if __name__ == "__main__":
    back_drop_change()

Eu tento adicionar /usr/bin/rm /usr/share/slim/themes/default/background.jpg ao arquivo visudo, mas ele ainda falha?

EDITAR:

Alguma informação extra - sudo -l retorna:

Matching Defaults entries for user on this host:
    env_reset, editor="/usr/bin/vim -p -X", !env_editor

User user may run the following commands on this host:
    (ALL) ALL
    (root) NOPASSWD: /home/user/Pidtrk/main.py
    (root) NOPASSWD: /home/user/backdrop.py

e, novamente, posso executar python2 Pidtrk/main.py sem erros, mas não %código%.

E esses dois arquivos são de propriedade do mesmo python2 backdrop.py e têm o mesmo User .

EDIT 2:

Eu tenho os dois Permissions e prog1.py em execução em prog2.py on crontab .

Se eu tiver esta linha em @reboot :

'python2 /home/user/prog1.py >> err.log 2>&1' 

sem:

user ALL=(root) NOPASSWD: /home/user/prog1.py

Dentro do meu arquivo sudoers, o err.log mostra crontab .

Agora, quando adicionar esta linha a sudoers:

user ALL=(root) NOPASSWD: /home/user/prog1.py

O it failed with permissions denied é executado corretamente na reinicialização, por que isso é diferente para o arquivo prog1.py ?

    
por tijko 27.05.2013 / 18:12

2 respostas

2

Como indicado em um comentário esclarecedor, você está tentando executar python2 /home/user/backdrop.py . Mas você se deu permissão para executar um comando diferente - viz. /home/user/backdrop.py sem o python2 - que você não tem permissão para fazer. sudo é muito particular sobre o que permite; execute exatamente o comando para o qual você tem permissões ou altere sudoers para permitir exatamente o comando que você realmente deseja executar.

    
por 27.05.2013 / 20:53
1

Se tiver certeza de que

  1. o erro é causado no script
  2. a chamada sudo está correta

então o problema provavelmente não é sudo. Existem vários casos em que o root não tem permissão para remover um arquivo:

  1. O arquivo está em um volume montado somente para leitura (consulte cat /proc/mounts ).
  2. O arquivo é protegido por atributos do sistema de arquivos (consulte lsattr "$path" ).
  3. O diretório pai é protegido pelos atributos do sistema de arquivos.
  4. Fancy interferindo no kernel (SELinux, Apparmor).

Também pode ser útil adicionar alguns segundos de tempo de espera no script e anexar com strace a ele (como root): strace -f -p $PID

    
por 27.05.2013 / 20:13

Tags