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: ALLquyề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
envtừ bên trong tập lệnh đang chạy sẽ hiển thị$PATHbiế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/logvà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/logvà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 testtrả 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-uservà tệp sudoers là mặc định phân phối.
sudocá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/sudoersvà não tôi bắt đầu la hét quá lớn để tiếp tục đọc.