程序身份
通常一個程序具有多個辨別,其中最重要的是PID和PPID
PID表示自身的辨別,全局唯一
PPID表示父程序的ID,可用來判斷由誰fork而來
PGID,所屬程序組ID,程序組表示一組程序,而這個PGID就是組長程序的PID
預設組長程序的子程序具有相同的PGID,一個程序可以調整自己的PGID,是自己加入或退出某個程序組
SID,會話ID,描述控制終端和幾個程序組,通常會話控制程序的PID就是SID,但對這個控制程序有以下要求:
1. 不能已經是一個程序組的組長程序
2. 最好沒有與控制終端關聯,即使有也會被切斷
會話控制程序負責管理幾個程序組,其中一般有背景程序組(不與控制終端關聯)
如果是一個登入會話,則會存在一個前台程序組,這個前台程序組與控制終端聯系并負責一系列工作,當使用者從控制終端退出時,前台程序組中的程序都會收到SIGHUP信号導緻程序退出,而背景程序組則不會退出
對于daemon程序,設計上一般是一個屏蔽SIGHUP信号的會話控制程序
平時使用nohup+&啟動背景程序,其實就是啟動了一個屏蔽SIGHUP信号的程序
使用者權限
預設已知的是屬主、屬組、其它,這個從檔案資訊可以看到,其中rwx表示讀寫執行權限
先說說實際使用者,實際使用者就是登入時的使用者,此後即使執行sudo切換使用者,實際使用者還是登入時的使用者
有效使用者,指切換到的使用者,比如sudo切換到root,那麼有效使用者就是root
初始使用者組,就是/etc/group中與使用者相關的組
有效使用者組,表示使用者此時所在的使用者組,就是newgrp切換到的使用者組,如果沒有執行,則有效使用者組就是初始使用者組
當使用指令對檔案執行操作時,就會根據有效使用者和有效使用者組以及檔案相應的操作類型判斷權限,如果不滿足則會報權限錯誤
特殊的,粘着位,例如/tmp,其權限是rwxrwxrwt,其中的t就是粘着位,以前是設定讓可執行檔案在交換區中儲存以便于下一次快速載入
現在多用于目錄,如/tmp,使每個使用者都可以在目錄下建立檔案并讀寫,但删除隻能由建立它的使用者執行(實際要稍微複雜點,但基本是一樣的邏輯)
另一個特殊的就是設定使用者位,如-rwsrwx---,其中s為設定使用者位,可通過chmod +s -s操作,設定使用者位使得任何使用者執行該檔案時,不使用有效使用者,而是使用屬主身份
例如一個檔案的權限和屬主如下:
-rwsrwx--- root root
那麼對于非root使用者執行該檔案時,相當于用root使用者執行
區分實際使用者和有效使用者可使用
who -m 實際使用者
whoami 有效使用者