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
?