您好,登錄后才能下訂單哦!
這篇文章主要講解了“l(fā)inux的權(quán)限有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“l(fā)inux的權(quán)限有哪些”吧!
我們在使用 Linux 的過程中,或多或少都會遇到一些關(guān)于使用者和群組的問題,比如最常見的你想要在某個路徑下執(zhí)行某個指令,會經(jīng)常出現(xiàn)這個錯誤提示 。
permission denied
反正我大概率見到這個錯誤都是在使用 FTP 傳輸文件的時候,等了半天傳輸百分比還是零,我說網(wǎng)絡(luò)這么慢么?怎么都不傳輸呢?其實我不知道,這是由于權(quán)限問題所致。
我一般的修復(fù)方式是直接賦予 777 權(quán)限,或者直接使用 su 管理員登錄。。。。。。
大家可能不太知道我說的是什么,也有一些大佬可能覺得我這種方式太 low 了,不管怎樣,遇到這種問題就是說你得權(quán)限不夠,為什么呢?下面我們就需要來認(rèn)識一下 Linux 中的使用者和群組了。
使用者和群組
在 Linux 中,關(guān)于文件所有者分為三類,即文件所有者、群組和其他人所屬,這里分別解釋以下這三個概念
文件所有者
Linux 是一個多用戶多任務(wù)系統(tǒng),多用戶就意味著有些用戶創(chuàng)建的文件是否對其他用戶可見,這是一種可見性問題,同時也是一種隱私性問題,為了考慮到每個人的隱私權(quán),Linux 設(shè)計了文件所有者的角色。如果你有一些資料和文件的隱私性比較高,你就可以把文件設(shè)置成 "只有我自己可見" ,這就是文件所有者的作用。
群組
群組的這個概念用在團隊開發(fā)中,用處比較多的就是為項目設(shè)置權(quán)限,比如你就職于一個銀行的外包部門,你和其他外包部門共同為某個銀行服務(wù),所有的外包團體都使用一臺服務(wù)器,這就會涉及到群組權(quán)限的問題,你們外包部門開發(fā)的項目不想讓其他外包部門所看到,就會把該項目設(shè)置成群組可見。但是銀行是總負(fù)責(zé)人,所有銀行具有查看你們所有外包部門項目的權(quán)限,因此,你還需要設(shè)置銀行的權(quán)限。
其他人所屬
其他人和群組是相對的,其他人在群組之外,沒有權(quán)限查看群組內(nèi)文件的一種權(quán)限關(guān)系。
除了上面三個概念之外,還有一個權(quán)限級別最高的大佬,它就是 root,這個 root 權(quán)限是最高的。
Linux 文件權(quán)限
在聊完上面使用者和群組的概念之后,接下來我們就來談一下文件權(quán)限要如何設(shè)置的問題,這塊內(nèi)容是很重要的,因為這部分內(nèi)容是很好解決 permission denied 問題的關(guān)鍵。
權(quán)限屬性
首先登錄 Linux 系統(tǒng),使用 su - 可以切換成為 root 身份,然后執(zhí)行 ls -al 會看到下面這些
一共有七列內(nèi)容,這七列內(nèi)容如下圖所示。
學(xué)習(xí)的時候可以直接使用 root ,因為后續(xù)的 chgrp,chown 等指令都需要 root 來處理,但是工作中強烈建議不要使用 root 權(quán)限。
使用 exit 可以退出 root 身份。
上面這段指令中,ls 是 list 的意思,也就是列出,而選項 -al 則表示文件詳細權(quán)限和屬性。
權(quán)限,第一列表示的是權(quán)限,權(quán)限一共通過 10 個字符來表示,我們拿 home 權(quán)限為例,來列舉各個字符表示的含義
第一個字符表示的是文件類型,文件類型有很多種,一般 [d] 表示的是目錄,能用cd命令進入到這個目錄中??梢钥吹綀D中幾乎所有都是目錄。
如果是 [-] 則表示文件,如果是 [l] 則表示鏈接文件,如果是 [b] 則表示設(shè)備文件中的可隨機存取設(shè)備,如果是 [c] 則表示為設(shè)備文件中的一次性讀取設(shè)備(鍵盤、鼠標(biāo))。
接下來的九個字符分為三組,三個一組,分別表示所屬人、所屬群組、其他所有者權(quán)限,每組內(nèi)的權(quán)限都是三個 rwx 的組合,[r] 表示可讀,[w]表示可寫,[x] 表示可執(zhí)行,這里需要注意的是,如果沒有權(quán)限,就會變?yōu)?-號。
鏈接,這一列表示有多少文件名鏈接到這個節(jié)點(i-node)上,每個文件都會將它的權(quán)限和屬性記錄到文件系統(tǒng)的 i-node 上,不過,我們使用的目錄樹卻是使用文件名來記錄的,因此每個文件名都會關(guān)聯(lián)到一個 i-node ,所以這個屬性就是記錄有多少文件鏈接到了同一個 i-node 上。
什么是 i-node ?
i-node 的描述方式很像是我們之前聊過的 Socket,Socket 就是一個四元組,有時會加上協(xié)議類型變?yōu)槲逶M,如果你不太清楚我說的是什么,可以看下我的這篇文章 原來這才是 Socket!
我們知道,磁盤的最小存儲單位是扇區(qū),操作系統(tǒng)在讀取扇區(qū)時,不會一個扇區(qū)接著一個扇區(qū)這樣讀取,因為效率太低,而是以塊為單位進行讀取,塊是由多個扇區(qū)組成的。
文件中的數(shù)據(jù)都存儲在扇區(qū)中,但是我們并不知道哪一塊數(shù)據(jù)是我們需要的,為了存儲一些文件的元信息,比如文件的創(chuàng)建者,創(chuàng)建日期,文件的大小,開發(fā)人員提出了 i-node ,也就是索引節(jié)點。一般來說,i-node 具有如下內(nèi)容
具體關(guān)于 i-node 的內(nèi)容,我們后面還會再說。
然后第三列表示這個文件的所屬人,由圖可見,大部分文件的所屬人都是 root 用戶。
第四列表示這個文件的所屬群組,在 Linux 系統(tǒng)下,你登錄的賬號會添加到一個或者多個所有人群組中,這一欄就表示對應(yīng)的群組權(quán)限。
第五列表示文件大小,默認(rèn)單位為字節(jié)(Bytes)。
第六列為創(chuàng)建這個文件的日期和最近修改日期,從圖中可以看到,這個日期格式有可能不是我們想要的,如果要顯示完整的日期格式,可以使用 ls -l --full-time,包括年、月、日、時間。
如果想要讓系統(tǒng)默認(rèn)的語系變?yōu)橛⑽牡脑挘敲茨憧梢孕薷南到y(tǒng)配置文件 /etc/locale.conf,首先我們可以查看一下系統(tǒng)都支持哪些語言。
修改默認(rèn)語言,輸入
vi /etc/profile
在文檔的最后輸入
export LANG="en_US.UTF-8"
就可以切換成為英文,如果想使用中文,可以輸入
export LANG="zh_CN.GB18030"
然后使用 esc + :wq 保存,保存之后使用
source /etc/profile
即可完成設(shè)置。
第七列為文件名,有一類特殊的文件名,它表示著隱藏文件,如果文件名之前多一個 . ,那就表示隱藏文件。
權(quán)限的重要性
提供系統(tǒng)保護:非權(quán)限用戶不能操作具有某些權(quán)限的功能和數(shù)據(jù)。
適合團隊開發(fā)和數(shù)據(jù)共享:團隊所有組成員和個人所屬能夠共享項目。
如果沒有恰當(dāng)?shù)脑O(shè)置系統(tǒng)權(quán)限,可能會造成某些泄密事件或者其他不可忽視的后果,所以權(quán)限問題大家要引起重視,下面我們就來聊一聊如何設(shè)置系統(tǒng)權(quán)限。
改變系統(tǒng)權(quán)限和屬性
我們現(xiàn)在知道文件權(quán)限對于一個系統(tǒng)安全的重要性了,現(xiàn)在就要聊一聊如何修改文件權(quán)限了。常用的修改文件權(quán)限的指令有
chgrp :改變文件所屬群組
chown:改變文件所有者
chmod:改變文件權(quán)限
chgrp
chgrp 就是 change group 的縮寫,我覺得李納斯把縮寫用到了極致,這也許是我們現(xiàn)在對于縮寫這么流行的原因。chgrp 能夠改變文件群組,不過,要改變?nèi)航M的話,要被改變的群組名稱要在 /etc/group 文件內(nèi)存在才行,否則就會顯示錯誤。
chown
既然 chgrp 能夠改變文件群組,那么 chown 能夠改變文件所有者,同樣也需要注意的是,文件所有者必須是系統(tǒng)中存在的賬號,也就是在 /etc/passwd 這個文件中有記錄的使用者名稱才可改變。除此之外,chown 還可以直接修改群組名稱。
chmod
變更文件權(quán)限使用的是 chmod 這個指令,但是,權(quán)限的設(shè)置有兩種方式,可以分別使用數(shù)字或者符號進行權(quán)限變更。
使用數(shù)字改變文件權(quán)限
Linux 文件基本權(quán)限有 9 種,分別是 owner/group/others 三種身份加自己的 read/write/execute 權(quán)限,這九個權(quán)限三個為一組,我們可以使用數(shù)字表示各個權(quán)限。
一般 r 表示 4;w 表示 2;x 表示 1,每種身份各自的權(quán)限是需要累加的,比如 rwx 就表示 4 + 2 + 1 = 7。比如我們最常見的 chmod 777 它就表示賦予所有的權(quán)限,也就是說誰都能看/寫/執(zhí)行,所以這種文件也存在極大的安全問題。使用數(shù)字改變文件權(quán)限是我們最常用的一種方式。
使用符號改變文件權(quán)限
九種文件權(quán)限分別對應(yīng)著:(1) user (2) group (3) others,所以我們可以借由 u,g,o 來代表三種身份的權(quán)限。除此之外,a 代表 all 即全部的身份。
比如我們想要給 -rwxr-xr-x 設(shè)置權(quán)限,那么我們所使用的命令應(yīng)該是
chmod u=rwx,go=rx .filename
如果我們想要給所有人增加寫入權(quán)限,就可以這么操作
chmod a+w .filename
如果我們想給所有人去掉寫入權(quán)限,就可以這么寫入指令
chmod a-w .filename
我們上面列出了三種指令,分別是 =、+、- 號,= 號表示賦值指定權(quán)限,+ 號表示增加權(quán)限,- 號表示去掉某些權(quán)限,在 + 和 - 的狀態(tài)下,只要沒找到指令的項目,那么該權(quán)限不會發(fā)生變動。
Linux 目錄和文件權(quán)限
我們上面聊的都是文件權(quán)限,文件是容納數(shù)據(jù)的地方,這些文件包括一般文本文件、數(shù)據(jù)庫文件、二進制文件等,權(quán)限對于文件的意義在于
r(read):可以讀取文件的實際內(nèi)容,比如讀取文本文件的文字內(nèi)容
w(write):可以新增、編輯或者修改文件中的內(nèi)容(不包括刪除文件)
x(execute):使文件具有被文件系統(tǒng)執(zhí)行的權(quán)限。
Windows 下面判斷文件是否能夠執(zhí)行的因素是看文件擴展名, 比如 .exe, .bat, .com 等等,但是在 Linux 中,判斷文件是否具有可執(zhí)行權(quán)限是直接判斷文件有沒有 x 這個權(quán)限,和文件名無關(guān)。
但是在 Linux 中,不只有文件具有權(quán)限,目錄也有權(quán)限,文件是存放實際數(shù)據(jù)的地方,而目錄是記錄文件所在位置的清單,我們只有通過目錄才能找到文件放在哪里!權(quán)限對于不同的目錄,也代表著不同的概念。
r (read contents in directory):表示具有讀取目錄結(jié)構(gòu)清單的權(quán)限,所以如果你具有讀取一個目錄的權(quán)限時,就代表你可以查詢目錄下的文件,所以你就可以使用 ls 將目錄的內(nèi)容顯示出來。
w(modify contents of directory):寫入權(quán)限表示你具有對文件目錄和目錄中的文件進行修改的操作,主要包括
刪除已經(jīng)存在的文件和目錄。
創(chuàng)建新的文件和目錄。
將已存在的文件或目錄進行改名。
移動目錄內(nèi)文件、目錄位置。
x(access directory):這執(zhí)行權(quán)限有啥用?總不能目錄也能夠被執(zhí)行把?其實并不是這樣,執(zhí)行權(quán)限表示著你有沒有權(quán)限進入到指定目錄下,也就是 cd(change directory) 。
Linux 文件種類和擴展名
想必大家都聽說過這樣一句話:任何設(shè)備在 Linux 下都是文件,但是文件也分為多種,除了上面介紹過的一般文件(-) 和目錄文件(d) 之外,還包括下面這些文件類型
常規(guī)文件(regular file):常規(guī)文件就是我們使用 ls -al 所顯示出來的屬性,也就是上面我們列出的第一個字符,
文件類型又可以分為
純文本文件(ASCII),這是 Linux 系統(tǒng)中最多的一種文件類型,純文本文件是我們能夠直接看到的數(shù)據(jù),你可以使用 cat 來直接看到這部分內(nèi)容。比如我們最常用的設(shè)置 Linux 靜態(tài) ip 的文件 ens33 ,就可以使用 cat 命令來輸出
cat ifcfg-ens33
二進制文件,在 Linux 中,查看二進制文件可以使用 xxd 或者 od 進行格式化輸出
數(shù)據(jù)格式文件,數(shù)據(jù)文件直接使用 cat 讀取會顯示亂碼,但是它能夠通過 last 指令進行輸出
目錄,目錄沒什么好說的,就是表示一個文件清單,目錄的表示就是 [d],也就是 directory。
鏈接文件(link),鏈接文件就是某些程序執(zhí)行時需要和這些鏈接文件進行鏈接才能執(zhí)行的一種文件類型。
設(shè)備與設(shè)備文件(device),Linux 下的設(shè)備分為兩種,塊設(shè)備和字符設(shè)備:
塊設(shè)備是一個能存儲固定大小塊信息的設(shè)備,它支持以固定大小的塊,扇區(qū)或群集讀取和(可選)寫入數(shù)據(jù)。每個塊都有自己的物理地址。通常塊的大小在 512 - 65536 之間。所有傳輸?shù)男畔⒍紩赃B續(xù)的塊為單位。塊設(shè)備的基本特征是每個塊都較為對立,能夠獨立的進行讀寫。常見的塊設(shè)備有 硬盤、藍光光盤、USB 盤。
塊設(shè)備一般位于 /dev/sda 下,它的第一個屬性為 [b]。
另一類 I/O 設(shè)備是字符設(shè)備。字符設(shè)備以字符為單位發(fā)送或接收一個字符流,而不考慮任何塊結(jié)構(gòu)。字符設(shè)備是不可尋址的,也沒有任何尋道操作。常見的字符設(shè)備有 打印機、網(wǎng)絡(luò)設(shè)備、鼠標(biāo)、以及大多數(shù)與磁盤不同的設(shè)備。
字符設(shè)備最大的特點就是一次性讀取,不能夠截斷輸出,舉例來說,你不可能將鼠標(biāo)一下跳到另外一個地方,而是采用平滑移動的方式才可以,字符設(shè)備的第一個屬性是 [c]。
數(shù)據(jù)接口文件(sockets):數(shù)據(jù)接口文件顧名思義就是利用 socket 承接網(wǎng)絡(luò)數(shù)據(jù)的,它的屬性是 [s],一般在 /run 或者 /tmp 這些目錄中看到。
數(shù)據(jù)輸送文件(FIFO,pipe):FIFO 也是一種特殊類型的文件,它的主要目的在于解決多個程序同時存取一個文件所造成的的錯誤問題,它的第一個屬性為 [p]。
Linux 擴展名
說到這個擴展名其實就很頭疼,Linux 中是沒有擴展名這個概念的,但是又有一些擴展名的命名方式,這就很尷尬,所以暫且成為擴展類型吧。一般有下面幾種
*.sh ,這是一個執(zhí)行腳本或者批處理腳本,一般也被稱為 shell 腳本,里面是一些 shell 語法寫的指令。
.tar,.tar.gz,.zip,*.tgz,這種擴展類型是打包的壓縮文件,根據(jù)不同的打包方式有不同的擴展類型
.html ,.php :網(wǎng)頁相關(guān)文件,分別代表 HTML 和 PHP 語法的網(wǎng)頁文件。
感謝各位的閱讀,以上就是“l(fā)inux的權(quán)限有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對linux的權(quán)限有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。