為什么權限管理會用124三個數字?
相信很多人在Linux里面,遇到文件權限問題的時候,總是喜歡把文件的權限修改為777。覺得這樣可以解決一切問題。
那么大家有沒有想過一個問題,為什么數字7表示一個文件具有可讀、可寫、可運行的權限?對于當前用戶,如果想給文件權限設置為可寫可執行不可讀,那么應該用哪個數字?如果想讓文件可讀可寫不可執行,又要用哪個權限?系統強制要求SSH私鑰的權限為600,這里的600表示什么意思?如果想再加一個修改權限,那么它用哪個數字比較好?
我們知道,1,2,4這三個數字可以表示7以內的所有數字。例如:
- 1: 1
- 2: 2
- 3: 1 + 2
- 4: 4
- 5: 1 + 4
- 6: 2 + 4
- 7: 1 + 2 + 4
那么,如果要表示15以內的所有數字,還需要增加哪個數?你可能要想半天,才知道,需要增加一個8。
但是,如果我們從二進制的視角來看這些數字,就會發現實際上問題非常簡單:
- 1: 001
- 2: 010
- 4: 100
如果我們令可執行權限對應001,可寫權限對應010,可讀權限對應100。那么,可讀又可寫對應110,也就是十進制的6。可寫又可執行對應011也就是十進制的3。顯然,111為可讀可寫可執行,對應十進制的7。
如果我們要增加一個控制能否修改的參數,那么我們就可以用高4位來表示,可修改:1000。
由于 Linux 中,文件的權限分別需要為文件所有者、跟所有者在同一個用戶組的其他人以及不在同一組的其他人設置。如果不能讀,不能寫,不能執行,就是二進制的000對應十進制的0.
對于 SSH 私鑰這種極度敏感的文件,顯然只能文件所有者可讀可寫,于是它的權限為:110 000 000也就是600了。
如果要對所有登錄系統的人都可讀可寫可修改,顯然文件權限為111 111 111自然就是十進制的777。
網上有一些垃圾文章,會引誘你把文件權限設置為777。只要你看到這種文章,那么這個文章的作者一定是一個水貨。
請大家記住這樣一句話:對于一個合理設計的軟件、程序或者項目,如果某個地方需要你把權限設置為777才能使用,那么一定是你之前有地方搞錯了!一定是你出錯了。任何讓你給文件設置權限為777的人,不是蠢,就是壞。
最后給大家出一道思考題,使用二進制位來表示權限有什么好處?
本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。