為什么權限管理會用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的人,不是蠢,就是壞。
最后給大家出一道思考題,使用二進制位來表示權限有什么好處?