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