可以通过减少基本集或减少限制集来限制用户或角色可用的权限。由于此类限制可能产生预料不到的副作用,因此不是非常必要时不要使用此方法限制用户权限。
为某个用户修改了基本集或限制集时,应该彻底测试任何用户的功能。
当基本集少于缺省值时,可阻止用户使用此系统。
当限制集少于所有权限时,需要使用有效 UID=0 运行的进程可能会失败。
确定用户基本集和限制集中的权限。
有关过程,请参见如何确定进程的权限。
$ usermod -K defaultpriv=basic,!priv-name username |
通过删除 proc_session 权限,可以防止用户检查其当前会话以外的任何进程。通过删除 file_link_any 权限,可以防止用户生成指向不归其所有的文件的硬链接。
请勿删除 proc_fork 或 proc_exec 权限。如果没有这些权限,用户将无法使用系统。事实上,只能从不对其他进程执行 fork() 或 exec() 操作的守护进程中删除这两个权限。
(可选的)从限制集中删除一项权限。
$ usermod -K limitpriv=all,!priv-name username |
测试 username 的功能。
以 username 的身份登录,并尝试执行 username 必须在系统上执行的任务。
在以下示例中,防止所有源自 jdoe 初始登录的会话使用 sys_linkdir 权限。也就是说,即使在用户运行 su 命令之后,也不能生成指向目录的硬链接,并且也不能解除目录链接。
$ usermod -K limitpriv=all,!sys_linkdir jdoe $ grep jdoe /etc/user_attr jdoe::::type=normal;defaultpriv=basic;limitpriv=all,!sys_linkdir |
在以下示例中,防止所有源自 jdoe 初始登录的会话使用 proc_session 权限。也就是说,即使在用户运行 su 命令之后,也不能检查此用户会话以外的任何进程。
$ usermod -K defaultpriv=basic,!proc_session jdoe |
$ grep jdoe /etc/user_attr jdoe::::type=normal;defaultpriv=basic,!proc_session;limitpriv=all |