命令或进程必须已经失败,才执行此过程。
% ppriv -eD touch /etc/acct/yearly touch[11365]: missing privilege "file_dac_write" (euid = 130, syscall = 224) needed at ufs_direnter_cm+0x27c touch: /etc/acct/yearly cannot create |
通过在 /etc/name_to_sysnum 文件中查找 syscall 编号来确定失败的系统调用。
% grep 224 /etc/name_to_sysnum creat64 224 |
truss 命令可以在常规 shell 中调试权限的使用。例如,以下命令调试失败的 touch 进程:
% truss -t creat touch /etc/acct/yearly creat64("/etc/acct/yearly", 0666) Err#13 EACCES [file_dac_write] touch: /etc/acct/yearly cannot create |
扩展的 /proc 接口在 truss 输出中的错误代码后面报告缺少的权限。
ppriv 命令可以在配置文件 shell 中调试权限的使用。如果将权限配置文件指定给用户,并且此权限配置文件包括具有权限的命令,则必须在配置文件 shell 中键入这些命令。在常规 shell 中键入特权命令时,这些命令执行时不使用特权。
在此示例中,jdoe 用户可以承担角色 objadmin。objadmin 角色拥有对象访问管理配置文件。使用此权限配置文件,objadmin 角色可以更改不属于 objadmin 的文件的权限。
在以下摘录中,jdoe 无法更改 useful.script 文件的权限:
jdoe% ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Mar 11 05:29 useful.script jdoe% chown objadmin useful.script chown: useful.script: Not owner jdoe% ppriv -eD chown objadmin useful.script chown[11444]: missing privilege "file_chown" (euid = 130, syscall = 16) needed at ufs_setattr+0x258 chown: useful.script: Not owner |
当 jdoe 承担 objadmin 角色时,更改了该文件的权限:
jdoe% su objadmin Password: <键入 objadmin 的口令> $ ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Mar 11 05:29 useful.script $ chown objadmin useful.script $ ls -l useful.script -rw-r--r-- 1 objadmin staff 2303 Mar 11 05:29 useful.script $ chgrp admin useful.script $ ls -l objadmin.script -rw-r--r-- 1 objadmin admin 2303 Mar 11 05:31 useful.script |
此示例说明防止权限升级的方法。有关说明,请参见防止权限升级。此文件归 root 用户所有。由于权限较低的 objadmin 角色需要所有权限才能更改文件的拥有权,因此操作失败。
jdoe% su objadmin Password: <键入 objadmin 的口令> $ cd /etc; ls -l system -rw-r--r-- 1 root sys 1883 Mar 20 14:04 system $ chown objadmin system chown: system: Not owner $ ppriv -eD chown objadmin system chown[11481]: missing privilege "ALL" (euid = 101, syscall = 16) needed at ufs_setattr+0x258 chown: system: Not owner |