自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文搞懂Linux權(quán)限體系

系統(tǒng) Linux
隨著年齡的增加,我的經(jīng)驗(yàn)越來越豐富,而記憶力卻越來越差。為了應(yīng)付繁重的日常事務(wù),我不得不準(zhǔn)備了長長的任務(wù)清單。

[[340471]]

本文轉(zhuǎn)載自微信公眾號「小姐姐味道」,作者小姐姐養(yǎng)的狗。轉(zhuǎn)載本文請聯(lián)系小姐姐味道公眾號。

隨著年齡的增加,我的經(jīng)驗(yàn)越來越豐富,而記憶力卻越來越差。為了應(yīng)付繁重的日常事務(wù),我不得不準(zhǔn)備了長長的任務(wù)清單。每一條事項的背后,都在不斷的提醒我:無論生活中充滿什么驚喜,還是逃離不了它平庸的本質(zhì)。

而我對時間,會更加的敏感。每次一次敲擊鍵盤,都會調(diào)動骨關(guān)節(jié)的扭動,留下一洗不可撤回的痕跡:windows的超級用戶,名字叫做Administrator。這個單詞太長了,我總也記不住。相對來說,linux的超級用戶叫做root,只有四個字母。它的耗能值,比前者要低的多。

 

我們在第三小節(jié),剛接觸命令行的時候,就使用chmod命令,給普通文本文件,賦予了執(zhí)行權(quán)限。本小節(jié)將看一下用戶權(quán)限和文件權(quán)限這兩個息息相關(guān)的概念,

1、添加用戶

到現(xiàn)在為止,我們的系統(tǒng)中,還孤零零的只有這一個用戶,是時候?qū)W學(xué)女媧,捏幾個小泥人了。

首先創(chuàng)建兩個用戶:張三(zhang3)、李四(li4)。

  1. [root@localhost ~]# useradd zhang3 

查看下面命令的三個輸出結(jié)果。

  1. # 系統(tǒng)中多了一個叫做zhang3的組,group文件保存了系統(tǒng)的組信息 
  2. [root@localhost ~]# tail -n1 /etc/group 
  3. zhang3:x:1000: 
  4.  
  5. # 系統(tǒng)中多了一個叫做zhang3的用戶,shadow文件保存了它們的密碼。很多安全滲透就是為了拿到它進(jìn)行暴力破解 
  6. [root@localhost ~]# tail -n1 /etc/shadow 
  7. zhang3:!!:18207:0:99999:7::: 
  8.  
  9. # home目錄中,多了一個叫做zhang3的目錄 
  10. [root@localhost ~]# ll /home --full-time 
  11. total 0 
  12. drwx------. 2 zhang3 zhang3 83 2019-11-06 22:09:33.357165082 -0500 zhang3 

接下來,給我們剛剛建立的用戶,使用passwd設(shè)置一個密碼。密碼需要輸入兩次進(jìn)行確認(rèn)。如果想要更改密碼,可以使用chpasswd命令。

  1. [root@localhost ~]# passwd zhang3 
  2. Changing password for user zhang3. 
  3. New password
  4. BAD PASSWORD: The password is shorter than 8 characters 
  5. Retype new password
  6. passwd: all authentication tokens updated successfully. 

那么如何刪除一個現(xiàn)有的用戶呢?這是通過userdel命令實(shí)現(xiàn)的。加上參數(shù)f,會在其他用戶使用系統(tǒng)的時候,強(qiáng)制退出。

  1. userdel -f zhang3 

2、文件權(quán)限說明

從上面的命令執(zhí)行結(jié)果中,我們發(fā)現(xiàn)了有兩件非常有意思的東西。添加用戶后,除了在密碼文件shadow中增加了一些內(nèi)容,同時還在group文件中添加了信息。這涉及到用戶的兩個屬性:用戶名,組名。

一個用戶只有一個名稱代號,但是可以有多個組。下面命令創(chuàng)建一個密碼為123的用戶li4,并給它追加一個叫做zhang3的組??梢钥吹?etc/group文件中的信息變更。

  1. [root@localhost ~]# useradd  -G zhang3 -p 123 li4 
  2. [root@localhost ~]# tail -n 2 /etc/group 
  3. zhang3:x:1000:li4 
  4. li4:x:1001: 

好啦,接下來切換到我們的文件權(quán)限上面。為了進(jìn)行下面命令的驗(yàn)證,我們首先創(chuàng)建一個名字叫confirm777.sh的腳本文件。為了讓腳本對所有用戶可見,我們把它創(chuàng)建在/tmp目錄下。

  1. cat > /tmp/confirm777.sh <<EOF 
  2. echo $USER 
  3. id 
  4. EOF 

使用ll命令查看文件信息。

  1. [root@localhost ~]# ll /tmp/confirm777.sh --full-time 
  2. -rw-r--r--. 1 root root 13 2019-11-07 04:25:55.418254935 -0500 confirm777.sh 

 

從ll的命令可以看出,文件的所有者是root用戶,文件所屬的組,也是root組,它的權(quán)限是rw-r--r--。文件權(quán)限分為三部分。

  • 所有者權(quán)限,縮寫為u。文件的所有者所擁有的權(quán)限。也就是root用戶的權(quán)限,是rw-
  • 組用戶權(quán)限,縮寫為g。文件所屬組內(nèi)所有用戶的權(quán)限。因?yàn)閞oot組內(nèi)只有root一個用戶,所以組用戶權(quán)限是r--。
  • 其他用戶權(quán)限,縮寫為o。其他不相關(guān)用戶的權(quán)限,比如我們剛創(chuàng)建的zhang3、li4用戶,對文件的權(quán)限就是r--。
  • 全部,縮寫為a,表示對上面三類用戶集體操作。

那rw-這些東西是什么意思呢?

  • r 表示可讀權(quán)限。read。
  • w 表示可寫權(quán)限。write。
  • x 表示可執(zhí)行權(quán)限。execute。
  • - 權(quán)限占位符,表示沒有當(dāng)前權(quán)限。

注意:一個用戶擁有文件的w權(quán)限,并不代表就可以刪除文件。w僅僅針對于文件內(nèi)容來說的。

一個文件,有3類用戶,每類用戶,有3種權(quán)限。使用最簡單的小學(xué)乘法,我們能夠得出,一個文件的權(quán)限位,需要3x3=9個標(biāo)志位表示。

我們的文件名稱,叫做confirm777.sh,這個名字是隨便起的么?當(dāng)然不是,777在linux代表特殊的含義,它代表文件對所有用戶具有可讀、可寫、可執(zhí)行的權(quán)限??梢韵胂?,如果每個文件都有這樣的權(quán)限,系統(tǒng)將無安全可言。那這一串?dāng)?shù)字是怎么來的呢?可以看下面的對照表。

  • r 4 讀
  • w 2 寫
  • x 1 執(zhí)行

對以上三個屬性進(jìn)行任意組合,可以得到:

  • 4 r-- 4+0+0
  • 6 rw- 4+2+0
  • 5 r-x 4+0+1
  • 2 -w- 0+2+0
  • 3 -wx 0+2+1
  • 1 --x 0+0+1
  • 7 rwx 4+2+1

3、文件權(quán)限更改

下面介紹三個文件權(quán)限相關(guān)的命令。一般常用的,就是chown和chmod。

chown 更改文件的所有者。chgrp 更改文件的組。chmod 更改文件權(quán)限。

接下來,我們把confirm777.sh的所有者和組,修改成剛剛創(chuàng)建的用戶zhang3。

  1. cd /tmp 
  2. [root@localhost tmp]# chown zhang3:zhang3 confirm777.sh 
  3. [root@localhost tmp]# ll confirm777.sh 
  4. -rw-r--r--. 1 zhang3 zhang3 13 Nov  7 04:25 confirm777.sh 

給文件所有者增加執(zhí)行權(quán)限。然后分別切換到zhang3,li4用戶執(zhí)行一下。

通過su 命令,可以切換到其他用戶,一般使用su -進(jìn)行環(huán)境變量的清理;而命令id,能夠看到當(dāng)前正在執(zhí)行的用戶信息。

  1. [root@localhost tmp]# chmod u+x confirm777.sh 
  2. [root@localhost tmp]# su li4 
  3. [li4@localhost tmp]$ ./confirm777.sh 
  4. bash: ./confirm777.sh: Permission denied 
  5. [li4@localhost tmp]$ exit 
  6. exit 
  7.  
  8. [root@localhost tmp]# su zhang3 
  9. [zhang3@localhost tmp]$ ./confirm777.sh 
  10. root 
  11. uid=1000(zhang3) gid=1000(zhang3) groups=1000(zhang3) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 

可以看到,文件所有者zhang3可以執(zhí)行文件,但不相關(guān)的li4,提示沒有權(quán)限。接下來,我們驗(yàn)證用戶組相關(guān)的權(quán)限位。

  1. # 去掉zhang3的執(zhí)行權(quán)限 
  2. root@localhost tmp]# chmod u-x confirm777.sh 
  3. [root@localhost tmp]# ll confirm777.sh 
  4. -rw-r--r--. 1 zhang3 zhang3 13 Nov  7 04:25 confirm777.sh 
  5.  
  6. # 增加zhang3組的執(zhí)行權(quán)限,由于li4在zhang3組里,它擁有權(quán)限 
  7. [root@localhost tmp]# chmod g+x confirm777.sh 
  8. [root@localhost tmp]# ll confirm777.sh 
  9. -rw-r-xr--. 1 zhang3 zhang3 13 Nov  7 04:25 confirm777.sh 
  10.  
  11. # 切換到zhang3進(jìn)行執(zhí)行 
  12. [root@localhost tmp]# su - zhang3 
  13. [zhang3@localhost tmp]$ ./confirm777.sh 
  14. bash: ./confirm777.sh: Permission denied 
  15. [zhang3@localhost tmp]$ exit 
  16. exit 
  17.  
  18. # 切換到li4進(jìn)行執(zhí)行 
  19. [root@localhost tmp]# su - li4 
  20. [li4@localhost tmp]$ ./confirm777.sh 
  21. root 
  22. uid=1001(li4) gid=1001(li4) groups=1001(li4),1000(zhang3) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 

從命令的執(zhí)行結(jié)果可以看出。這次,li4能夠執(zhí)行文件,相反的,zhang3卻不能。

我們使用chmod命令來修改文件權(quán)限,使用的是類似于a+x這樣的英文字母。拿第一個腳本來說,初始的權(quán)限是rw-r--r--,也就是644,在這種情況下,下面的兩個腳本等效。

  1. chmod u+x confirm777.sh 
  2. chmod 744 confirm777.sh 

可以看到,第二個命令,使用的是數(shù)字樣式的權(quán)限位,多了一步人腦轉(zhuǎn)換過程。這在日常的使用中,是非常不方便的。所以,使用符號法的表示方式,能夠更加直觀,非常推薦。

 

為了更直觀的表現(xiàn)這個過程,我專門制作了一張圖。

4、目錄權(quán)限

這里有一個非常有意思的地方。把文件設(shè)置成可執(zhí)行,可以把普通文件變成腳本,目錄文件的可執(zhí)行權(quán)限是什么鬼?有什么意義?對文件夾來說:

  • r 表示允許讀取目錄中的文件名,但不能進(jìn)入該目錄
  • w 表示允許用戶修改目錄,可以創(chuàng)建、遷移、刪除、更名目錄下的文件
  • x 可以獲得目錄下文件的列表,以及進(jìn)入目錄,執(zhí)行cd命令

關(guān)于r和x的區(qū)別,可以看下面的命令結(jié)果,仔細(xì)感受一下它們的區(qū)別。一般的,幾乎所有的目錄,都擁有執(zhí)行權(quán)限,不要隨意對其進(jìn)行設(shè)置。

  1. [root@localhost tmp]# su - li4 
  2. [li4@localhost ~]$ cd /tmp 
  3.  
  4. [li4@localhost tmp]$ mkdir nox 
  5. [li4@localhost tmp]$ touch nox/{a,b,c,d} 
  6. [li4@localhost tmp]$ chmod a-x nox 
  7. [li4@localhost tmp]$ ls nox 
  8. ls: cannot access nox/a: Permission denied 
  9. ls: cannot access nox/b: Permission denied 
  10. ls: cannot access nox/c: Permission denied 
  11. ls: cannot access nox/d: Permission denied 
  12. a  b  c  d 
  13. [li4@localhost tmp]$ cat nox/a 
  14. cat: nox/a: Permission denied 
  15.  
  16. [li4@localhost tmp]$ chmod a+x nox 
  17. [li4@localhost tmp]$ chmod a-r nox 
  18. [li4@localhost tmp]$ ls nox 
  19. ls: cannot open directory nox: Permission denied 

5、sticky bit

接下來,我們介紹一個比較燒腦的粘貼位。

假如你要刪除一個文件,你可以沒有這個文件的寫權(quán)限,但是你必須要擁有這個文件上級目錄的寫權(quán)限。如何創(chuàng)建一個目錄,可以讓任何人些人文件,但是又不能刪除其他用戶的文件?這就是stick bit的作用。粘貼位一般只用于目錄上,對文件來說并沒有什么用處。粘貼位一般使用t表示。

我們可以看一個典型的目錄/tmp

  1. [root@localhost tmp]#  ls -dl /tmp 
  2. drwxrwxrwt. 9 root root 4096 Nov  7 06:27 /tmp 

 

可以看到,最后一位,顯示的是t,而不是x,意思是普通用戶不能刪除其他用戶的文件。所有用戶在/tmp目錄中,都可以隨意創(chuàng)建文件,但是卻刪除不了其他人的文件,即使文件的權(quán)限是777。

  1. [root@localhost tmp]# touch /tmp/stick 
  2. [root@localhost tmp]# chown li4:li4 /tmp/stick 
  3. [root@localhost tmp]# chmod 777 /tmp/stick 
  4. [root@localhost tmp]# su - zhang3 
  5. [zhang3@localhost ~]$ rm /tmp/stick 
  6. rm: cannot remove ‘/tmp/stick’: Operation not permitted 

6、小結(jié)

本小節(jié)創(chuàng)建了兩個用戶zhang3和li4,并拿它們測試了chown和chmod命令,最后介紹了粘貼位。linux比較安全的原因,就是因?yàn)橛斜容^詳盡的權(quán)限劃分。但權(quán)限是枚雙刃劍,超權(quán)用戶一個命令就可以搞垮系統(tǒng),許多隱藏的木馬,通過提權(quán)運(yùn)行在不為人知的地方。

權(quán)限相關(guān)的幾個命令會經(jīng)常被使用,下面舉幾個例子。

  1. # 設(shè)置/var/lib/mysql的用戶和組為mysql 
  2. chown -R mysql:mysql /var/lib/mysql 
  3.  
  4. # 設(shè)置目錄可讀可寫,能夠上傳文件 
  5. chmod  777 /var/www/uploads 
  6.  
  7. # 增加本目錄下所有sh的執(zhí)行權(quán)限 
  8. chomd a+x *.sh 
  9.  
  10. # 變更file為可讀可寫可執(zhí)行 
  11. chmod u=rwx,g=rwx,o=rwx file 

7、思考&擴(kuò)展

1、下面這個命令,執(zhí)行以后,會發(fā)生什么情況?警告:不要執(zhí)行,哪怕把000改成其他數(shù)字。

  1. # R遍歷子目錄的意思 
  2. chmod -R 000 / 

2、有一天,我看到一個命令chmod u+s file,文中并沒有介紹s是什么意思,這是什么意思?

3、如何刪除一個用戶的組?

EndLinux系統(tǒng)的命令是十分枯燥的。本系列不知不覺已經(jīng)持續(xù)了8個周。和預(yù)想的一樣,它并未取得廣泛的歡迎,從它和其他文章迥然的閱讀量就可以看出--標(biāo)題就讓人失去了點(diǎn)擊的欲望。

技術(shù)類文章完全不同于扯淡型的天馬行空,耗費(fèi)的精力也是巨大的,尤其對我一個對正確性有強(qiáng)迫癥的人來說。有時候,我會產(chǎn)生迷茫。不知道這依靠興趣支撐的輸出,能夠持續(xù)多久。

能夠翻到結(jié)尾,翻到這里的朋友,xjjdog非常感謝。還有幾篇就要結(jié)束了,加上以前關(guān)于Linux的一些文章,已經(jīng)可以成為一個體系了。如果你跟蹤至此,至少已經(jīng)可以在平常的工作中游刃有余了。

xjjdog接下來會找一些讓人歡迎的主題,而不是這么枯燥的知識點(diǎn)。畢竟,有的時候,人家畢竟還是個可愛的女孩紙嘛。

 

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進(jìn)一步交流。

 

責(zé)任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2021-03-04 00:09:31

MySQL體系架構(gòu)

2025-01-08 10:30:24

2024-04-12 12:19:08

語言模型AI

2022-03-24 08:51:48

Redis互聯(lián)網(wǎng)NoSQL

2022-03-28 19:19:45

Linux時間子系統(tǒng)

2022-04-12 09:05:30

Linux時鐘

2023-12-15 15:55:24

Linux線程同步

2024-11-05 14:00:56

2021-03-22 10:05:59

netstat命令Linux

2023-09-08 08:20:46

ThreadLoca多線程工具

2023-09-15 12:00:01

API應(yīng)用程序接口

2023-05-22 13:27:17

2020-12-07 06:19:50

監(jiān)控前端用戶

2021-02-28 20:53:37

Cookie存儲瀏覽器

2021-07-08 10:08:03

DvaJS前端Dva

2023-03-06 21:29:41

mmap技術(shù)操作系統(tǒng)

2023-09-02 21:27:09

2024-07-12 14:46:20

2022-07-15 08:16:56

Stream函數(shù)式編程

2021-01-13 05:21:59

參數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號