2.2. 檢查已開啟連接埠來保護程式

使用 unconfined 工具是自動尋找應該要設定之網路伺服器精靈的方法。您也可以簡單地使用 YaST GUI 來檢視這項資訊報告 (請參閱 節 4.3.1.1, "應用程式稽核報告" (↑Novell AppArmor 2.0 管理指南) 以取得指示說明)。

這項 unconfined 工具會使用 netstat -nlp 指令,檢查電腦內部已開啟的連接埠、偵測與這些連接埠有關的程式,以及檢查已載入的 Novell AppArmor 設定檔集合。接著 Unconfined 會透過與每個程式相關的 Novell AppArmor 設定檔來提出這些程式的報告,如果是沒有設定限制的程式,就「不會提出」任何報告。

[Note]

如果是建立新的設定檔,您就必須為已設定成 unconfined 的程式重新啟動,以便偵測和提出新設定狀態報告。

下面是 unconfined 輸出的範例:

2325 /sbin/portmap not confined 
37021 /usr/sbin/sshd2 confined
   by '/usr/sbin/sshd3 (enforce)' 
4040 /usr/sbin/ntpd confined by '/usr/sbin/ntpd (enforce)' 
4373 /usr/lib/postfix/master confined by '/usr/lib/postfix/master (enforce)' 
4505 /usr/sbin/httpd2-prefork confined by '/usr/sbin/httpd2-prefork (enforce)'
5274 /sbin/dhcpcd not confined 
5592 /usr/bin/ssh not confined 
7146 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (complain)'
  
1

第一部分是號碼。此號碼是監聽程式的程序 ID 編號 (PID)。

2

第二部分是字串,表示監聽程式的絕對路徑。

3

最後一部分會指出設定檔限制程式,若有的話。

[Note]

Unconfined 須要 root 權限且不可以從受到 AppArmor 設定檔限制的外圍程式執行。

Unconfined 不會在網路介面之間進行區分,因此會報告所有未受限的程序,即使那些程序可能正在監聽內部 LAN 介面。

尋找使用者網路用戶端應用程式的方式,會依使用者優先設定而有不同。這個 unconfined 工具會偵測並提出由用戶端程式開啟之網路連接埠的報告,但是只限於在執行 unconfined 分析期間正在執行的用戶端應用程式。這在實際執行上會是個問題,因為網路服務通常是隨時都在執行,而網路用戶端程式通常只會在使用者需要時才執行。

在使用者網路用戶端應用程式上套用 Novell AppArmor 設定檔也會依據使用者優先設定而有差異,而且 Novell AppArmor 是專門為伺服器所設計,而非針對工作站。因此,我們會留下建立使用者網路用戶端應用程式設定檔的設定留下,作為使用者的練習工作。

為了積極有效地限制桌面應用程式,此 unconfined 指令會支援 paranoid 選項;此選項可報告所有執行中的程序,以及與每個程序相關或不相關的對應 AppArmor 設定檔。此 unconfined 使用者可以接著決定其中每個程式是否需要 AppArmor 設定檔。

如果您有新的設定檔或修改了設定檔,您可以把它們發送到 apparmor-general@forge.novell.com 郵件清單,並且附上執行應用程式行為的所有使用方法。AppArmor 團隊將會檢視並將此工作提交給 openSUSE。我們不能保證每個設定檔都會被納入,但是會竭盡所能把一般使用者所提供的安全性設定檔加入 openSUSE。

2.2.1. 以免疫的方式保護 Cron 工作

若要尋找由 Cron 所執行的程式,您必須檢查您的本地 Cron 組態。不幸的是由於 Cron 組態相當複雜,因此有相當多的檔案需要檢查。定期的 Cron 工作是從這些檔案來執行:

/etc/crontab 
/etc/cron.d/* 
/etc/cron.daily/* 
/etc/cron.hourly/*
/etc/cron.monthly/* 
/etc/cron.weekly/*

針對 root 的 Cron 工作,您可以使用 crontab -e 來編輯工作,並使用 crontab -l 來列出 root 的 Cron 工作。您必須以 root 身份來進行這些工作。

在找到這些程式後,您可以使用新增設定檔精靈為其建立設定檔。請參閱 節 3.3.1, "使用精靈新增設定檔" (↑Novell AppArmor 2.0 管理指南)

2.2.2. 以免疫方式保護網路應用程式

若要尋找網頁應用程式,您必須調查網頁伺服器組態。Apache 網頁應用程式具備相當高的可設定性,且視本機組態而定,網頁應用程式可儲存在許多的目錄中。依預設,SUSE Linux 會將網頁應用程式儲存在 /srv/www/cgi-bin/ 中。在最大可行的範圍中,每個網頁應用程式都會有一個 AppArmor 設定檔。

在找到這些程式後,您可以使用 AppArmor 新增設定檔精靈為其建立設定檔。請參閱 節 3.3.1, "使用精靈新增設定檔" (↑Novell AppArmor 2.0 管理指南)

2.2.2.1. 網頁應用程式中的 CGI 程式和 Subprocess 限制

因為 CGI 程式是由 Apache 網頁伺服器所執行,因此必須修改 Apache 本身的設定檔 usr.sbin.httpd2-prefork (上的 Apache2) 將執行權限新增至每個程式中。例如,新增 /srv/www/cgi-bin/my_hit_counter.pl rpx 行可授與 Apache 執行 Perl 程序檔 my_hit_counter.pl 的權限,且 my_hit_counter.pl 必須具備專屬的設定檔。如果 my_hit_counter.pl 並沒有與其相關的專屬設定檔,則規則將會表示 /srv/www/cgi-bin/my_hit_counter.pl rix 會讓 my_hit_counter.pl 繼承 usr.sbin.httpd2-prefork 設定檔。

有些使用者可能會發現為每個 Apache 可能呼叫的 CGI 程序檔指定執行權限很不方便。但是管理員卻可以輕鬆地授與 CGI 程序檔集合的可控制存取權限。例如,新增 /srv/www/cgi-bin/*.{pl,py,pyc} rix 行可讓 Apache 執行 /srv/www/cgi-bin/ 中所有以 .pl (Perl 程序檔) 和 .py.pyc (Python 程序檔) 結尾的檔案。如以上所述,規則的 ix 部份會讓 Python 指令檔繼承 Apache 設定檔,如果您不想寫入每個 Python 指令檔的個別設定檔時,這將會很有用。

[Note]

當網頁應用程式處理 Apache 模組(mod_perlmod_php) 時,如果您使用 subprocess 限制模組 (mod-apparmor) 功能,請在 YaST 或指令行中新增設定檔時,使用 ChangeHat 功能。若要利用 subprocess 限制,請參閱 節 5.1, "Apache ChangeHat" (↑Novell AppArmor 2.0 管理指南)

使用 mod_perlmod_php 建立網路應用程式的設定檔時,需要採取稍微不同的處理方式。在這種情況下,「程式」是指透過 Apache 程序中的模組直接解譯的程序檔,所以不會進行任何執行。相反的,Novell AppArmor 版本的 Apache 會呼叫 change_hat() 來命名與所要求 URI 名稱對應的子設定檔 (「hat」)。

[Note]

根據 Apache 已設定尋找模組程序檔位置,顯示要執行的程序檔名稱可能不是 URI。如果 Apache 已設定將程序檔放置到不同位置,當 Novell AppArmor 抱怨存取違規時,syslog 中便會出現不同的名稱。請參閱 章 4, 管理已建立設定檔的應用程式 (↑Novell AppArmor 2.0 管理指南)

關於mod_perlmod_php 程序檔,就是指 Perl 程序檔或所要求 PHP 頁面的名稱。例如,新增這個子設定檔就可以讓 localtime.php 頁面執行並存取本機系統時間:

/usr/sbin/httpd2-prefork^/cgi-bin 
localtime.php { 
/etc/localtime                        r, 
/srv/www/cgi-bin/localtime.php        r, 
/usr/lib/locale/**                    r, 
}

如果還沒有定義任何子設定檔,Novell AppArmor 版本的 Apache 就會套用 DEFAULT_URI hat。這個子設定檔基本上可以有效顯示 HTML 網頁。下面列出 Novell AppArmor 預設提供的 DEFAULT_URI hat:

/usr/sbin/suexec2 ixr, 
/var/log/apache2/** rwl,
/home/*/public_html/**             r, 
/srv/www/htdocs/**                 r, 
/srv/www/icons/*.{gif,jpg,png}     r, 
/usr/share/apache2/**              r,
    

如果您想讓 Apache 提供所有網頁的單一 Novell AppArmor 設定檔和 CGI 程序檔,您可以選擇編輯 DEFAULT_URI subprofile 這個好方法。

2.2.3. 以免疫方式保護網路代辦程式

若要尋找應該要建立設定檔的網路伺服器精靈,您應該要檢查機器上的已開啟連接埠、考慮要在這些連接埠上回應的程式,並且盡可能提供這些程式的設定檔。如果您為所有包含已開啟網路連接埠的程式提供設定檔,駭客在無法通過 Novell AppArmor 設定檔原則的情況下就無法取得機器上的檔案系統。

從機器外部使用例如 nmap 的掃描器,或是從機器內部使用 netstat,來手動掃描伺服器中的已開啟網路連接埠。接著檢查該機器,判斷哪些程式正在這些已尋獲開啟連接埠上進行回應。