当我们执行
/usr/sbin/crond
之后,这个程序变成的½程的
domain
类型会是
crond_t
这一个~而这个
crond_t
能够读取的配置文件则为
system_cron_spool_t
这种的类型。因此不论
/etc/crontab, /etc/cron.d
以及
/var/spool/cron
都会是相关的
SELinux
类型
(/var/spool/cron
为
user_cron_spool_t)
。
文字看起
来不太容易了½,我们使用图示来说明这几个东西的关系!
图
16.5.3
、主体½程取得的
domain
与目标文件资源的
type
相互关系以
crond
为例
上图的意义我们可以这样看的:
1.
首先,我们触发一个可执行的目标文件,那就是具有
crond_exec_t
这个类型的
/usr/sbin/crond
文件;
2.
该文件的类型会让这个文件所造成的主体½程
(Subject)
具有
crond
这个领域
(domain)
,
我们的政策针对
这个领域已经制定了许多规则,其中包括这个领域可以读取的目标资源类型;
3.
由于
crond domain
被设定为可以读取
system_cron_spool_t
这个类型的目标文件
(Object)
,
因此你的配置
文件放到
/etc/cron.d/
目录下,就能够被
crond
那支½程所读取了;
4.
但最终能不能读到正确的资料,还得要看
rwx
是否符合
Linux
权限的规范!
上述的流程告诉我们几个重点,第一个是政策内需要制订详细的
domain/type
相关性;第二个是若文
件的
type
设定错误,
那么即使权限设定为
rwx
全开的
777
,该主体½程也无法读取目标文件资
源的啦!不过如此一来,
也就可以避免用户½他的家目录设定为
777
时所造成的权限困扰。
真的是这样吗?没关系~让我们来做个测试练习吧!就是,万一你的
crond
配置文件的
SELinux
并
不是
system_cron_spool_t
时,
该配置文件真的可以顺利的被读取运作吗?来看看底下的范例!
# 1.
先假
设
你因
为
不熟的
缘
故,因此是在『
root
家目
录
』½立一
个
如下的
cron
设
定:
[root@study ~]#
vim checktime
10 * * * * root sleep 60s
# 2.
检
查后才
发现
文件
放
错
目
录
了,又不想要保留副本,因此使用
mv
移
动
到正确目
录
:
[root@study ~]#
mv checktime /etc/cron.d
[root@study ~]#
ll /etc/cron.d/checktime
-
rw
-
r
--
r
--
. 1 root root 27 Aug 7 18:41
/etc/cron.d/checktime
#
仔
细
看喔,
权
限是
644
,确定
没
有
问题
!任何
½
程都能
够读
取喔!
# 3.
强
制重新
启动
crond
,然后偷看一下登
录档
,看看有
没
有
问题发
生!
[root@study ~]#
systemctl restart crond
[root@study ~]#
tail /var/log/cron
Aug 7 18:46:01 study crond[28174]: ((null)) Unauthorized SELinux
context=system_u:system_r: