Команда, добавленная в visudo, по-прежнему терпит неудачу при разрешении?

В моем sudo-файле есть две команды, которые разрешены для запуска без входа в систему с правами root.

Это выглядит так:

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

Файл prog1.py работает отлично, если не требуется пароль. prog2.py файла prog2.py разрешений?

Первая программа имеет доступ только к файлу для чтения, защищенному от 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() 

Я пытаюсь добавить /usr/bin/rm /usr/share/slim/themes/default/background.jpg в файл visudo, но все равно не удается?

РЕДАКТИРОВАТЬ:

Дополнительная информация – sudo -l возвращает:

 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 

и снова, я могу запустить python2 Pidtrk/main.py без ошибок, но не python2 backdrop.py .

И оба этих файла принадлежат одному и тому же User и имеют одинаковые Permissions .

EDIT 2:

У меня есть оба prog1.py и prog2.py работающие в crontab на @reboot .

Если у меня есть эта строка в crontab :

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

без:

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

Внутри файла sudoers файл err.log показывает, что it failed with permissions denied .

Теперь, когда я добавляю эту строку в sudoers:

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

prog1.py работает нормально при перезагрузке, почему это все prog2.py файла prog2.py ?

Как указано в пояснительном комментарии, вы пытаетесь запустить python2 /home/user/backdrop.py . Но вы дали себе разрешение на запуск другой команды – а именно. /home/user/backdrop.py без python2 – что вам не разрешено делать. sudo очень определенно о том, что он позволяет; либо выполняйте точно команду, для которой у вас есть разрешения, или измените sudoers чтобы разрешить именно ту команду, которую вы действительно хотите запустить.

Если вы уверены, что

  1. ошибка возникает в скрипте
  2. правильный вызов sudo

то проблема, скорее всего, не судо. Существует несколько случаев, когда root не разрешает удалять файл:

  1. Файл находится на томе, который монтируется только для чтения (см. cat /proc/mounts ).
  2. Файл защищен атрибутами файловой системы (см. lsattr "$path" ).
  3. Родительский каталог защищен атрибутами файловой системы.
  4. Причудливый промежуточный материал ядра (SELinux, Apparmor).

Также может быть полезно добавить несколько секунд времени ожидания в скрипт и приложить с помощью strace к нему (как root): strace -f -p $PID