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