cron 보안설정#
crontab 설정#
crontab#
crontab
cron 설정 파일은 cron table을 줄여서 crontab으로 cron 작업을 설정한다. crontab 명령어는 아래와 같다.
- crontab [ -u 사용자 id ] 파일
- crontab [ -u 사용자 id ] ( -l | -r | -e )
- crontab -l : 예약된 작업리스트
- crontab -e : 예약된 작업 수정
- crontab -r : 예약된 작업 삭제
- crontab -u 사용자명 : 루트관리자는 해당 사용자의 crontab 파일을 보거나 삭제, 편집가능
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
Default operation is replace, per 1003.2
crontab 구성#
crontab 설정
cron은 RHEL5 버전까지 crontab에 설정되어 있던 run-part부분, 즉 /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 의 실행부분이 빠져 있었으나, CentOS Linux release 7.6.1810 (Core) 버전을 쓰는 OS는 run-part부분이 설정되어 있다. 기본적으로 cron이 참조하는 crontab 파일 위치는 아래와 같다.
- /var/spool/cron
- /etc/cron.d
- /etc/crontab
/var/spool/cron#
시스템 개별 사용자를 위한 crontab 파일 위치이며 일반적으로 root 계정용 하나와 계정 사용자당 1개의 파일이 생성한다. 계정명으로 파일이 생성되고 cron에서 각 설정 파일에 지정된 작업들을 실행할 때 사용할 UID를 결정한다. 해당 설정파일들은 crontab 명령으로 관리한다.
/etc/cron.d#
관리자가 지정한 cron 작업들을 설정하며, 임의 사용자 권한으로 실행할 수 있다. 시스템 관련 작업들을 등록하는 위치다.
/etc/crontab#
패키지 설치시 필요한 주기적인 cron 작업을 등록하는 위치다. 임의 사용자 권한으로 실행할 수 있다.
cron 사용자 제어#
cron 사용자 제어
cron은 동작 시 사용자에 대한 제어가 가능하다. 아래의 각 파일을 통해서 root 이외의 사용자에 대한 crontab 접근 제어 및 실행을 제어할수 있다. 각 파일들의 유무에 따라 동작 여부가 다름으로 유의해야한다. cron 동작에 제어에 관여하는 파일들은 아래와 같다.
- /etc/cron.allow
- /etc/cron.deny
cron.allow#
/etc/cron.allow 파일에 사용자의 계정을 아래와 같이 추가하면 해당 사용자는 사용자 cron을 실행 가능하다
- /etc/cron.allow
root
ACCOUNT
cron.deny#
/etc/cron.deny파일에 특정 사용자의 계정을 아래와 같이 추가하면 해당 사용자는 사용자 cron을 사용할 수 없다. 단 root는 무의미 하다.
- /etc/cron.deny
ACCOUNT
cron.allow, cron.deny파일 존재 유무에 따른 동작#
cron.allow, cron.deny파일 존재 유무 및 내용에 따른 동작
- 비어있는 cron.allow 파일만 존재할 경우
- root crontab 사용가능
- 사용자 crontab 사용불가
- 비어있는 cron.deny 파일만 존재할 경우
- root crontab 사용가능
- 사용자 crontab 사용가능
- 비어있는 cron.allow, cron.deny 파일 모두 존재하는 경우
- root crontab 사용가능
- 사용자 crontab 사용불가
- cron.allow, cron.deny 파일 설정이 되어 있는 경우
- root crontab 사용가능
- 사용자 crontab 사용가능
crontab 파일 형식#
crontab 파일 형식
crontab 설정은 아래와 같이 두가지 형식이 존재한다. 필자는 아래의 두 가지 설정을 통한 충돌로 고생하였다. /etc/cron.d, /etc/crontab에서 동작하는 파일 형식과 사용자 등록 작업은 각 상황에 맞게 설정하지 않으면 동작하지 않으니 유의해야 한다. 두 파일 형식의 큰 차이는 사용자 계정의 유무로 작성에 주의해야한다.
/etc/crontab, /etc/cron.d#
시스템 전체와 /etc/crontab, /etc/cron.d 에 적용되는 양식이다
- 시스템 전체 /etc/crontab, /etc/cron.d 양식
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * user-name command to be executed
사용자 crontab#
crontab -u 를 통해 사용자 지정을 통한 등록의 경우 아래 양식을 사용해야 한다. /etc/crontab, /etc/cron.d 양식과 같이 사용자 계정이 들어가게 되면 동작하지 않음으로 작성에 유의해야 한다.
- 사용자 cron 양식
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
crontab 작성#
crontab 작성
등록 내용 설정
- 분,시,일,월,요일, [ 사용자명 ] 실행명령 순으로 설정한다
- 마지막에 공백 라인을 넣어야 한다.
crontab 파일 형식
| 필 드 | 의 미 | 범 위 |
|---|---|---|
| 첫번째 | 분 | 0-59 |
| 두번째 | 시 | 0-23 |
| 세번째 | 일 | 0-31 |
| 네번째 | 월 | 1-12 |
| 다섯번째 | 요일 | 0-7 (0 또는 7=일요일, 1=월, 2=화,...) |
| 여섯번째 | 사용자명 | /etc/crontab, /etc/cron.d 에 저장될 경우 필요 |
| 일곱번째 | 작업명령 | 실행할 명령을 한줄로 작성 |
Reference
- https://en.wikipedia.org/wiki/Cron#CRON_expression
- https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html