2011-12-13 60 views
0

這只是我對一個特定操作系統如何執行二進制文件的好奇心。 如果我在UNIX或Windows中將dir更改爲某個路徑,則只需輸入其文件名即可執行程序。在Linux中,我必須輸入./file_name(除非包含在PATH中)。知道這是一個愚蠢的問題,但是有什麼理由嗎?關於執行二進制文件的好奇心

回答

4

沒什麼神奇的 - 這只是因爲,默認情況下,Windows隱式地包含'。'在可執行搜索路徑中。 *尼克斯沒有。

後一種行爲顯然更安全,如果稍微不方便的話。

通過添加'。'可以在* nix下獲得類似於Windows的行爲(以安全性爲代價)。你的路徑

例如,您可以添加以下到你的.bash_profile:

export PATH=PATH:. 

當然,這不是正是一樣的Windows,因爲Windows(再次默認情況下)看起來CWD 第一個。您可以通過移動'。'來在* nix中執行相同的操作。到系統的PATH前面,但不要那樣做

這會給您帶來很大的安全風險。如果有人能夠刪除與系統實用程序同名的惡意程序(例如「ls」或「cp」),那麼該程序將運行而不是系統實用程序。你可以想象出提供「惡作劇」的可能性!

2

要擴展Gregj說的話,Windows和Linux中都有一個PATH變量,它告訴操作系統何時查找可執行文件,而不是明確地告訴它在哪裏。出於安全考慮,Linux不包括當前目錄(.);一個程序可能會在許多文件中隱藏一個帶有常用工具名稱的可執行文件(例如,ls),因此您可能會忽略它,然後它將運行而不是您所用的實用工具,可能會導致損壞,敏感數據等。爲方便起見以及由於缺乏對安全性的關注,Windows會搜索.,即使它並未顯式位於路徑中。

+0

很好,除了關於安全性的部分:在Linux中,即使'.'在您的路徑中,您也必須在執行'。/ ls'前執行。 –

+1

是的,它必須是可執行的,但爲什麼你必須使它可執行?如果它是這樣的攻擊,它爲什麼不能執行,可能來自像tar檔案。 – Kevin

相關問題