Saya ingin mengaktifkan sistem saya secara otomatis setiap hari. Jadi saya menggunakan kode di bawah ini dalam skrip Python saya, tetapi selalu sudo
meminta kata sandi:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Bagaimana saya bisa menjalankan skrip ini tanpa sudo
meminta kata sandi setiap waktu?
Jawaban:
Cara yang benar untuk melakukan pengaturan
sudo
sehingga hanya satu perintah khusus yang Anda butuhkan, yaituecho date... > rtc...
diizinkan untuk dijalankan TANPA membutuhkan kata sandi.Langkah 1. Buat skrip shell hanya dengan perintah itu
gedit
(atau editor favorit Anda), dan buat skrip misalnyapydatertc.sh
Langkah 2. Siapkan sudo untuk memungkinkan
pydatertc.sh
eksekusi tanpa memerlukan kata sandisudo visudo
di terminal untuk membuka file sudo permissions (sudoers
)%sudo ALL=(ALL:ALL) ALL
username
nama pengguna Anda:Langkah 3. Ubah skrip python Anda untuk memanggil
pydatertc.sh
Sekarang skrip Anda harus dijalankan tanpa memerlukan kata sandi DAN tanpa membahayakan keamanan akun Anda, data Anda, atau sistem Anda!
Alternatif hanya untuk
wakealarm
(tidak untuk penggunaan umum!):Hanya dalam kasus khusus ini , karena
/sys/class/rtc/rtc0/wakealarm
file hanya mengontrol alarm untuk sistem dan tidak berbahaya, alternatif lain untuk menghindari kata sandi adalah dengan mengambil kepemilikan file tersebut denganchown
(jika Anda adalah satu-satunya pengguna yang mengatur alarm) , atau membuatnya dapat ditulis dunia denganchmod +666
; dalam hal ini, cukup hapussudo
dari panggilan Python Anda, biarkansh -c "...."
utuh.sumber
sudo
- tanpa password. Oleh karena itu, jauh lebih aman untuk meletakkan skrip ke direktori yang hanya dapat diubah oleh root, misalnya: / usr / sbin atau / root . Kalau tidak, itu LGTM.Jika skrip hanya untuk penggunaan pribadi dan Anda telah menempatkannya di tempat yang aman dan Anda tidak takut akun Anda dicuri dan semacamnya, maka inilah solusi sederhana:
di mana LOGINPASSWD adalah kata sandi masuk Anda (contoh: iloveponies) dan PERINTAH DI SINI adalah perintah Anda yang muncul setelah sudo, seperti sh -c "echo da .. etc
sumber
Jika Anda tidak keberatan skrip berjalan pada waktu tertentu pada jam tersebut (atau siang hari), letakkan di dalam direktori home root (
/root
), dan jalankan skrip dari sistem crontab (/etc/crontab
) sebagai root. Maka Anda tidak perlu berkompromi dengan keamanan Anda.Lihat https://help.ubuntu.com/community/CronHowto untuk cara menambahkan skrip ke crontab.
sumber
anacron
jika itu adalah desktop / laptop yang tidak berjalan 24x7Fitur bagus lain yang terkait dari sudo yang belum disebutkan dalam jawaban terbaik di atas adalah variabel 'timestamp_timeout'. Ini adalah variabel sudo yang dapat Anda tingkatkan untuk menghemat pengetikan kata sandi interaktif.
Contoh, di / etc / sudoers (atau salah satu file yang termasuk darinya) Anda dapat memodifikasi default:
Deskripsi lengkap dari 'man sudoers':
Tentu saja, ini tidak dapat membantu dalam kasus spesifik menjalankan perintah dari cron. Tapi itu hal yang baik untuk diperhatikan.
sumber
Untuk menguji apakah ini berfungsi:
Untuk menjalankan "sudo apt-get update", dan terima kata sandi dari variabel lingkungan apa yang kami buat sebelumnya:
Jalankan dari python (contoh mengubah kepemilikan direktori secara rekursif ke username_here):
echo $ MY_SUDO_PASS kata sandi get -S beralih menangkap dan meneruskan kata sandi ke sudo
sumber