<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Linux Capabilities 簡介

      為了執行權限檢查,Linux 區分兩類進程:特權進程(其有效用戶標識為 0,也就是超級用戶 root)和非特權進程(其有效用戶標識為非零)。 特權進程繞過所有內核權限檢查,而非特權進程則根據進程憑證(通常為有效 UID,有效 GID 和補充組列表)進行完全權限檢查。

      以常用的 passwd 命令為例,修改用戶密碼需要具有 root 權限,而普通用戶是沒有這個權限的。但是實際上普通用戶又可以修改自己的密碼,這是怎么回事?在 Linux 的權限控制機制中,有一類比較特殊的權限設置,比如 SUID(Set User ID on execution),不了解 SUID 的同學請參考《Linux 特殊權限 SUID,SGID,SBIT》。因為程序文件 /bin/passwd 被設置了 SUID 標識,所以普通用戶在執行 passwd 命令時,進程是以 passwd 的所有者,也就是 root 用戶的身份運行,從而修改密碼。

      SUID 雖然可以解決問題,卻帶來了安全隱患。當運行設置了 SUID 的命令時,通常只是需要很小一部分的特權,但是 SUID 給了它 root 具有的全部權限。因此一旦 被設置了 SUID 的命令出現漏洞,就很容易被利用。也就是說 SUID 機制在增大了系統的安全攻擊面。

      Linux 引入了 capabilities 機制對 root 權限進行細粒度的控制,實現按需授權,從而減小系統的安全攻擊面。本文將介紹 capabilites 機制的基本概念和用法。

      說明:本文的演示環境為 Ubuntu 18.04。

      Linux capabilities 是什么?

      從內核 2.2 開始,Linux 將傳統上與超級用戶 root 關聯的特權劃分為不同的單元,稱為 capabilites。Capabilites 作為線程(Linux 并不真正區分進程和線程)的屬性存在,每個單元可以獨立啟用和禁用。如此一來,權限檢查的過程就變成了:在執行特權操作時,如果進程的有效身份不是 root,就去檢查是否具有該特權操作所對應的 capabilites,并以此決定是否可以進行該特權操作。比如要向進程發送信號(kill()),就得具有 capability CAP_KILL;如果設置系統時間,就得具有 capability CAP_SYS_TIME

      下面是從 capabilities man page 中摘取的 capabilites 列表:

      capability 名稱 描述
      CAP_AUDIT_CONTROL 啟用和禁用內核審計;改變審計過濾規則;檢索審計狀態和過濾規則
      CAP_AUDIT_READ 允許通過 multicast netlink 套接字讀取審計日志
      CAP_AUDIT_WRITE 將記錄寫入內核審計日志
      CAP_BLOCK_SUSPEND 使用可以阻止系統掛起的特性
      CAP_CHOWN 修改文件所有者的權限
      CAP_DAC_OVERRIDE 忽略文件的 DAC 訪問限制
      CAP_DAC_READ_SEARCH 忽略文件讀及目錄搜索的 DAC 訪問限制
      CAP_FOWNER 忽略文件屬主 ID 必須和進程用戶 ID 相匹配的限制
      CAP_FSETID 允許設置文件的 setuid 位
      CAP_IPC_LOCK 允許鎖定共享內存片段
      CAP_IPC_OWNER 忽略 IPC 所有權檢查
      CAP_KILL 允許對不屬于自己的進程發送信號
      CAP_LEASE 允許修改文件鎖的 FL_LEASE 標志
      CAP_LINUX_IMMUTABLE 允許修改文件的 IMMUTABLE 和 APPEND 屬性標志
      CAP_MAC_ADMIN 允許 MAC 配置或狀態更改
      CAP_MAC_OVERRIDE 覆蓋 MAC(Mandatory Access Control)
      CAP_MKNOD 允許使用 mknod() 系統調用
      CAP_NET_ADMIN 允許執行網絡管理任務
      CAP_NET_BIND_SERVICE 允許綁定到小于 1024 的端口
      CAP_NET_BROADCAST 允許網絡廣播和多播訪問
      CAP_NET_RAW 允許使用原始套接字
      CAP_SETGID 允許改變進程的 GID
      CAP_SETFCAP 允許為文件設置任意的 capabilities
      CAP_SETPCAP 參考 capabilities man page
      CAP_SETUID 允許改變進程的 UID
      CAP_SYS_ADMIN 允許執行系統管理任務,如加載或卸載文件系統、設置磁盤配額等
      CAP_SYS_BOOT 允許重新啟動系統
      CAP_SYS_CHROOT 允許使用 chroot() 系統調用
      CAP_SYS_MODULE 允許插入和刪除內核模塊
      CAP_SYS_NICE 允許提升優先級及設置其他進程的優先級
      CAP_SYS_PACCT 允許執行進程的 BSD 式審計
      CAP_SYS_PTRACE 允許跟蹤任何進程
      CAP_SYS_RAWIO 允許直接訪問 /devport、/dev/mem、/dev/kmem 及原始塊設備
      CAP_SYS_RESOURCE 忽略資源限制
      CAP_SYS_TIME 允許改變系統時鐘
      CAP_SYS_TTY_CONFIG 允許配置 TTY 設備
      CAP_SYSLOG 允許使用 syslog() 系統調用
      CAP_WAKE_ALARM 允許觸發一些能喚醒系統的東西(比如 CLOCK_BOOTTIME_ALARM 計時器)

      如何使用 capabilities?

      getcap 命令和 setcap 命令分別用來查看和設置程序文件的 capabilities 屬性。下面我們演示如何使用 capabilities 代替 ping 命令的 SUID。
      因為 ping 命令在執行時需要訪問網絡,這就需要獲得 root 權限,常規的做法是通過 SUID 實現的(和 passwd 命令相同):

      紅框中的 s 說明應用程序文件被設置了 SUID,這樣普通用戶就可以執行這些命令了。

      移除 ping 命令文件上的 SUID 權限:

      $ sudo chmod 755 /bin/ping

      在移除 SUID 權限后,普通用戶在執行 ping 命令時碰到了 "ping: socket: Operation not permitted" 錯誤。

      為 ping 命令文件添加 capabilities
      執行 ping 命令所需的 capabilities 為 cap_net_admin 和 cap_net_raw,通過 setcap 命令可以添加它們:

      $ sudo setcap cap_net_admin,cap_net_raw+ep /bin/ping

      被賦予合適的 capabilities 后,ping 命令又可以正常工作了,相比 SUID 它只具有必要的特權,在最大程度上減小了系統的安全攻擊面。

      如果要移除剛才添加的 capabilities,執行下面的命令:

      命令中的 ep 分別表示 Effective 和 Permitted 集合(接下來會介紹),+ 號表示把指定的 capabilities 添加到這些集合中,- 號表示從集合中移除(對于 Effective 來說是設置或者清除位)。

      程序文件的 capabilities

      在上面的示例中我們通過 setcap 命令修改了程序文件 /bin/ping 的 capabilities。在可執行文件的屬性中有三個集合來保存三類 capabilities,它們分別是:

      • Permitted
      • Inheritable
      • Effective

      在進程執行時,Permitted 集合中的 capabilites 自動被加入到進程的 Permitted 集合中。
      Inheritable 集合中的 capabilites 會與進程的 Inheritable 集合執行與操作,以確定進程在執行 execve 函數后哪些 capabilites 被繼承。
      Effective 只是一個 bit。如果設置為開啟,那么在執行 execve 函數后,Permitted 集合中新增的 capabilities 會自動出現在進程的 Effective 集合中。

      進程的 capabilities

      進程中有五種 capabilities 集合類型,分別是:

      • Permitted
      • Inheritable
      • Effective
      • Bounding
      • Ambient

      相比文件的 capabilites,進程的 capabilities 多了兩個集合,分別是 Bounding 和 Ambient。
      /proc/[pid]/status 文件中包含了進程的五個 capabilities 集合的信息,我們可以通過下面的命名查看當前進程的 capabilities 信息:

      $ cat /proc/$$/status | grep 'Cap'

      但是這中方式獲得的信息無法閱讀,我們需要使用 capsh 命令把它們轉義為可讀的格式:

      $ capsh --decode=0000003fffffffff

      總結

      把特權用戶僅僅分為 root 和普通用戶顯然是過于粗糙了,這會帶來安全問題。Capabilities 為解決這一問題而生,它能提供精細粒度的特權集,從而有效的減小系統的安全攻擊面。

      參考:
      capability man page
      Linux的capabilities機制
      How Linux Capability Works in 2.6.25
      getcap, setcap and file capabilities
      Linux capabilities 101
      getcap man page
      setcap man page

      posted @ 2019-08-28 08:42  sparkdev  閱讀(41329)  評論(5)    收藏  舉報
      主站蜘蛛池模板: Y111111国产精品久久久| 久久综合伊人77777| 久久综合88熟人妻| 欧美一区二区三区久久综合| 亚洲老女人区一区二视频| 人妻少妇456在线视频| 久久国产精品77777| 国产免费无遮挡吃奶视频| 国产成人综合亚洲欧美日韩| 国产精品天天看天天狠| 久久国产免费观看精品| 亚洲精品熟女一区二区| 绥中县| 成人午夜伦理在线观看| 亚洲欧美日韩成人一区| 一区二区三区激情都市| 久久91精品牛牛| 国产性色av免费观看| 亚洲欧美综合人成在线| 亚洲自偷自拍另类小说| 中文字幕亚洲国产精品| 日韩美女一区二区三区视频| 99久久精品午夜一区二区| 日韩精品国产二区三区| 无码伊人久久大杳蕉中文无码| 7878成人国产在线观看| 亚洲人成精品久久久久| 亚洲av成人无码精品电影在线| 亚洲国产综合精品2020| 四虎影视一区二区精品| 国产福利一区二区三区在线观看| 原平市| 亚洲天堂网中文在线资源| 国产乱色国产精品免费视频| 精品国产午夜福利在线观看| 国产日韩综合av在线| A级毛片免费完整视频| 国产精品视频一区不卡| 丰满人妻熟妇乱又仑精品| 国产农村老太xxxxhdxx| 四虎国产精品永久在线|