在linux中,可以为实用程序分配特定的用户/组,从而限制对它们的访问。我明白,但是linux如何在系统调用级别上应用权限呢?例如,如果我尝试通过pthread_setschedparam更改调度策略或提高线程的优先级,则调用将失败,除非我以根用户身份运行进程。
所以我的问题是,linux中的哪个组件负责将权限应用于系统调用?如果我了解负责系统调用级别权限的组件,那么我可以请求系统管理员授予我的用户对某些系统调用的访问权限。也许权限不是在系统调用时,而是在某些操作时,例如更改线程优先级。我需要告诉系统管理员什么,这样他才能让我有选择地访问这些操作?
发布于 2013-02-09 03:40:06
来自内核的源代码如下所示:
以settimeofday()为例,它设置内核时间,这将需要根权限
有一个函数security_settime()可以检查安全性以设置时间
它调用使用capable()函数的cap_settime()
capable(int 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;
}发布于 2013-02-09 03:42:21
这是不言而喻的。系统调用是对内核的调用,因此内核负责将安全策略应用于某些系统调用。
从Linux2.6开始,Linux Security Modules (LSM)框架就已经存在,允许开发模块来控制内核中的某些访问。使用LSM的最常见的实现可能是SELinux。另一个已知的实现是AppArmor。
此外,2.6+内核中内置的一些capabilities(7)允许您控制非特权用户是否可以执行某些特权系统调用。
发布于 2013-02-09 03:49:55
在pthread_setschedparam(3)的特定情况下,答案取决于Linux内核版本,并且在某种程度上比较复杂。看看pthread_setschedparam(3)引用的手册页sched_setscheduler(2)的权限和资源限制部分。
通常,使用某些系统调用的权限可以由调用者的capabilites(7)来管理
https://stackoverflow.com/questions/14779868
复制相似问题