4.7进程的权能
Linux用“权能(capability)”表示一进程所具有的权力。一种权能仅仅是一个标志,它表明是否允许进程执行一个特定的操作或一组特定的操作。这个模型不同于传统的“超级用户对普通用户”模型,在后一种模型中,一个进程要么能做任何事情,要么什么也不能做,这取决于它的有效UID。也就是说,超级用户与普通用户的划分过于笼统。如表4.13给出了在Linux内核中已定义的权能。
表4.13 进程的权能
名字 |
描述 |
CAP_CHOWN |
忽略对文件和组的拥有者进行改变的限制 |
CAP_DAC_OVERRIDE |
忽略文件的访问许可权 |
CAP_DAC_READ_SEARCH |
忽略文件/目录读和搜索的许可权 |
CAP_FOWNER |
忽略对文件拥有者的限制 |
CAP_FSETID |
忽略对setid和setgid标志的限制 |
CAP_KILL |
忽略对信号挂起的限制 |
CAP_SETGID |
允许 setgid标志的操作 |
CAP_SETUID |
允许 setuid 标志的操作 |
CAP_SETPCAP |
转移/删除对其它进程所许可的权能 |
CAP_LINUX_IMMUTABLE |
允许对仅追加和不可变文件的修改 |
CAP_NET_BIND_SERVICE |
允许捆绑到低于1024TCP/UDP的套节字 |
CAP_NET_BROADCAST |
允许网络广播和监听多点传送 |
CAP_NET_ADMIN |
允许一般的网络管理。 |
CAP_NET_RAW |
允许使用RAW和PACKET套节字 |
CAP_IPC_LOCK |
允许页和共享内存的加锁 |
CAP_IPC_OWNER |
跳过IPC拥有者的检查 |
CAP_SYS_MODULE |
允许内核模块的插入和删除 |
CAP_SYS_RAWIO |
允许通过ioperm( ) 和 iopl( )访问I/O端口 |
CAP_SYS_CHROOT |
允许使用chroot( ) |
CAP_SYS_PTRACE |
允许在任何进程上使用 ptrace( ) |
CAP_SYS_PACCT |
允许配置进程的计账 |
CAP_SYS_ADMIN |
允许一般的系统管理 |
CAP_SYS_BOOT |
允许使用reboot( ) |
CAP_SYS_NICE |
忽略对 nice( )的限制 |
CAP_SYS_RESOURCE |
忽略对几个资源使用的限制 |
CAP_SYS_TIME |
允许系统时钟和实时时钟的操作 |
CAP_SYS_TTY_CONFIG |
允许配置tty设备 |
任何时候,每个进程只需要有限种权能,这是其主要优势。因此,即使一位有恶意的用户使用有潜在错误程序,他也只能非法地执行有限个操作类型。
例如,假定一个有潜在错误的程序只有CAP_SYS_TIME权能。在这种情况下,利用其错误的恶意用户只能在非法地改变实时时钟和系统时钟方面获得成功。他并不能执行其它任何特权的操作。