Tôi có một tập lệnh chạy từ crontab của người dùng không có đặc quyền gọi một số lệnh bằng cách sử dụng sudo
. Ngoại trừ nó không. Kịch bản chạy tốt nhưng các lệnh sudo'ed âm thầm thất bại.
Kịch bản chạy hoàn hảo từ một trình bao như người dùng trong câu hỏi.
Sudo không yêu cầu mật khẩu. Người dùng trong câu hỏi có
(root) NOPASSWD: ALL
quyền truy cập được cấp trong/etc/sudoers
.Cron đang chạy và thực thi kịch bản. Thêm một
date > /tmp/log
đầu ra sản xuất đơn giản vào đúng thời điểm.Đây không phải là vấn đề về quyền. Một lần nữa, tập lệnh được thực thi, không phải là các lệnh sudo'ed.
Đó không phải là một vấn đề con đường. Chạy
env
từ bên trong tập lệnh đang chạy sẽ hiển thị$PATH
biến chính xác bao gồm đường dẫn đến sudo. Chạy nó bằng một đường dẫn đầy đủ không có ích. Lệnh đang được thực thi đang được cung cấp tên đường dẫn đầy đủ.Cố gắng nắm bắt đầu ra của lệnh sudo bao gồm STDERR không hiển thị bất cứ điều gì hữu ích. Thêm
sudo echo test 2>&1 > /tmp/log
vào kịch bản tạo ra một bản ghi trống.Bản thân nhị phân sudo thực thi tốt và nhận ra rằng nó có quyền ngay cả khi chạy từ cron bên trong tập lệnh. Thêm
sudo -l > /tmp/log
vào tập lệnh tạo đầu ra:Người dùng ec2-user có thể chạy các lệnh sau trên máy chủ này:
(root) NOPASSWD: ALL
Kiểm tra mã thoát của lệnh bằng cách sử dụng $?
cho thấy nó đang trả về lỗi (mã thoát 1
:), nhưng dường như không có lỗi nào được tạo ra. Một lệnh đơn giản như /usr/bin/sudo /bin/echo test
trả về cùng một mã lỗi.
Điều gì khác có thể xảy ra?
Đây là một máy ảo được tạo gần đây chạy Amazon Linux AMI mới nhất. Crontab thuộc về người dùng ec2-user
và tệp sudoers là mặc định phân phối.
sudo
các quyền bị hạn chế / chỉ / cho các lệnh bạn cần trong tập lệnh và vô hiệu hóa hoàn toàn khả năng đăng nhập của họ.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
và não tôi bắt đầu la hét quá lớn để tiếp tục đọc.