이제 내 sudo 파일에는 루트로 로그인하지 않고도 실행할 수 있는 두 개의 명령이 있습니다.
다음과 같습니다.
user ALL=(root) NOPASSWD: /home/user/prog1.py
user ALL=(root) NOPASSWD: /home/user/prog2.py
파일 이 prog1.py
제대로 작동하려면 비밀번호가 필요하지 않습니다. prog2.py
권한 거부로 인해 파일이 실패했습니까?
첫 번째 프로그램은 읽기 위해 루트로 보호된 파일에만 액세스합니다. 두 번째 절차는 심볼릭 링크를 만들고 루트로 보호된 파일을 삭제하는 것입니다.
#!/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
실제로 실행하려는 명령을 허용하도록 변경하세요.
답변2
당신이 확신한다면
- 스크립트 내에서 오류가 발생했습니다.
- sudo 호출이 정확합니다
그렇다면 문제는 sudo가 아닐 가능성이 높습니다. 루트가 파일을 삭제할 수 없는 몇 가지 상황이 있습니다:
- 이 파일은 읽기 전용으로 마운트된 볼륨에 있습니다( 참조
cat /proc/mounts
). - 파일은 파일 시스템 속성으로 보호됩니다(참고자료 참조
lsattr "$path"
). - 상위 디렉토리는 파일 시스템 속성으로 보호됩니다.
- 멋진 커널 개입 작업(SELinux, Apparmor).
스크립트에 몇 초의 대기 시간을 추가하고 strace를 추가하는 것도 도움이 될 수 있습니다(루트로서):strace -f -p $PID