Saya memiliki skrip dijalankan dari crontab pengguna yang tidak memiliki hak istimewa yang meminta beberapa perintah menggunakan sudo
. Kecuali tidak. Script berjalan dengan baik tetapi perintah sudo'ed diam-diam gagal.
Script berjalan dengan sempurna dari shell sebagai pengguna yang dimaksud.
Sudo tidak memerlukan kata sandi. Pengguna yang bersangkutan memiliki
(root) NOPASSWD: ALL
akses yang diberikan pada/etc/sudoers
.Cron menjalankan dan menjalankan skrip. Menambahkan sederhana
date > /tmp/log
menghasilkan keluaran pada waktu yang tepat.Itu bukan masalah izin. Sekali lagi skrip dieksekusi, tidak hanya perintah sudo'ed.
Itu bukan masalah jalur. Menjalankan
env
dari dalam skrip yang sedang dijalankan menunjukkan$PATH
variabel yang benar yang menyertakan path ke sudo. Menjalankannya menggunakan jalur lengkap tidak membantu. Perintah yang dieksekusi diberi nama path lengkap.Mencoba menangkap keluaran dari perintah sudo termasuk STDERR tidak menunjukkan sesuatu yang berguna. Menambahkan
sudo echo test 2>&1 > /tmp/log
ke skrip menghasilkan log kosong.Sudo biner itu sendiri mengeksekusi dengan baik dan mengakui bahwa ia memiliki izin bahkan ketika dijalankan dari cron di dalam skrip. Menambahkan
sudo -l > /tmp/log
ke skrip menghasilkan output:Pengguna ec2-pengguna dapat menjalankan perintah berikut pada host ini:
(root) NOPASSWD: ALL
Memeriksa kode keluar dari perintah menggunakan $?
menunjukkan itu mengembalikan kesalahan (kode keluar:) 1
, tetapi tampaknya tidak ada kesalahan yang dihasilkan. Perintah sesederhana /usr/bin/sudo /bin/echo test
mengembalikan kode kesalahan yang sama.
Apa lagi yang bisa terjadi?
Ini adalah mesin virtual yang baru dibuat yang menjalankan AMI Amazon Linux terbaru. Crontab milik pengguna ec2-user
dan file sudoers adalah distribusi default.
sudo
hak terbatas / hanya / untuk perintah yang Anda butuhkan dalam skrip dan menonaktifkan sepenuhnya kemampuan login mereka.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
dan otak saya mulai berteriak terlalu keras untuk terus membaca.