このデバッグ手順は、コマンドまたはプロセスが失敗した場合に使用します。最初の特権失敗を検出して修正したあとで、ppriv -eD command コマンドを再度実行し、追加の特権要件を見つける必要がある場合があります。
% ppriv -eD touch /etc/acct/yearly touch[5245]: missing privilege "file_dac_write" (euid = 130, syscall = 224) needed at zfs_zaccess+0x258 touch: cannot create /etc/acct/yearly: Permission denied
/etc/name_to_sysnum ファイルで syscall 番号の名前を見つけます。
% grep 224 /etc/name_to_sysnum creat64 224
この例ではcreat64() 呼び出しが失敗しています。正常に完了するには、/etc/acct/yearly ディレクトリ内にファイルを作成できる権利がプロセスに割り当てられている必要があります。
truss コマンドは、通常のシェルで特権の使用をデバッグすることができます。たとえば、次のコマンドは、失敗した 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 出力のエラーコードの後に欠如している file_dac_write 特権がレポートされます。
使用例 76 プロファイルシェルで特権の使用を検査するための ppriv コマンドの使用次の例で、jdoe ユーザーは、役割 objadminを引き受けることができます。objadmin 役割には、Object Access Management 権利プロファイルが含まれます。この権利プロファイルによって、objadmin 役割は objadmin が所有しないファイルに関するアクセス権を変更することができます。
次の抜粋では、jdoe は、useful.script ファイルに対するアクセス権の変更に失敗しました。
jdoe% ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Apr 10 10:10 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 zfs_zaccess+0x258 chown: useful.script: Not owner
jdoe が objadmin 役割を引き受けると、ファイルに関するアクセス権が変更されます。
jdoe% su - objadmin Password: xxxxxxxx # ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Apr 10 10:10 useful.script # chown objadmin useful.script # ls -l useful.script -rw-r--r-- 1 objadmin staff 2303 Apr 10 10:10 useful.script # chgrp admin useful.script # ls -l objadmin.script -rw-r--r-- 1 objadmin admin 2303 Apr 10 10:11 useful.script使用例 77 root ユーザーが所有するファイルの変更
この例は、特権エスカレーションに対する保護を示しています。説明については、特権エスカレーションとカーネル特権を参照してください。ファイルは、root ユーザーが所有します。権限の弱い objadmin 役割ではファイルの所有を変更するためにはすべての特権が必要なので、処理は失敗します。
jdoe% su - objadmin Password: xxxxxxxx # cd /etc; ls -l system -rw-r--r-- 1 root sys 1883 Oct 10 10:20 system # chown objadmin system chown: system: Not owner # ppriv -eD chown objadmin system chown[11481]: missing privilege "ALL" (euid = 101, syscall = 16) needed at zfs_zaccess+0x258 chown: system: Not owner