apt-cache search
package 搜尋套件
apt-cache show
package 獲取套件的相關信息,如說明、大小、版本等
apt-cache depends
package 相依性:可以用這個指令來看到某個rpm的所有相依性檔案
apt-cache rdepends
package 是查看該套件被哪些套件依賴
sudo apt-get install
package 安裝套件
sudo apt-get
install package -- reinstall 重新安裝套件
sudo apt-get -f
install 修復安裝"-f
= --fix-missing"
sudo apt-get remove
package 刪除套件,如有相依性套件時會一併移除
sudo apt-get remove
package -- purge 刪除套件,套件括刪除配置文件等
sudo apt-get update
取得在/etc/apt/sources.list 內的遠端伺服器的套件檔案清單
sudo apt-get upgrade 更新已安裝的套件,--fix-missing(如果有些套件無法取得)
sudo apt-get
dist-upgrade 升級系統
sudo apt-get
build-dep package 安裝相關的編譯環境
apt-get source
package 下載該套件的源代碼
sudo apt-get clean 當使用 apt-get install 指令安裝套件,下載下來的rpm會放置於
/var/cache/apt/archives,使用本指令可以將之清除
sudo apt-get check 檢查套件
基礎知識 SEAndroid在架構和機制上與SELinux完全一样,考慮到移動設備的特點,所以移植到SEAndroid的只是SELinux的一個子集。SEAndroid的安全檢查覆蓋了所有重要的方面
SEAndroid在架構和機制上與SELinux完全一样,考慮到移動設備的特點,所以移植到SEAndroid的只是SELinux的一個子集。SEAndroid的安全檢查覆蓋了所有重要的方面包括了域轉換、類型轉換、進程相關操作、內核相關操作、文件目錄相關操作、文件系統相關操作、對設備相關操作、對app相關操作、對網络相關操作、對IPC相關操作。
Policy
policy是整個SEAndroid安全機制的核心之一,除了有好的安全架構外還必須有好的安全策略以確保讓訪問主體只擁有最小權限,使程序既能順利執行基本功能又能防止被惡意使用。
在SEAndroid中主要采用了兩種強制訪問方法:
TE
MLS
這兩種方法都在policy中得以實現,以下內容會先對policy規則的執行對象安全上下文有一個詳細的介紹,然後再分別對SEAndroid中的TE機制和MLS機制做詳細介紹。
標記安全上下文
SEAndroid中的安全上下文
SEAndroid的安全上下文與SELinux基本一致(除了MLS檢測在SEAndroid中被強制執行),共有4個部分組成分別为user、role、type、sensitivity,以u:object_r:system_data_file:s0为例:
user:安全上下文的第一列为user,在SEAndroid中的user只有一個就是u。
role:第二列表示role,在SEAndroid中的role有兩個,分別为r和object_r。
type:第三列为type,SEAndroid中共定義了139種不同的type。
security level:第四列是專为MLS訪問機制所添加的安全上下文的擴展部分,格式为sensitivity[:category list][- sensitivity[:category list]],例如s0 - s15:c0.c1023,其中s0之後的內容可以不需要,冒號後面的內容是category,sensitivity和category組合一起聲明了當前的安全級別(security level),“-”號左右分別標識了安全級別的最低和最高,這一列的参數將在MLS約束檢查時用到,“15”、“1023”表示了sensitivity和category的最大值,這一参數可在Android.mk中定義。
安全上下文中最重要的部分就是第三列的type了,對於進程type被稱为domain,type是整個SEAndroid中最重要的一個参量,所有的policy都圍繞這一参量展開,所以为系統中每個文件標記上合适的type就顯得極为重要了。在SEAndroid中關於安全上下文配置的核心文件主要是file_contexts文件、seapp_contexts文件和ocontexts文件。
安全上下文標記的四種方式
基於策略語句標記
在SEAndroid的策略語言type_transition規則可以指定新創建的文件或目錄的標簽(安全上下文),通常情況下新創建文件的標簽和其父目錄的標簽一致,但是可以使用type_transition規則为其指定特定的標簽,有關transition的內容將在之後更詳細地說明。
默認標記
默認的標記行为在有關的策略標記規則不存在時使用,以及那些根本就沒有關聯策略標記規則的客體類別使用,大部分客體類別的默認標記都繼承了創建它的進程/或包括客體的容器的安全上下文。
程序請求標記
對於某些客體類別,SELinux提供了許多API允許程序明確地請求標記,這對於新創建的和已經存在的客體實例都一样。對於那些存儲在支持標記的文件系統上的與文件有關的客體,SEAndroid通過調用相應API既能在創建文件時設置安全上下文,也能對與文件有關的客體進行重新標記,只需要适當的relabelfrom 和relabelto許可就可以明確地改變一個客體的標記,這些許可由policy進行嚴密控制。
初始SID標記
安全上下文在用戶態通過字符串來描述,而在內核中使用context數據結構來表示它。给每個context數據結構都分配一個u32 sid,該sid保存在描述內核數據結構的安全上下文中。內核驅動使用sidtab哈希表來描述所有已經分配了sid的context數據結構,通過查詢該哈希表即可得到一個安全上下文所對應的sid。
幾乎所有sid的分配和注冊都是在運行時完成的,但是在refpolicy中定義了27個“Initial SID”,用於在內核驅動初始化時、由init進程通過selinuxfs接口加載policy之前,描述相應內核設施的初始安全屬性。
初始SID提供了一種特殊的默認標記行为,初始SID适用於兩種環境:在系統初始化策略還沒有載入前對一部分內核相關的客體進行標記,以及當客體的安全上下文無效或安全上下文丟失時使用。初始sid的內容被定義在了initial_sids文件中,在ocontexts文件中同時聲明了初始sid相應的安全上下文。
为文件系統和文件系統中的文件標記安全上下文
在SEAndroid中存在兩種文件系統,一種是常見的文件系統包括傳統的、本地文件系統都是用來在磁盤上或可移動介質上存儲數據(如ext3和XFS),和为了兼容其它操作系統的非本地文件系統(如iso9660和vfat),另一種是存在於內存中被稱为偽文件系統,它是用於內核和用戶空間之間的通訊(如proc和sysfs),通過selinux庫中提供的API函數完成。
文件系統的初始安全上下文的標記是在文件系統掛載時完成,另外普通文件系統上的文件在文件創建時就標記好了安全上下文並和文件一起存儲在磁盤上,而偽文件系統只在運行時才會为其中的文件標記安全上下文。
为文件系統標記安全上下文是對該文件系統的所有inode節點進行安全上下文的標記,這些標記是最原始的標記,之後如有新的文件被創建並賦予了相應的安全上下文標記則將會執行覆蓋操作保留最新的安全上下文。
對於文件系統的標記SEAndroid依據各文件系統的不同屬性擁有不同的機制:
基於支持擴展屬性的文件系統標記(即允許保存安全上下文這一擴展屬性的文件系統)(fs_use_xattr)
這一類文件系統包括yaffs2、jffs2、ext2、ext3、ext4、xfs、btrfs,它們的一個共性是都支持在磁盤上永久保存安全上下文這一擴展屬性信息。它們都用同一個安全上下文u:object_r:labeledfs:s0被統一標記,這些都在ocontexts文件中被聲明,使用fs_use_xattr語法實現。
另外對於這些有唯一且永久的節點號的傳統文件系統來說,SEAndroid會用一個永久的標記映射來决定文件系統內的節點的安全上下文和文件系統本身的安全上下文,這個永久的標記映射是由一個或多個配置文件組成,在SEAndroid中就是file_contexts文件和seapp_contexts文件,這兩個文件會和policy二進制文件一起構成整個SEAndroid的安全策略體系。
file_contexts文件對相應目錄的使用正則表達式進行匹配,被匹配到的目錄或文件都將被標記上相應的安全上下文,這個過程發生在文件系統標記完成之後執行。
基於任務的文件系統標記(fs_use_task)
使用基於任務的標記時,在SEAndroid中使用 fs_use_task 規則聲明新的與文件有關的客體繼承創建它們的進程的安全上下文。使用基於任務的標記的文件系統不支持程序請求的標記,這種類型的標記行为多用於對於不真實存儲用戶數據但支持某種類型的內核資源的偽文件系統上。在SEAndroid中sockfs,pipefs都是基於這一方式進行安全上下文的標記,具體被標記的安全上下文內容都在ocontexts文件中有詳細聲明。
基於轉換的文件系統標記(fs_use_trans) 基於轉換的文件系統標記與基於任務的文件系統標記非常類似,都使用的是偽文件系統,不同的是基於轉換的安全上下文標記是基於類型轉換規則(type_transition)實現的。在這样的文件系統上創建的文件都需要有一套相關的type_transition規則來完成。如果沒有找到相應的type_transition規則,文件就會使用文件系統的初始安全上下文,文件系統的初始安全上下文被定義在了ocontexts文件中, 在SEAndroid中有devpfs、tmpfs、devtmpfs、shm、mqueue這些偽文件系統使用這一機制進行安全上下文標記。
一般方式標記安全上下文(genfscon)
genfscon語句用於運行時標記偽文件系統和不支持擴展屬性的傳統文件系統。在SEAndroid中文件系統rootfs、proc、selinuxfs、cgroup、sysfs、inotifyfs、vfat、debugfs、fuse,都是采用這一方式進行安全上下文的標記,在ocontexts文件中定義了這些文件系統相應的安全上下文內容。
TE(Type Enforcement)
TE強制訪問方式是SEAndroid中的最主要的安全手段,所有關於TE的強制訪問規則都被定義在了後綴为te的文件中,在te文件中基本能總結为完成如下操作:
對type類型的定義和將type歸到相應的attribute中
SEAndroid在te文件中定義了安全策略中最基本的参量type,同時將具有共性的type歸在一起構成一個稱为attribute的集合,policy的規則執行也能以attribute作为執行對象。
SEAndroid为所有type共定義了17個attribute:
dev_type:
這一attribute包含了所有關於設備的type。
domain:
這一attribute包含了如下所列的所有關於進程的type,通常策略中的訪問主體也就是進程所在的domain都包含在了這一attribute中。
adbd
trusted_app
browser_app
untrusted_app
bluetoothd
dbusd
debuggerd
drmserver
gpsd
init
installd
kernel
keystore
mediaserver
netd
nfc
qemud
radio
rild
servicemanage
shell
surfaceflinger
su
system_app
system
ueventd
vold
wpa
zygote
fs_type:
這一attribute包含了所有與文件系統相關的type。如下所列,大多是虛擬文件系統。
device
labeledfs
pipefs
sockfs
rootfs
proc
selinuxfs
cgroup
sysfs
sysfs_writable
inotify
devpts
tmpfs
shm
mqueue
sdcard
debugfs
file_type:
這一attribute包含了所有存在於非偽文件系統的相關文件的type,數量過多不再列舉。
exec_type:
這一attribute包含了所有關於domian接入點的type,多被用在domain transition中,如下所列。
bluetoothd_exec
dbusd_exec
debuggerd_exec
drmserver_exec
gpsd_exec
installd_exec
keystore_exec
mediaserver_exec
netd_exec
qemud_exec
rild_exec
servicemanager_exec
surfaceflinger_exec
vold_exec
wpa_exec
zygote_exec
data_file_type:
這一attribute包含了所有在/data目錄下的文件type,如下所列。
system_data_file
anr_data_file
tombstone_data_file
apk_data_file
dalvikcache_data_file
shell_data_file
gps_data_file
bluetoothd_data_file
bluetooth_data_file
keystore_data_file
vpn_data_file
systemkeys_data_file
wifi_data_file
radio_data_file
nfc_data_file
app_data_file
sysfs_type:
這一attribute包含了在sysfs文件系統下的所有文件的type,在SEAndroid中只有sysfs_writable包含在這個attribute中。
node_type:
這一attribute包含了所有與nodes/hosts有關的type,在SEAndroid中只有node包含在這個attribute中。
netif_type:
這一attribute包含了所有與網络接口相關的type,在SEAndroid中只有netif包含在這個attribute中。
port_type:
這一attribute包含了所有與網络端口相關的type,在SEAndroid中只有port包含在這個attribute中。
mlstrustedsubject:
這一attribute包含了所有能越過MLS檢查的主體domain。
mlstrustedobject:
這一attribute包含了所有能越過MLS檢查的客體type。
unconfineddomain:
這一attribute包含了所有擁有無限權限的type。
appdomain:
這一attribute包含了所有與app相關的type,如下所列。
trusted_app
browser_app
untrusted_app
nfc
radio
shell
system_app
netdomain:
這一attribute包含了所有與需要訪問網络的app相關的type,如下所列。
trusted_app
browser_app
gpsd
mediaserver
radio
rild
system
bluetoothdomain:
這一attribute包含了所有與需要訪問bluetooth的app相關的type,如下所列。
trusted_app
radio
system
binderservicedomain:
這一attribute包含了所有與binder服務相關的type,如下所列。
mediaserver
surfaceflinger
system
通過allow語句制定主體客體強制訪問規則(白名單規則,不再規則中的都默認为非法操作)
通過type_transition語句制定tpye類型轉換規則
通過dontaudit語句聲明對一些被安全策略拒絕的訪問不再進行審核。
審核是對於發生了訪問違規或出現了被系統安全規則拒絕的行为進行日志記錄的過程,審核可以幫助系統管理員發現bug和可能的入侵嘗試。
默認情況下,SEAndroid會記錄被拒絕的訪問檢查,但策略語言dontaudit允許我們取消這些默認的預料之中的拒絕審核消息。
SEAndroid为系統定義了33個te策略文件,這33個策略文件是:
adbd.te、file.te、su.te、app.te、gpsd.te、netd.te、system.te、bluetoothd.te、init.te、net.te、ueventd.te、bluetooth.te、installd.te、nfc.te、unconfined.te、cts.te、kernel.te、qemud.te、vold.te、dbusd.te、keystore.te、radio.te、wpa_supplicant.te、debuggerd.te、mediaserver.te、rild.te、zygote.te、device.te、servicemanager.te、domain.te、shell.te、drmserver.te、surfaceflinger.te。
對上述33個文件根據其策略規則針對的對象可分为三類:
針對attribute的策略制定:
attribute是多個具有共性的type的集合,以下六個文件主要是直接針對attribute制定的策略,這種針對attribute制定的策略也就是同時對多個type制定策略一样。
unconfined.te
主要是为unconfineddomain屬性制定策略,這些策略基本就是對各種訪問客體擁有所有的權限。
domain.te
主要是为domain屬性制定策略,为所有歸在其中的訪問主體制定一些公共的策略。
CTS.te
主要是为appdomain制定策略,這些策略一般是在對app進行CTS測試時用到。
bluetooth.te
主要是为bluetoothdomain制定策略。
net.te
主要是为netdomain制定策略,這些策略主要是關於對sockets、ports的訪問以及與netd的通信。
file.te
這個文件主要定義了各文件系統的type,各文件的type,socket的type,以及制定了在不同文件系統中創建文件的規則。
針對daemon domain的策略制定:
adbd.te、gpsd.te、netd.te、bluetoothd.te、zygote.te、ueventd.te、installd.te、vold.te、dbusd.te、keystore.te、debuggerd.te、mediaserver.te、rild.te、drmserver.te、surfaceflinger.te、qemud.te、servicemanager.te、su.te、shell.te、wpa_supplicant.te
這些文件都是为系統中的daemon進程進行策略的制定,它們都有着相應的daemon domain。
針對系統其他模塊的策略制定:
最後的7個文件分別對系統的其他模塊進行策略制定。
app.te
在這一文件裏將安裝在系統上的第三方app分類为受信任的app和不受信任的app,分別用不同的type表示,
再分別为這兩種app在訪問網络,bluetooth,sdcard,數據,緩存,binder等等名感位置時設置相應權限。
system.te
這一文件主要針對的是系統app和system server進程。對系統app訪問binder、system data files、dalvikcatch、keystone等進行權限控制,
對system server訪問網络、bluetooth、netlink、app、binder、device、data files、socket、cache files等進行權限控制。
init.te
在這一文件中聲明了init擁有無限權限。
nfc.te
在這一文件中制定了nfc domain對nfc設備和相關數據文件的訪問權限。
kernel.te
在這一文件中聲明了kernel擁有無限權限。
radio.te
在這一文件中制定了radio domain對init、rild和相關數據文件的訪問權限。
device.te
在這一文件中定義了所有跟設備相關的type,並將這些type都歸到了dev_type屬性中。
接下來對SEAndroid中制定的各種繁多的策略做一個簡單分類:
轉換(transition)
domain transition
某個程序被執行時,其相應的進程會處在相應的domain中,但當程序根據需要又執行了另一個程序時,進程就需要根據type transition規則進行domain transition以獲得必要的權限從而使新進程能順利訪問到相關文件。另一個transition的原因是原有的domain權限過大,为了不讓新启動的進程也繼承過大的權限,因此需要domain transition。 在SEAndroid中幾乎全部daemon進程都需要從init進程中启動,這就需要從init domian轉換到daemon domain這一操作。
需要從init domain轉換到daemon domain的進程有bluetoothd、dbusd、debuggerd、drmserver、gpsd、installd、keystore、mediaserver、netd、qemud、rild、servicemanager、surfaceflinger、vold、wpa_supplicant、zygote。
除了從init domain轉換到其他daemon domain外,還有從adbd domain轉換到shell domain,從shell domain轉換到su domain,以及從zygote domain轉換到system和appdomain,這主要是因为Android中的大部分進程都是由zygote創建。
type transition
type_transition 規則被用在Domain Transition中 或者確定新創建對象的標簽,以重載其默認的、從父目錄(containing directory)所繼承的標簽。通常情況下新創建文件的標簽和其父目錄的標簽一致,但是可以使用type_transition規則为其指定特定的標簽。
例如在SEAndroid中gpsd domain在以gps_data_file为type的目錄下創建socket文件時,這些文件的type將會依照在策略中設定的type_transition規則而轉換为gps_sokcket。
system domain在以wifi_data_file为type的目錄下創建socket文件時,文件的type將會依照type_transition規則轉變为system_wpa_socket。
文件和目錄
在許多主體訪問客體的情況中都需要對相關文件進行操作,SEAndroid對於牽涉到blk_file,chr_file,fd,fifo_file,lnk_file,sock_file和一般的file都進行了相關的策略制定。
還制定了一些domain指定type的目錄、一般文件和鏈接文件只有讀的權限的策略,例如dbusd domain對system type和bluetoothd type的目錄和文件只有讀的權限,domain attribute對proc、sysfs、inotify、cgroup這些虛擬文件系統中的文件和目錄也只有讀的權限,另外還有mediaserver domain對sdcard type的目錄和文件只有讀的權限,shell domain對apk_data_file的目錄和文件只有讀的權限、system domain對mediaserver和appdomain的目錄和文件只有讀的權限。
也制定了主體domain對不同文件系統的相關操作權限,以及當某個domain需要創建tmpfs、shmem、ashmem文件時,根據主體domain定義一個獨特的type並對新創建的文件進行標記的策略。在SEAndroid裏這條策略被用在了init、system、ueventd中。
無限權限
在SEAndroid中共定義了三個擁有巨大權限的attribute分別是mlstrustedsubject、mlstrustedobject、unconfineddomain,被分類到mlstrustedsubject的type在充當主體domain是可以越過MLS檢查,被分類到mlstrustedobject的type在充當客體時可以越過MLS檢查,被分到unconfineddomain的type則擁有所有權限可對客體進行任意操作。
在SEAndroid中被分在mlstrustedsubject attribute中的type有adbd、debuggerd、drmserver、init、installd、kernel、mediaserver、netd、surfaceflinger、su、system、vold、zygote。
被分在mlstrustedobject attribute中的type有alarm_device、ashmem_device、binder_device、log_device、mtp_device、nv_device、powervr_device、ptmx_device、null_device、cgroup、sysfs、sysfs_writable、sysfs_writable、sysfs_writable、debugfs、apk_data_file、cache_file、dnsproxyd_socket。
被分在unconfineddomain的type有init、kernel、su。
設備
關於設備這裏重點提一下bluetooth,在SEAndroid中只對三個type提供bluetooth訪問權限分別是trusted_app、radio、system。
App
在SEAndroid中指定了trusted_app、browser_app、untrusted_app、nfc、radio、shell、system_app這些type對系統中的所有app擁有适當的訪問權限,並能對ashmem objects使用獨特的type進行標記。
網络
SEAndroid對trusted_app、browser_app、gpsd、mediaserver、mediaserver、rild、system這些type授予了訪問網络的權限。
在SEAndroid中系統對各類socket都制定了相應的策略,這些socket包括appletalk_socket(轉为apple公司產品通信而設)、dccp_socket、netlink_audit_socket、netlink_dnrt_socket、netlink_firewall_socket、netlink_ip6fw_socket、netlink_kobject_uevent_socket、netlink_nflog_socket、、etlink_route_socket、netlink_selinux_socket、netlink_socket、netlink_tcpdiag_socket、netlink_xfrm_socket、packet_socket、rawip_socket、tcp_socket、tun_socket、udp_socket、unix_dgram_socket、unix_stream_socket。
SEAndroid還指定了如下策略允許一個本地socket從指定的客戶端domain通過指定的socket連接到指定的服務端domain,第一列是客戶端domain,第二列是指定的socket,第三列是服務端domain。
adbd, vold, vold
adbd, property, init
untrusted_app, dnsproxyd, netd
bluetoothd, dbus, dbusd
netdomain, dnsproxyd, netd
radio, property, init
radio, rild, rild
rild, property, init
rild, qemud, qemud
surfaceflinger, property, init
system_app, keystore, keystore
system, property, init
system, qemud, qemud
system, installd, installd
system, netd, netd
system, vold, vold
system, zygote, zygote
system, keystore, keystore
system, dbus, dbusd
system, gps, gpsd
system, bluetooth, bluetoothd
vold, property, init
另外SEAndroid只允許system和wpa這兩個domain可以讓一個本地socket以system和wpa任何一方为客戶端另一方为服務端並通過某個socket進行數據包的發送。 運行一個本地socket從客戶端domain通過發送數據包到服務端domain。
IPC
SEAndroid只允許adbd、appdomain、drmserver、mediaserver、surfaceflinger、system這些type或attribute通過servicemanager使用binder IPC。
SEAndroid只允許指定的客戶端domain對指定的服務端domain使用binder IPC,如以下所列,第一列是指定的客戶端domain,第二列是指定的服務端domain。
adbd, surfaceflinger
trusted_app, appdomain
appdomain, binderservicedomain
appdomain, trusted_app
drmserver, system
mediaserver, binderservicedomain
mediaserver, appdomain
surfaceflinger, system
system_app, appdomain
system, binderservicedomain
system, appdomain
SEAndroid只允許指定的客戶端domain傳送由服務端創建的binder references,如以下所列,第一列是指定的客戶端domain,第二列是指定的服務端domain。
trusted_app, appdomain
appdomain, binderservicedomain
appdomain, trusted_app
system_app, appdomain
system, binderservicedomain
system, appdomain
MLS(Multi-Level Security)
什麼是MLS,为何要引入MLS
MLS稱为多級別安全是另一種強制訪問控制方法,特別适合於政府機密數據的訪問控制,早期對計算機安全的研究大多數都是以在操作系統內實現MLS訪問控制为驅動的。所有MLS的使用都是建立在TE安全的基礎之上。在SELinux中MLS是一個可選訪問控制方式,而在SEAndroid中則是被作为安全訪問方式的其中之一。
MLS中的相關参量
在SEAndroid中mls的相關参量就是安全上下文的第四列稱为security level,在安全上下文第四列中可以有一個或者兩個security level,第一個表示低安全級別,第二個表示高安全級別。
每個security level由兩個字段組成:
sensitivity
sensitivity有着嚴格的分級,它反應了一個有序的數據靈敏度模型,如政府分類控制中的絕密,機密和無密級。
category
category是無序的,它反應的是數據劃分的需要。
基本思路是對於要訪問的數據你同時需要足夠的sensivity和正確的category。
在SEAndroid中sensitivity只有一個級別即s0,category共有1024個,因此最低安全級別就是s0,最高安全級別就是s0:c0.c1023。
security level之間的三種運算關系:
dom
需要主體sensitiviety大於客體,同時客體的category是主體的一個子集。
domby
與dom完全相反
eq
主體客體的sensitivity和category分別相同。
高的security level對低的security level擁有dom,低的security level對高的security level關系为domby(與dom相反),同級的security關系是eq,這三種關系運算符是SEAndroid中特有的。
MLS對進程的約束
限制進程的domain轉換
對於從一個domain轉換到另一個domain的操作要求兩個domain的高級別security level和低級別security level同時相等才能許可轉換,除非是待轉換的domain屬於對mls無限權限的type。
限制進程讀操作
只有當主體domain的低級別security level對客體domain的低級別security level具有dom關系時,或者主體domian是屬於對mls無限權限的type,主體才能對客體具有讀操作的許可。
這一讀操作具體是指:
能獲取進程優先權
能獲取另一進程的session id
能獲取到進程的group id
能獲取到系統的capabilities
能獲取文件的屬性信息
能追蹤父程序或子程序的執行
允許通過clone或fork進程實現狀態信息共享
總結一下就是MLS限制了低級別進程向高級別進程進行讀的操作,即不能上讀。
限制進程寫操作
只有當主體domain的低級別security level對客體domain的低級別security level具有domby關系時,或者主體domain是屬於對mls無限權限的type,主體才能對客體具有寫操作的許可。
寫操作具體是指:
能發送SIGKILL信號
能發送SIGSTOP信號
能發送一個非SIGKILL、SIGSTOP、SIGCHLD的信號
能設置進程優先級
能設置進程group id
能設置系統的capabilities
能改變進程hard limits
能追蹤父程序或子程序的執行
允許通過clone或fork進程實現狀態信息共享
總結一下就是MLS限制了高級別進程對低級別進程寫的操作,即不能下寫。
MLS對socket的約束
進程對local socket的訪問限制
只有當主體進程的domain的高級別security level和低級別security level分別與客體local socket的type的security level相同時即滿足eq關系時,或者主體客體任何一個具有對mls無限權限的type時,主體進程才對local socket擁有了某些訪問權限。
這些訪問權限是指:
讀操作
寫操作
新建操作
能獲取對象屬性信息
能設置對象的屬性信息
能對對象重新標記安全上下文
能進行bind操作
能發起一個連接請求
能監聽連接事件
能接受一個連接請求
能獲取到socket options
能關閉socket連接
對socket的datagram發送的限制
只有當發送方的低級別security level與接受方的低級別security level滿足domby關系時,或者主體客體任何一個具有對mls無限權限的type時,發送方才對接受方擁有了發送權限。
對客戶端socket和服務端socket建立連接的限制
只有當客戶端的低級別security level與服務端的低級別security level滿足eq關系時,或者主體客體任何一個具有對mls無限權限的type時,客戶端就能獲得連接服務端的權限。
MLS對文件和目錄的約束
對文件的創建和重新標記的限制
對文件操作時,要求客體的文件安全上下文只有一個security level即沒有低級別和高級別security level或者說是這兩個級別相同。 當主體domain的低級別security level對客體文件的低級別security level相同時,或者主體具有對mls有無限權限的type時,主體對客體文件擁有創建、和重新標記安全上下文的權限。
對目錄的讀操作的限制
只有當主體的低級別security level對客體目錄的低級別security level滿足dom關系時,或者主體客體任何一個具有對mls無限權限的type時,主體能對目錄擁有如下權限:
能讀目錄
能獲得目錄的屬性信息
能獲得某個正在被訪問文件的所有上層目錄訪問權(search權限)
總結一下就是對目錄的訪問不能上讀。
對文件的讀操作的限制
只有當主體的低級別security level對客體文件的低級別security level滿足dom關系時,或者主體客體任何一個具有對mls無限權限的type時,主體能對文件擁有如下權限:
能讀文件
能獲得文件的屬性信息
能執行該文件
總結一下就是對文件的訪問不能上讀。
對目錄的寫操作的限制
只有當主體的低級別security level對客體目錄的低級別security level滿足domby關系時,或者主體客體任何一個具有對mls無限權限的type時,主體能對目錄擁有如下權限:
能對目錄寫操作
能設置屬性信息
能重命名目錄
能添加一個文件到目錄中
能從目錄中刪除一個文件
能改變父目錄
能刪除一個空目錄
總結一下就是對目錄訪問不能下寫。
對文件的寫操作的限制
只有當主體的低級別security level對客體文件的低級別security level滿足domby關系時,或者主體客體任何一個具有對mls無限權限的type時,主體能對文件擁有如下權限:
能對文件進行寫操作
能設置文件屬性信息
能對文件內容作append操作
能對文件創建鏈接
能刪除一個文件的鏈接
能對文件重命名
總結一下就是對文件訪問不能下寫。
MLS對IPC的約束
對IPC創建和銷毀的限制
要求客體的IPC對象只有一個security level。
只有當主體的低級別security level與客體的低級別security level滿足eq關系時,或者主體具有對mls無限權限的type時,主體能對客體IPC擁有創建和銷毀的權限。
對IPC讀操作的限制
只有當主體的低級別security level對客體IPC的低級別security level滿足dom關系時,或者主體具有對mls無限權限的type時,主體能對客體IPC擁有如下權限:
獲取文件屬性信息
能對IPC文件執行讀操作
能關聯一個key
能執行由IPC操作要求的讀操作
總結一下就是對IPC訪問不能上讀。
對IPC寫操作的限制
只有當主體的低級別security level對客體IPC的低級別security level滿足domby關系時,或者主體具有對mls無限權限的type時,主體能對客體IPC擁有如下權限:
能對文件執行write和append操作
能執行由IPC操作要求的write和append操作
總結一下就是對IPC訪問不能下寫。