使用 unconfined 工具是自動尋找應該要設定之網路伺服器精靈的方法。您也可以簡單地使用 YaST GUI 來檢視這項資訊報告 (請參閱 節 4.3.1.1, "應用程式稽核報告" (↑Novell AppArmor 2.0 管理指南) 以取得指示說明)。
這項 unconfined 工具會使用 netstat -nlp 指令,檢查電腦內部已開啟的連接埠、偵測與這些連接埠有關的程式,以及檢查已載入的 Novell AppArmor 設定檔集合。接著 Unconfined 會透過與每個程式相關的 Novell AppArmor 設定檔來提出這些程式的報告,如果是沒有設定限制的程式,就「不會提出」任何報告。
![]() | 注 |
|---|---|
如果是建立新的設定檔,您就必須為已設定成 unconfined 的程式重新啟動,以便偵測和提出新設定狀態報告。 | |
下面是 unconfined 輸出的範例:
2325 /sbin/portmap not confined 3702/usr/sbin/sshd
confined by '/usr/sbin/sshd
(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)'
![]() | 注 |
|---|---|
Unconfined 須要 root 權限且不可以從受到 AppArmor 設定檔限制的外圍程式執行。 | |
Unconfined 不會在網路介面之間進行區分,因此會報告所有未受限的程序,即使那些程序可能正在監聽內部 LAN 介面。
尋找使用者網路用戶端應用程式的方式,會依使用者優先設定而有不同。這個 unconfined 工具會偵測並提出由用戶端程式開啟之網路連接埠的報告,但是只限於在執行 unconfined 分析期間正在執行的用戶端應用程式。這在實際執行上會是個問題,因為網路服務通常是隨時都在執行,而網路用戶端程式通常只會在使用者需要時才執行。
在使用者網路用戶端應用程式上套用 Novell AppArmor 設定檔也會依據使用者優先設定而有差異,而且 Novell AppArmor 是專門為伺服器所設計,而非針對工作站。因此,我們會留下建立使用者網路用戶端應用程式設定檔的設定留下,作為使用者的練習工作。
為了積極有效地限制桌面應用程式,此 unconfined 指令會支援 paranoid 選項;此選項可報告所有執行中的程序,以及與每個程序相關或不相關的對應 AppArmor 設定檔。此 unconfined 使用者可以接著決定其中每個程式是否需要 AppArmor 設定檔。
如果您有新的設定檔或修改了設定檔,您可以把它們發送到 apparmor-general@forge.novell.com 郵件清單,並且附上執行應用程式行為的所有使用方法。AppArmor 團隊將會檢視並將此工作提交給 openSUSE。我們不能保證每個設定檔都會被納入,但是會竭盡所能把一般使用者所提供的安全性設定檔加入 openSUSE。
若要尋找由 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 管理指南)。
若要尋找網頁應用程式,您必須調查網頁伺服器組態。Apache 網頁應用程式具備相當高的可設定性,且視本機組態而定,網頁應用程式可儲存在許多的目錄中。依預設,SUSE Linux 會將網頁應用程式儲存在 /srv/www/cgi-bin/ 中。在最大可行的範圍中,每個網頁應用程式都會有一個 AppArmor 設定檔。
在找到這些程式後,您可以使用 AppArmor 為其建立設定檔。請參閱 節 3.3.1, "使用精靈新增設定檔" (↑Novell AppArmor 2.0 管理指南)。
因為 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 指令檔的個別設定檔時,這將會很有用。
![]() | 注 |
|---|---|
當網頁應用程式處理 Apache 模組( | |
使用 mod_perl 和 mod_php 建立網路應用程式的設定檔時,需要採取稍微不同的處理方式。在這種情況下,「程式」是指透過 Apache 程序中的模組直接解譯的程序檔,所以不會進行任何執行。相反的,Novell AppArmor 版本的 Apache 會呼叫 change_hat() 來命名與所要求 URI 名稱對應的子設定檔 (「hat」)。
![]() | 注 |
|---|---|
根據 Apache 已設定尋找模組程序檔位置,顯示要執行的程序檔名稱可能不是 URI。如果 Apache 已設定將程序檔放置到不同位置,當 Novell AppArmor 抱怨存取違規時,syslog 中便會出現不同的名稱。請參閱 章 4, 管理已建立設定檔的應用程式 (↑Novell AppArmor 2.0 管理指南)。 | |
關於mod_perl 和 mod_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 這個好方法。