我的 Linux 系統是否支持 32 位系統呼叫表?
上下文如下:
此外,支持 32 位系統呼叫表的系統(例如 i686 和 x86_64)需要以下規則。
我試圖弄清楚這意味著什麼,以及如何檢查我的系統是否需要這個規則。他們引用了
chown
andchown32
命令/(也許是系統呼叫),並繼續圍繞它討論系統架構。我只關心 Linux,但我不只關心 x86。在 的輸出中
lscpu
,您的欄位CPU op-mode
如下所示:CPU op-mode(s): 32-bit, 64-bit
對於
x86_64
具有雙架構支持的處理器。我認為只有在無法解釋對方指令的系統上才會顯示 32 或 64。我的困境是在沒有它的遺留系統上以程式方式(我最終將其編寫為 Python)解決
lscpu
這個問題。我已經檢查了這個問題,他們談論找到 64 位兼容性,但我正在努力在相反的案例中使用這些。所以總結一下為什麼到目前為止這是一個問題:
lscpu
不是機器
- 我跑去
sudo find / -iregex .*lscpu.*
確認
/proc/cpuinfo
通過以結尾的標誌解釋 64 位兼容性_lm
(據我所知,不是 32 位兼容性)
uname
不夠:它顯示了主要架構,雖然可以肯定地假設x86_64
也支持 32 位,但將已知架構映射到兼容性似乎並不是解決這個特定問題的最可靠或最有效的方法
hwinfo
不在機器上
getconf LONG_BIT
檢查 64 位兼容性
lshw
不在機器上有可能我忽略了一些東西,同樣有可能我作為程序員對這個主題還不夠了解。有人可以幫助我了解如何以程式方式(即獲取精確或可解析輸出的某種方法)檢查我的系統是否具有 32 位兼容性?
我認為您正在遵循RHEL 5 安全技術實施指南。
“我的 Linux 系統支持 32 位系統呼叫表嗎?” 是一個非常有趣的問題,正如 Gilles 所提到的,該問題還沒有在網站上得到最終解決。這也是一個很難回答的問題。
我將首先將其簡化為 STIG 上下文,即“我的 Linux 系統是否支持 i386 系統呼叫表?” (稍後我們將重新討論更一般的問題。)您無法從正在執行的核心獲得支持的系統呼叫的明確列表,但在這種情況下我們不需要:我們需要做的就是查找系統呼叫條目點。i386 入口點很方便地命名:本地 32 位呼叫和 64 到 32 位仿真層使用的外部可見函式是
do_fast_syscall_32
和do_int80_syscall_32
. 檢查這些的最好方法是在其中尋找它們/proc/kallsyms
(我希望沒有另一個 STIG 規則禁止這樣做……)。如果它們存在,那麼目前核心支持 i386 系統呼叫,您需要lchown32
審計規則。在此處閱讀有關此類主題的其他答案,您將了解到在正在執行的系統上測試系統呼叫支持的典型方法是嘗試呼叫系統呼叫。審核可能不合適的系統時,因為它應該觸發審核規則。它還可能在審計時導致誤報,因為它通常依賴於支持相關係統呼叫的核心和提供必要框架的系統。
使用 of
lscpu
和其他類似工具的結果也具有誤導性,因為它們報告的是已安裝CPU 的功能,而不是系統的功能。例如,lscpu
硬編碼等效項:lm
、、zarch
或sun4[uv]
在 CPU 標誌中告訴它支持 32 位和 64 位,這是從 CPU 的角度來看的,但lscpu
不能確定係統的其餘部分是否也支持它(也不應該)。重新審視更普遍的問題,“我的 Linux 系統是否支持 32 位系統呼叫表?”,確定答案將始終取決於體系結構。如果我們試圖查看系統呼叫來確定答案,我們需要考慮架構上的系統呼叫歷史;例如,
chown32
32 位架構不一定支持同級。同樣,尋找入口點也依賴於架構。因此,我認為您的問題沒有一般性的答案;答案必須至少考慮到目標架構。