為什么權(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)強制要求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。
但是,如果我們從二進制的視角來看這些數(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?,也就是十進制的6???蓪懹挚蓤?zhí)行對應(yīng)011?也就是十進制的3?。顯然,111?為可讀可寫可執(zhí)行,對應(yīng)十進制的7。
如果我們要增加一個控制能否修改的參數(shù),那么我們就可以用高4位來表示,可修改:1000。
由于 Linux 中,文件的權(quán)限分別需要為文件所有者、跟所有者在同一個用戶組的其他人?以及不在同一組的其他人?設(shè)置。如果不能讀,不能寫,不能執(zhí)行,就是二進制的000對應(yīng)十進制的0.
對于 SSH 私鑰這種極度敏感的文件,顯然只能文件所有者可讀可寫,于是它的權(quán)限為:110 000 000?也就是600了。
如果要對所有登錄系統(tǒng)的人都可讀可寫可修改,顯然文件權(quán)限為111 111 111?自然就是十進制的777。
網(wǎng)上有一些垃圾文章,會引誘你把文件權(quán)限設(shè)置為777。只要你看到這種文章,那么這個文章的作者一定是一個水貨。
請大家記住這樣一句話:如果某個地方需要你把權(quán)限設(shè)置為777才能使用,那么一定是你之前某個地方操作有問題!一定是你出錯了。任何讓你給文件設(shè)置權(quán)限為777的人,不是蠢,就是壞。
最后給大家出一道思考題,使用二進制位來表示權(quán)限有什么好處?