私のsudoファイルには、rootとしてログインせずに実行できる2つのコマンドがあります。
次のようになります。
user ALL=(root) NOPASSWD: /home/user/prog1.py
user ALL=(root) NOPASSWD: /home/user/prog2.py
ファイルがprog1.py
正しく機能するためにパスワードは必要ありません。prog2.py
権限の拒否によりファイルが失敗しましたか?
最初のプログラムは、読み取り用にルートで保護されたファイルにのみアクセスします。 2番目の手順は、シンボリックリンクを作成し、ルートで保護されたファイルを削除することです。
#!/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
。
編集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
?
ベストアンサー1
明確な説明に示すように実行しようとしていますpython2 /home/user/backdrop.py
。しかし、他のコマンドを実行する権限を自分で与えました。/home/user/backdrop.py
いいえpython2
。そうしないでください。sudo
許可されている項目については非常にトリッキーでなければなりません。実行権限を持つコマンドを実行するか、sudoers
実際に実行したいコマンドを許可するように変更してください。