当我们执行
/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: