linux Capabilities簡介--#setcap cap_net_raw,cap_net_admin=eip /a.out

轉自:https://zhidao.baidu.com/question/459061673954720405.html

Linux是一種安全操作系統,它給普通用戶儘可能低的權限,而把全部的系統權限賦予一個單一的帳戶--root。root帳戶用來管理系統、安裝軟件、管理帳戶、運行某些服務、安裝/卸載文件系統、管理用戶、安裝軟件等。另外,普通用戶的很多操作也需要root權限,這通過setuid實現。

這種依賴單一帳戶執行特權操作的方式加大了系統的面臨風險,而需要root權限的程序可能只是爲了一個單一的操作,例如:綁定到特權端口、打開一個
只有root權限可以訪問的文件。某些程序可能有安全漏洞,而如果程序不是以root的權限運行,其存在的漏洞就不可能對系統造成什麼威脅。

從2.1版開始,內核開發人員在Linux內核中加入了能力(capability)的概念。其目標是消除需要執行某些操作的程序對root帳戶的依賴。從2.2版本的內核開始,這些代基本可以使用了,雖然還存在一些問題,但是方向是正確的。

2.Linux內核能力詳解

傳統UNIX的信任狀模型非常簡單,就是“超級用戶對普通用戶”模型。在這種模型中,一個進程要麼什麼都能做,要麼幾乎什麼也不能做,這取決於進程
的UID。如果一個進程需要執行綁定到私有端口、加載/卸載內核模塊以及管理文件系統等操作時,就需要完全的root權限。很顯然這樣做對系統安全存在很
大的威脅。UNIX系統中的SUID問題就是由這種信任狀模型造成的。例如,一個普通用戶需要使用ping命令。這是一個SUID命令,會以root的權
限運行。而實際上這個程序只是需要RAW套接字建立必要ICMP數據包,除此之外的其它root權限對這個程序都是沒有必要的。如果程序編寫不好,就可能
被攻擊者利用,獲得系統的控制權。

使用能力(capability)可以減小這種風險。系統管理員爲了系統的安全可以剝奪root用戶的能力,這樣即使root用戶也將無法進行某些
操作。而這個過程又是不可逆的,也就是說如果一種能力被刪除,除非重新啓動系統,否則即使root用戶也無法重新添加被刪除的能力。

轉自:http://blog.csdn.net/zhao_cancan/article/details/38366541

 Capabilities的主要思想在於分割root用戶的特權,即將root的特權分割成不同的能力,每種能力代表一定的特權操作。例如:能力CAP_SYS_MODULE表示用戶能夠加載(或卸載)內核模塊的特權操作,而CAP_SETUID表示用戶能夠修改進程用戶身份的特權操作。在Capbilities中系統將根據進程擁有的能力來進行特權操作的訪問控制。
    在Capilities中,只有進程和可執行文件才具有能力,每個進程擁有三組能力集,分別稱爲cap_effective, cap_inheritable, cap_permitted(分別簡記爲:pE,pI,pP),其中cap_permitted表示進程所擁有的最大能力集;cap_effective表示進程當前可用的能力集,可以看做是cap_permitted的一個子集;而cap_inheitable則表示進程可以傳遞給其子進程的能力集。系統根據進程的cap_effective能力集進行訪問控制,cap_effective爲cap_permitted的子集,進程可以通過取消cap_effective中的某些能力來放棄進程的一些特權。可執行文件也擁有三組能力集,對應於進程的三組能力集,分別稱爲cap_effective, cap_allowed 和 cap_forced(分別簡記爲fE,fI,fP),其中,cap_allowed表示程序運行時可從原進程的cap_inheritable中集成的能力集,cap_forced表示運行文件時必須擁有才能完成其服務的能力集;而cap_effective則表示文件開始運行時可以使用的能力。
(一)Linux內核中Capabilities的實現機制
     Linux內核從2.2版本開始,就加進的Capabilities的概念與機制,並隨着版本升高逐步得到改進。在linux中,root權限被分割成一下29中能力:
CAP_CHOWN:修改文件屬主的權限
CAP_DAC_OVERRIDE:忽略文件的DAC訪問限制
CAP_DAC_READ_SEARCH:忽略文件讀及目錄搜索的DAC訪問限制
CAP_FOWNER:忽略文件屬主ID必須和進程用戶ID相匹配的限制
CAP_FSETID:允許設置文件的setuid位
CAP_KILL:允許對不屬於自己的進程發送信號
CAP_SETGID:允許改變進程的組ID
CAP_SETUID:允許改變進程的用戶ID
CAP_SETPCAP:允許向其他進程轉移能力以及刪除其他進程的能力
CAP_LINUX_IMMUTABLE:允許修改文件的IMMUTABLE和APPEND屬性標誌
CAP_NET_BIND_SERVICE:允許綁定到小於1024的端口
CAP_NET_BROADCAST:允許網絡廣播和多播訪問
CAP_NET_ADMIN:允許執行網絡管理任務
CAP_NET_RAW:允許使用原始套接字
CAP_IPC_LOCK:允許鎖定共享內存片段
CAP_IPC_OWNER:忽略IPC所有權檢查
CAP_SYS_MODULE:允許插入和刪除內核模塊
CAP_SYS_RAWIO:允許直接訪問/devport,/dev/mem,/dev/kmem及原始塊設備
CAP_SYS_CHROOT:允許使用chroot()系統調用
CAP_SYS_PTRACE:允許跟蹤任何進程
CAP_SYS_PACCT:允許執行進程的BSD式審計
CAP_SYS_ADMIN:允許執行系統管理任務,如加載或卸載文件系統、設置磁盤配額等
CAP_SYS_BOOT:允許重新啓動系統
CAP_SYS_NICE:允許提升優先級及設置其他進程的優先級
CAP_SYS_RESOURCE:忽略資源限制
CAP_SYS_TIME:允許改變系統時鐘
CAP_SYS_TTY_CONFIG:允許配置TTY設備
CAP_MKNOD:允許使用mknod()系統調用
CAP_LEASE:允許修改文件鎖的FL_LEASE標誌

轉自:http://www.linuxidc.com/Linux/2012-06/63580.htm

 從Linux中第一次啓動Wireshark的時候,可能會覺得奇怪,爲什麼看不到任何一個網卡,比如eth0之類的。這是因爲,直接訪問這些設備需要 root權限。然後,我就用root權限去用了。當然,這是一個不好的做法。比如Gentoo中就會提示:WIRESHARK CONTAINS OVER ONE POINT FIVE MILLION LINES OF SOURCE CODE. DO NOT RUN THEM AS ROOT.

     那怎麼辦呢?Wireshark的leader Gerald Combs指出,現在多數Linux發行版都開始實現對raw網絡設備使用文件系統權限(能力) ,可以用這個途徑從普通用戶啓動Wireshark。

以下是具體步驟:
1.安裝setcap。setcap 是libcap2-bin包的一部分,一般來說,這個包默認會已經裝好。
sudo apt-get install libcap2-bin

2.創建Wireshark組。這一步在安裝Wireshark的時候,也會完成。
# groupadd -g wireshark
# usermod -a -G wireshark <自己的用戶名>
# chgrp wireshark /usr/bin/dumpcap
# chmod 4750 /usr/bin/dumpcap

3.賦予權限。
#setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap 完成。
可以使用 getcap /usr/bin/dumpcap驗證,輸出應當是:/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

現在就可以從自己的普通用戶啓動Wireshark抓包了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章