缺乏安全性的系統不是完整的系統。系統中必須有一套能夠保護檔案免遭非授權使用者瀏覽或修改的機制。linux沿用了unix檔案許可權的辦法,即允許使用者和組根據每個檔案和目錄的安全性設定來訪問檔案。
linux安全系統的核心是使用者賬戶。每個能進入linux系統的使用者都會被分配唯一的使用者賬戶。使用者對系統中各種物件的訪問許可權取決於他們登入系統時用的賬戶。
使用者許可權是通過建立使用者時分配的使用者id(user id,通常縮寫為uid)來跟蹤的。uid是數值,每個使用者都有唯一的uid,但在登入系統時用的不是uid,而是登入名。登入名是使用者用來登入系統的最長八字元的字串(字元可以是數字或字母),同時會關聯乙個對應的密碼。
linux系統使用特定的檔案和工具來跟蹤和管理系統上的使用者賬戶。
/etc/passwd檔案
linux系統使用乙個專門的檔案來將使用者的登入名匹配到對應的uid值。這個檔案就是/etc/passwd檔案,它包含了一些與使用者有關的資訊。下面是linux系統上典型的/etc/passwd檔案的乙個例子。
[root@localhost tmp]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
nobody:x:99:99:nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd network management:/:/sbin/nologin
dbus:x:81:81:system message bus:/:/sbin/nologin
polkitd:x:999:998:user for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:rpcbind daemon:/var/lib/rpcbind:/sbin/nologin
sshd:x:74:74:privilege-separated ssh:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
root使用者賬戶是linux系統的管理員,固定分配給它的uid是 0 。就像上例中顯示的,linux系統會為各種各樣的功能建立不同的使用者賬戶,而這些賬戶並不是真的使用者。這些賬戶叫作系統賬戶,是系統上執行的各種服務程序訪問資源用的特殊賬戶。所有執行在後台的服務都需要用乙個系統使用者賬戶登入到linux系統上。
在安全成為乙個大問題之前,這些服務經常會用root賬戶登入。遺憾的是,如果有非授權的使用者攻陷了這些服務中的乙個,他立刻就能作為root使用者進入系統。為了防止發生這種情況,現在執行在linux伺服器後台的幾乎所有的服務都是用自己的賬戶登入。這樣的話,即使有人攻入了某個服務,也無法訪問整個系統。
linux為系統賬戶預留了500以下的uid值。有些服務甚至要用特定的uid才能正常工作。為普通使用者建立賬戶時,大多數linux系統會從500開始,將第乙個可用uid分配給這個賬戶(並非所有的linux發行版都是這樣)。
/etc/passwd檔案包含了7個字段的資訊,每個資訊之間用:隔開,具體的資訊含義如下:
/etc/passwd檔案中的密碼欄位都被設定成了x,這並不是說所有的使用者賬戶都用相同的密碼。
在早期的linux上,/etc/passwd檔案裡有加密後的使用者密碼。但鑑於很多程式都需要訪問
/etc/passwd檔案獲取使用者資訊,這就成了乙個安全隱患。隨著用來破解加密密碼的工具的不斷演進,用心不良的人開始忙於破解儲存在/etc/passwd檔案中的密碼。linux開發人員需要重新考慮這個策略。
現在,絕大多數linux系統都將使用者密碼儲存在另乙個單獨的檔案中(叫作shadow檔案,位置在/etc/shadow)。只有特定的程式(比如登入程式)才能訪問這個檔案。
/etc/passwd是乙個標準的文字檔案。你可以用任何文字編輯器在/etc/password檔案裡直接手動進行使用者管理(比如新增、修改或刪除使用者賬戶)。但這樣做極其危險。如果/etc/passwd檔案出現損壞,系統就無法讀取它的內容了,這樣會導致使用者無法正常登入(即便是root使用者)。用標準的linux使用者管理工具去執行這些使用者管理功能就會安全許多。
/etc/shadow檔案
/etc/shadow檔案對linux系統密碼管理提供了更多的控制。只有root使用者才能訪問/etc/shadow檔案,這讓它比起/etc/passwd安全許多。
/etc/shadow檔案為系統上的每個使用者賬戶都儲存了一條記錄。記錄就像下面這樣:
[root@localhost tmp]# cat /etc/shadow
root:$6$ey4l/mjxzc7qrd./$qnd9wqypz1i98dduod00kz8jzr6ojyl8gnqw.s2u6swzmzdc8mxoskjvfbyrj7ignfa0lolbj7vc1tokthmfu/::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:18241::::::
dbus:!!:18241::::::
polkitd:!!:18241::::::
libstoragemgmt:!!:18241::::::
abrt:!!:18241::::::
rpc:!!:18241:0:99999:7:::
sshd:!!:18241::::::
postfix:!!:18241::::::
ntp:!!:18241::::::
chrony:!!:18241::::::
tcpdump:!!:18241::::::
/etc/shadow檔案包含了9個字段的資訊,每個資訊之間用:隔開,具體的資訊含義如下:
使用shadow密碼系統後,linux系統可以更好地控制使用者密碼。它可以控制使用者多久更改一
次密碼,以及什麼時候禁用該使用者賬戶,如果密碼未更新的話。
許可權設計(功能許可權與資料許可權)
許可權設計的最終目標就是定義每個使用者可以在系統中做哪些事情。當我們談到許可權的時候,一般可以分為 功能許可權 資料許可權和字段許可權 功能許可權 使用者具有哪些權利,比如特定單據的增 刪 改 查 審批 反審批等等 一般按照乙個人在組織內的工作內容來劃分 比如乙個單據往往有錄入人和審批人,錄入人具有...
許可權設計 系統登入使用者許可權設計
需求分析 場景 假設需要為公司設計乙個人員管理系統,並為各級領導及全體員工分配系統登入賬號。有如下幾個要求 1.許可權等級不同 公司領導登入後可檢視所有員工資訊,部門領導登入後只可檢視本部門員工的資訊,員工登入後只可檢視自己的資訊 2.訪問許可權不同 如公司領導登入後,可檢視員工薪水分布介面,而員工...
許可權設計(二)
第一部分請參看 針對這樣的需求,版本一就無能為力了 當然你也可以增加幾個功能 比如分類a的新聞起草和分類b的新聞起草,再把這個功能新增到相應的角色裡面去,但是這個應該不是我們要得解決方案吧,不過版本二也是基於這個思想來解決的 其實比新聞更好的例子是論壇板塊的版主。下面是版本二的解決方案 在版本二的功...