매일 시스템을 자동으로 켜고 싶습니다. 그래서 파이썬 스크립트에서 아래 코드를 사용하지만 sudo
매번 암호를 묻습니다.
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
sudo
매번 비밀번호 를 묻지 않고이 스크립트를 어떻게 실행할 수 있습니까?
매일 시스템을 자동으로 켜고 싶습니다. 그래서 파이썬 스크립트에서 아래 코드를 사용하지만 sudo
매번 암호를 묻습니다.
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
sudo
매번 비밀번호 를 묻지 않고이 스크립트를 어떻게 실행할 수 있습니까?
답변:
참고 : 로그인 비밀번호를 일반 텍스트, 명령 또는 파일로 입력하는 방법은 안전하지 않으므로 사용해서는 안됩니다!
올바른 방법은 설정에 그것을 할 수 sudo
있도록 단지 즉 당신이 필요로하는 하나 개의 특정 명령이 echo date... > rtc...
암호를 필요없이 실행할 수있다.
gedit
예를 들어, 좋아하는 편집기를 열고 스크립트를 작성하십시오.pydatertc.sh
반향 날짜 \ '+ % s \'-d \ '+ 24 시간 \'> / sys / class / rtc / rtc0 / wakealarm
sudo chown root:root /home/username/pydatertc.sh
sudo chmod 700 /home/username/pydatertc.sh
pydatertc.sh
비밀번호없이 실행할 수 있도록 sudo 설정sudo visudo
터미널에 입력 하여 sudo 권한 ( sudoers
) 파일을여십시오.%sudo ALL=(ALL:ALL) ALL
username
하십시오. 사용자 이름은 다음과 같습니다 .
username ALL = (ALL) NOPASSWD : /home/username/pydatertc.sh
pydatertc.sh
os.system ( 'sudo /home/username/pydatertc.sh')
이제 스크립트는 암호를 요구하지 않고 실행해야 및 계정, 데이터 또는 시스템의 보안을 손상시키지 않고!
wakealarm
(일반적인 용도는 아님) :에서 이러한 특정 경우 이후, /sys/class/rtc/rtc0/wakealarm
파일은 시스템의 모닝콜 알람을 제어하고, 그렇지 않으면 무해한, 또 다른 암호를 방지하는 것은 하나가와 해당 파일의 소유권을하는 것입니다 chown
(당신이 알람을 설정하는 유일한 사용자 인 경우) 또는 chmod +666
;로 세계 쓰기 가능하게 만드십시오 . 이 경우 단순히 sudo
파이썬 호출에서 를 제거하고 sh -c "...."
그대로 유지하십시오.
sudo
있습니다. 따라서 / usr / sbin 또는 / root와 같이 루트 만 변경할 수있는 디렉토리에 스크립트를 배치하는 것이 훨씬 안전 합니다 . 그렇지 않으면 LGTM입니다.
경고!
로그인 비밀번호를 일반 텍스트, 명령 또는 파일로 입력하는 것은 매우 안전하지 않으며 개인 데이터 및 시스템을 손상시킬 수 있습니다. 이되어 적극 추천 당신이 당신의 시스템이 "개인"또는 "안전한 장소"로 생각하는 경우에도이 작업을 수행 결코!
스크립트가 개인적인 용도로만 사용되며 안전한 곳에 보관하고 계정 도난을 두려워하지 않는 경우 간단한 해결책은 다음과 같습니다.
echo LOGINPASSWD | sudo -S COMMAND HERE
여기서 LOGINPASSWD는 로그인 비밀번호 (예 : iloveponies)이고 COMMAND HERE는 sh -c "echo da.와 같이 sudo 뒤에 오는 명령입니다.
한 시간 또는 낮에 특정 시간에 스크립트를 실행하지 않으려면 루트의 홈 디렉토리 ( /root
) 안에 스크립트를 넣고 시스템 crontab ( /etc/crontab
) 에서 스크립트를 루트로 실행하십시오 . 그러면 보안을 손상시킬 필요가 없습니다.
crontab에 스크립트를 추가하는 방법 은 https://help.ubuntu.com/community/CronHowto 를 참조 하십시오 .
anacron
연중 무휴 24 시간 실행되지 않는 데스크톱 / 노트북 인 경우 사용하고 싶을 것입니다.
위의 훌륭한 답변에서 언급되지 않은 sudo의 또 다른 멋진 기능은 'timestamp_timeout'변수입니다. 대화식 비밀번호 입력시 저장하기 위해 증가시킬 수있는 sudo 변수입니다.
예를 들어, / etc / sudoers (또는 그 안에 포함 된 파일 중 하나)에서 기본값을 수정할 수 있습니다.
# only require a password once every 60 minutes
Defaults timestamp_timeout=60
'man sudoers'의 전체 설명 :
timestamp_timeout
Number of minutes that can elapse before sudo will ask for a passwd again. The default is 5, set this to 0 to always prompt for a password.
물론 이것은 cron에서 명령을 실행하는 특정 경우에 도움이 될 수 없습니다. 그러나 알고있는 것이 좋습니다.
export MY_SUDO_PASS="user_password_here"
작동 유형인지 테스트하려면 다음을 수행하십시오.
echo $MY_SUDO_PASS
> user_password_here
"sudo apt-get update"를 실행하고 이전에 작성한 환경 변수의 비밀번호를 승인하려면 다음을 수행하십시오.
echo $MY_SUDO_PASS | sudo -S apt-get update
파이썬에서 실행하십시오 (예 : 디렉토리 소유권을 재귀 적으로 username_here로 변경).
python
>> import subprocess
>> subprocess.call('echo $MY_SUDO_PASS | sudo -S chown -R username_here /home/username_here/folder_to_change_ownership_recursivley', shell=True)
echo $ MY_SUDO_PASS get 's password -S 스위치를 잡고 sudo에 암호를 전달