我想每天自动开启系统.所以我在Python脚本中使用下面的代码,但sudo每次都要求我输入密码:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
如何在没有sudo每次询问密码的情况下运行此脚本?
解决方法:
Please note: Any method which involves putting your login password in plain text, in a command or in a file, is insecure and should NOT be used!
正确的方法来设置sudo,只需要你需要的一个特定命令,即echo date …> rtc …,允许在不需要密码的情况下运行.
步骤1.仅使用该命令创建shell脚本
>打开gedit(或您最喜欢的编辑器),并创建脚本,例如pydatertc.sh
>仅插入此行,并将其保存到,例如你的主目录:
echo date \'+%s\' -d \'+ 24 hours\' > /sys/class/rtc/rtc0/wakealarm
>退出编辑器,从终端,使脚本可执行并将其所有权更改为root,否则另一个有权访问您系统的用户可以编辑它并以root身份执行他们想要的任何命令而无需您的密码:
sudo chown root:root /home/username/pydatertc.sh
sudo chmod 700 /home/username/pydatertc.sh
步骤2.设置sudo以允许pydatertc.sh执行而无需密码
>在终端输入sudo visudo以打开sudo权限(sudoers)文件
>在第25行附近,你会看到这一行:%sudo ALL =(ALL:ALL)ALL
>在该行下方,插入以下行,其中username是您的用户名:
username ALL=(ALL) NOPASSWD: /home/username/pydatertc.sh
>退出编辑器(如果是nano,则按Ctrl X)
步骤3.修改python脚本以调用pydatertc.sh
>将行更改为:
os.system('sudo /home/username/pydatertc.sh')
现在您的脚本应该在不需要密码的情况下运行而不会影响您的帐户,数据或系统的安全性!
仅适用于wakealarm(不适用于一般用途!):
仅在这种特定情况下,由于/ sys / class / rtc / rtc0 / wakealarm文件仅控制系统的唤醒警报,否则无害,另一种避免密码的方法是使用chown获取该文件的所有权(如果您是设置闹钟的唯一用户),或使用chmod 666将其设为世界可写;在这种情况下,只需从Python调用中删除sudo,保持sh -c“….”完好无损.
标签:python,sudo