Symlink có thể được sử dụng trong /etc/cron.d/ không?


25

Tôi đang cố gắng thực hiện một cơ chế cấu hình cho phép trong một dự án nhất định triển khai thông qua svn một cấu hình cron.

Tôi ngay lập tức nghĩ rằng những gì tôi nên làm là liên kết symate từ /etc/cron.d/ đến tệp cron của dự án của tôi (do đó được điều khiển bởi một vcs), nhưng điều đó dường như không hoạt động.

Tôi tìm thấy một số tin nhắn diễn đàn cũ đề cập rằng các liên kết tượng trưng không được hỗ trợ và nói rằng chúng là như vậy. Đó là cái gì

Có bất cứ điều gì khác hoặc bất kỳ cách tốt khác để đạt được điều này?

Câu trả lời:


27

Theo man crond

CÁP ĐIỆN

Tất cả các tệp crontab phải là các tệp thông thường hoặc liên kết tượng trưng đến các tệp thông thường, chúng không được thực thi hoặc ghi được cho bất kỳ ai khác ngoài chủ sở hữu. Yêu cầu này có thể được ghi đè bằng cách sử dụng tùy chọn -p trên dòng lệnh crond. Nếu sử dụng hỗ trợ không chính xác, các thay đổi trong crontabs được liên kết không được tự động nhận thấy bởi trình nền cron. Trình nền cron phải nhận được tín hiệu SIGHUP để tải lại crontabs. Đây là một hạn chế của API inotify.

Đầu ra syslog sẽ được sử dụng thay vì mail, khi sendmail không được cài đặt.

Nó cũng làm tôi khó chịu, tôi cũng có thể sử dụng symlink, nếu không, regular files or symlinks to a regular filenó phải sử dụng -pcông tắc.


1
Bạn cũng sẽ thấy rằng tệp phải được sở hữu bởi người dùng cron đang chạy công việc cho; ví dụ: nếu một liên kết tượng trưng /etc/cron.d/bobsjobtrỏ đến tệp do người dùng "bob" cron sở hữu sẽ thất bại với thông báo nhật ký hệ thống WRONG FILE OWNER (/etc/cron.d/bobsjob).
Craig Ringer

@CraigRinger Tôi có một người dùng có tên "www-data" sở hữu tệp cron, tôi hiện đang gặp lỗi WRONG FILE OWNER trong syslog. Làm cách nào tôi có thể thực hiện Cron bằng cách sử dụng "www-data" của người dùng. Tôi không muốn tạo root sở hữu tập tin.
CMCDragonkai

@CMCDragonkai sudo -u www-data crontab -evà thêm nó vào crontab của người dùng dữ liệu www. Sau đó, nó sẽ chạy như người dùng www-data. Hãy nhớ xóa cột người dùng rõ ràng, vì nó không tồn tại trong crontabs của người dùng.
Craig Ringer

Điều đó sẽ đặt các tập tin bên trong etc/cron.? Tôi đã ở dưới công cụ crontab ấn tượng sẽ đặt nhiệm vụ ở một nơi khác.
CMCDragonkai

@CMCDragonkai Bạn đúng, gọi crontab -ekhông phải là điều bạn muốn trong trường hợp này. Tôi đang tìm nhưng chưa tìm được cách chạy người dùng crontab với tư cách là người dùng không root.
ACK_stoverflow

14

Điều này có ý nghĩa bảo mật. Các tập lệnh trong /etc/cron.d/ được chạy bởi root với quyền root. Đó là một ý tưởng tồi đối với các tập lệnh symlink ở đó được sở hữu và có thể ghi đối với người dùng không phải root, vì hệ thống của bạn có thể bị xâm phạm theo cách đó


4

Tôi sẽ kiểm tra trang web cron cho phiên bản Ubuntu của bạn (Tôi cho rằng chúng ta đang nói về Ubuntu trên diễn đàn này!):

Các tệp trong thư mục này phải được sở hữu bởi root, không cần phải thực thi (chúng là các tệp cấu hình, giống như / etc / crontab) và phải tuân theo quy ước đặt tên giống như được sử dụng bởi các phần chạy (8): chúng phải chỉ bao gồm các chữ cái in hoa và in thường, chữ số, dấu gạch dưới và dấu gạch nối. Điều này có nghĩa là chúng không thể chứa bất kỳ dấu chấm nào.

Như Florian chỉ ra, nếu tệp này có thể ghi được bởi người dùng không phải root, thì đó là một lỗ hổng bảo mật vì các công việc sẽ được điều hành bởi root (đối với bất kỳ ai được đặt tên là chủ sở hữu công việc trong tệp). Cũng lưu ý, do đó, rằng

Thư mục này có thể chứa bất kỳ tệp nào xác định các tác vụ theo định dạng được sử dụng trong / etc / crontab, tức là không giống như bộ đệm cron người dùng, các tệp này phải cung cấp tên người dùng để chạy tác vụ như trong định nghĩa tác vụ.

tức là bật tên người dùng trước khi lệnh chạy.


1
Điều này có nghĩa là chúng không thể chứa bất kỳ dấu chấm nào. chú ý đến điều này Tôi đã có một dấu chấm vào tên liên kết. Đó là thủ phạm cho những công việc không chạy của tôi đối với tôi. Thêm vào đó, bản thân tệp PHẢI kết thúc bằng CRLF
Tiến sĩ Gianluigi Zane Zanettini
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.