Cách chạy lệnh cron bằng lệnh sudo


118

Có thể chạy một công việc cron cần lệnh sudo không?

Như:

 sudo rm somefile

Chào mừng Sayem Siam, Hãy xem câu trả lời cho câu hỏi này Askubfox.com/questions/2368/how-do-i-setup-cron-job . như tôi nghĩ rằng câu hỏi của bạn đã được hỏi trước đây tại AU
stephenmyall

1
Tôi đang cố gắng thực thi sudo cần mật khẩu nhưng làm cách nào tôi có thể cung cấp mật khẩu từ tệp cron
sayem siam

3
@sayemsiam bạn không cần đặt sudo, chỉ cần chỉnh sửa crontab gốc.
Braiam

Câu trả lời:


240

Tôi sẽ không nhận được bao nhiêu đây là một ý tưởng tồi; chỉ cần đặt, chạy sudotrong crontab yêu cầu mật khẩu của bạn được lưu trữ ở đâu đó trong bản rõ.

Đó là một ý tưởng tồi.


Sau đây là phương pháp ưa thích để chạy các tác vụ quản trị thông qua cron. Vì bạn không thực sự cần phải viết sudotrong crontab, nếu bạn đang sửa đổi crontab của root.

Sử dụng crontab của root

Chạy lệnh sau:

sudo crontab -e

Điều này mở ra rootcrontab. sudokhông cần thiết để chạy lệnh của bạn trong ngữ cảnh này, vì rootdù sao nó cũng sẽ được gọi .

Do đó, bạn chỉ cần thêm phần sau vào crontab của root.

@hourly rm somefile

Bây giờ, nếu bạn hoàn toàn muốn không an toàn và chấp nhận rủi ro với mật khẩu của mình, những điều sau đây sẽ chạy lệnh của bạn từ crontab của riêng bạn và tự động nhập mật khẩu của bạn khi được nhắc bởi sudo.

Một lần nữa, điều này không được khuyến khích .


Trong crontab của riêng bạn, hãy viết lệnh của bạn như vậy:

@hourly echo "password" | sudo -S rm somefile

Nhược điểm rõ ràng ở đây là, nếu bất cứ ai từng truy cập vào crontab của bạn, mật khẩu của bạn sẽ có thể đọc được trong bản rõ.

Bạn không nên làm điều này.


1
Vui mừng nó hoạt động! Chỉ cần cảnh giác với bất kỳ lỗ hổng bảo mật nào bạn để lại .. Họ có thể quay lại sau để ám ảnh bạn.
SirCharlo

1
@SirCharlo Tại sao nên sử rootdụng crontab của người dùng thay vì crontab trên toàn hệ thống /etc/crontab?
Eliah Kagan

1
@Elijah tại sao không?
SirCharlo

2
Câu trả lời này bỏ lỡ dấu vì nó che lấp những điểm tinh tế có sẵn trong sudoerstệp của bạn , như các nhóm sudo mà không yêu cầu mật khẩu.
brent

điểm rất rất hữu ích, cảm ơn sự giúp đỡ tuyệt vời.
Nasser Mansouri

33

Nếu bạn đang đặt tập lệnh từ một trong các thư mục cron ( /etc/cron.*) thì bạn không cần sử dụng sudo vì nó đang chạy như root.

Nếu bạn đang sử dụng crontab, thì bạn sẽ muốn sử dụng crontab của root. Điều này sẽ chạy nó như root, và cũng không cần sudo.

sudo crontab -e

1
Tôi cũng sẽ đặt lệnh trong /etc/cron.hourly/s Something. Đó là những gì các thư mục này là dành cho.
John S Gruber

3
Không. Bạn có thể đặt nó trong /etc/cron.SOMETHING/SCRIPT, nhưng tôi sẽ không làm cả hai. Cả hai sẽ cung cấp cho cùng một chức năng, mặc dù sử dụng crontab, bạn sẽ có thêm một chút sức mạnh so với tần suất / khi mọi thứ chạy.
tgm4883

1
Tôi nên đã làm rõ rằng tôi có nghĩa là như là một thay thế. Cảm ơn.
John S Gruber

3

Chạy lệnh sau trong terminal

sudo visudo

Đã thêm dòng sau vào cuối tệp:

vidyadhar  ALL= NOPASSWD: /bin/rm

Trong ví dụ trên, vidyadhar là tên người dùng và nó sẽ không hỏi mật khẩu nếu bạn đang chạy lệnh rm thông qua vidyadhar.


17
Hmm .. Sau đó, bất kỳ lệnh độc hại nào, như sudo rm -rf 'slash'( không chạy lệnh đó ), chạy từ người dùng đó, sẽ không yêu cầu mật khẩu .. Tôi không biết, nó cảm thấy không an toàn, phải không?
SirCharlo

Tôi biết điều đó. Cách tiếp cận của bạn là tốt. Nhưng tôi đang sử dụng phương pháp trên để trao quyền cho người dùng khác dừng / bắt đầu một số dịch vụ.
Vidyadhar

24
Đây là một ý tưởng cực kỳ tồi tệ. Xin đừng làm điều này.
bkanuka

2
Có lẽ vidyadhar ALL= NOPASSWD: /bin/rm somefilesẽ an toàn hơn.
Womsfried Domscheit

Đây là một ý tưởng khủng khiếp. Bạn đã cấp quyền sudo cho rm. Thay vào đó, hãy cấp quyền sudo cho tập lệnh của bạn, bao gồm rm hoặc các tập lệnh khác trong tập lệnh đó, làm cho nó có thể thực thi được, sau đó cấp quyền sudo cho tập lệnh đó. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, sẽ an toàn hơn nhiều.
RJ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.