在Linux中,实用程序可以被分配特定的用户/组和从而限制对它们的访问。 我得到的,但Linux如何应用在系统调用级别的权限。 例如,如果我试图改变调度策略或通过pthread_setschedparam提高我的线程的优先级,则调用将失败,除非我运行过程根。
所以我的问题是什么成分在Linux是负责应用权限的系统调用? 如果我没有理解组件负责权限在系统调用的水平,那么我可以要求系统管理员给予我一定的系统调用用户访问。 也许权限是无法在系统调用,但在某些行动,例如改变线程优先级。 我需要什么来告诉系统管理员,这样他就可以给我这种行为的选择性访问?
从内核源代码如下所示:
让我们settimeofday()
例如它设置核时,这将需要根权限
有一个函数security_settime()
其检查所述安全设置时间
它调用cap_settime(
它使用capable()
函数
capable(int capability)
[内核/ capability.c]
这用来检查当前用户必须做某些事情的能力,并在设定的时间的情况下,这一上限是CAP_SYS_TIME
int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz)
{
static int firsttime = 1;
int error = 0;
if (tv && !timespec_valid(tv))
return -EINVAL;
error = security_settime(tv, tz);
if (error)
return error;
if (tz) {
sys_tz = *tz;
update_vsyscall_tz();
if (firsttime) {
firsttime = 0;
if (!tv)
warp_clock();
}
}
if (tv)
return do_settimeofday(tv);
return 0;
}
这是不言自明。 系统调用是内核的调用,所以内核负责应用安全策略的一些系统调用。
由于Linux 2.6,Linux安全模块(LSM)框架已经到位,使模块的开发,以控制内核的某些访问。 利用LSM最常见的已知的实现可能是SELinux的 。 另一种已知的实现是AppArmor的 。
此外,一些capabilities(7)
建于2.6+内核允许您控制是否一定特权的一些系统调用可以通过非特权用户来完成。
在pthread_setschedparam的具体情况(3)答案取决于Linux内核版本,并以某种方式复杂。 有一个在所述部分特权和手册页的资源限制 sched_setscheduler(2)
其通过引用pthread_setschedparam(3)
在一般使用一些系统调用的权限可以由主叫方的管辖capabilites(7)
只要CPU跳转到内核空间,它能够有效地运行为root
[*]。
也就是说,它的工作原理正是你从用户角度出发的思维方式相反:不是运行作为一个普通用户,并具有以某种方式提升自己root
访问文件/设备,你通常不能,内核空间代码始终运行的root
,并具有使用户权限检查,以确保这样会限制它代表用户对只允许该用户这些操作。
[*] MAC SELinux这样系统修改此,当然。