Trong Linux/Unix, crontab có thể được chạy với các quyền khác nhau tùy theo người dùng hoặc hệ thống:


1. Các loại crontab

User crontab (per-user)

Mỗi user đều có crontab riêng.

File lưu tại:

/var/spool/cron/crontabs/<username>   (Debian/Ubuntu)
/var/spool/cron/<username>            (CentOS/RHEL)

Quản lý bằng lệnh:

crontab -e        # sửa crontab của user hiện tại
crontab -l        # xem crontab của user hiện tại
crontab -r        # xóa crontab của user hiện tại

System crontab (global)

File: /etc/crontab

Khác biệt: trong file này có thêm trường user để chỉ định chạy job dưới quyền user nào.
Ví dụ:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 7)
# │ │ │ │ │ ┌─ user
# │ │ │ │ │ │   ┌─ command
* * * * * root   /usr/bin/php /var/www/cron.php

Quyền: job sẽ chạy dưới user được chỉ định.

System-wide cron directories

Nhiều distro có thư mục:

/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/

Bất kỳ script nào đặt ở đó sẽ được cron tự động chạy, thường dưới quyền root.


2. Quyền hạn khi dùng crontab

  • root: có thể tạo và quản lý crontab của mọi user: crontab -u username -e
  • user thường: chỉ quản lý crontab của chính mình, và bị giới hạn nếu có file:
    • /etc/cron.allow: chỉ user trong file này mới được dùng crontab.
    • /etc/cron.deny: user trong file này sẽ bị chặn dùng crontab.

3. Phân quyền trong thực tế

  • Nếu job cần quyền root (ví dụ: restart service, copy vào thư mục hệ thống) → đặt trong /etc/crontab hoặc crontab -e khi đang là root.
  • Nếu job chỉ cần quyền user (ví dụ: chạy script trong home) → dùng crontab -e của user đó.
  • Nếu nhiều user cần cron riêng biệt → mỗi user tự tạo crontab, an toàn hơn so với gom tất cả vào root.