Day-12-Linux 特殊權(quán)限

一、特殊權(quán)限概述

前面我們已經(jīng)學(xué)習(xí)過(guò) r(讀)、w(寫(xiě))、 x(執(zhí)行)這三種普通權(quán)限,但是我們?cè)跂嗽兿到y(tǒng)文件權(quán)限時(shí)會(huì)發(fā)現(xiàn)出現(xiàn)了一些其他權(quán)限字母,比如:

[root@oldboy ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

在屬主本來(lái)應(yīng)該是 x(執(zhí)行)權(quán)限的位置出現(xiàn)了一個(gè)小寫(xiě)s,這是什么權(quán)限?我們把這種權(quán)限稱作 SetUID 權(quán)限,也叫作 SUID 的特殊權(quán)限。

二、.特殊權(quán)限SUID

1.問(wèn)題

在 Linux 系統(tǒng)中,每個(gè)普通用戶都可以更改自己的密碼,這是合理的設(shè)置。問(wèn)題是,普通用戶的信息保存在 /etc/passwd 文件中,用戶的密碼在 /etc/shadow 文件中,也就是說(shuō),普通用戶在更改自己的密碼時(shí)修改了 /etc/shadow 文件中的加密密碼,但是文件權(quán)限顯示,普通用戶對(duì)這兩個(gè)文件其實(shí)都是沒(méi)有寫(xiě)權(quán)限的,那為什么普通用戶可以修改自己的權(quán)限呢:

[root@boldboy ~]# ll /etc/passwd
-rw-r--r-- 1 root root 6209 Apr 13 03:26 /etc/passwd
[root@boldboy ~]# ll /etc/shadow
---------- 1 root root 11409 Apr 13 03:26 /etc/shadow

2.解決方案

其實(shí),普通用戶可以修改自己的密碼在于 passwd 命令。該命令擁有特殊權(quán)限 SetUID,也就是在屬主的權(quán)限位的執(zhí)行權(quán)限上是 s。可以這樣來(lái)理解它:當(dāng)一個(gè)具有執(zhí)行權(quán)限的文件設(shè)置 SetUID 權(quán)限后,用戶在執(zhí)行這個(gè)文件時(shí)將以文件所有者的身份來(lái)執(zhí)行。

示例圖
圖片.png

當(dāng)普通用戶使用 passwd 命令更改自己的密碼時(shí),實(shí)際上是在用 passwd 命令所有者 root 的身份在執(zhí)行 passwd 命令,root 當(dāng)然可以將密碼寫(xiě)入 /etc/shadow 文件,所以普通用戶也可以修改 /etc/shadow 文件,命令執(zhí)行完成后,該身份也隨之消失。

3.示例演示

1)舉個(gè)例子,有一個(gè)普通用戶 cui-01,他可以修改自己的權(quán)限,因?yàn)?passwd 命令擁有 SetUID 權(quán)限;但是她不能査看 /etc/shadow 文件的內(nèi)容,因?yàn)闁丝次募拿睿ㄈ?cat)沒(méi)有 SetUID 權(quán)限。命令如下:
1.普通用戶可以自己可以修改自己的密碼,從而改變/etc/shadow中的數(shù)據(jù)
[cui-01@oldboy ~]$ passwd 
Changing password for user cui-01.
Changing password for cui-01.
(current) UNIX password: 

2.但無(wú)法使用cat命令查看/etc/shadow
[cui-01@oldboy ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[root@oldboy ~]# ps aux | grep passwd     查看修改密碼時(shí)的進(jìn)程
root       7612  0.5  0.0 170712  1992 pts/1    S+   14:40   0:00 passwd
root       7615  0.0  0.0 112708   976 pts/0    S+   14:41   0:00 grep --color=auto passwd

3.創(chuàng)建一個(gè)新的用戶,并將其改為屬主,賦予特殊權(quán)限
[root@oldboy ~]# useradd cui
[root@oldboy ~]# chown cui /usr/bin/passwd   修改為屬主
[root@oldboy ~]# ll /usr/bin/passwd 
-rwxr-xr-x. 1 cui root 27832 Jun 10  2014 /usr/bin/passwd
[root@oldboy ~]# chmod u+s /usr/bin/passwd    賦予特殊權(quán)限
[root@oldboy ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 cui root 27832 Jun 10  2014 /usr/bin/passwd

4.再次修改密碼(但是修改不成功,因?yàn)槠胀ㄓ脩鬰ui無(wú)權(quán)訪問(wèn)/etc/shadow)
[cui-01@oldboy ~]$ passwd 
Changing password for user cui-01.
Changing password for cui-01.
(current) UNIX password:
 
5.再次查看修改密碼時(shí)passwd的進(jìn)程,發(fā)現(xiàn)特殊權(quán)限調(diào)用cui(屬主)去修改文件
[root@oldboy ~]# ps aux | grep passwd
cui        7655  0.0  0.0 170712  1996 pts/1    S+   16:08   0:00 passwd
root       7658  0.0  0.0 112708   976 pts/0    R+   16:08   0:00 grep --color=auto passwd
[root@oldboy ~]# ll /etc/shadow
----------. 1 root root 775 Aug  8 16:03 /etc/shadow

進(jìn)程能夠以何種身份去查看文件,主要取決于運(yùn)行這個(gè)進(jìn)程的用戶 對(duì)這個(gè)文件有沒(méi)有權(quán)限。

2)注:
passwd 是系統(tǒng)命令,可以執(zhí)行,所以可以賦予 SetUID 權(quán)限。
cui-01 用戶對(duì) passwd 命令擁有 x(執(zhí)行)權(quán)限。
cui-01 用戶在執(zhí)行 passwd 命令的過(guò)程中,會(huì)暫時(shí)切換為 root 身份,所以可以修改 /etc/shadow 文件。
命令結(jié)束,cui-01用戶切換回自己的身份。
注: cat 命令沒(méi)有 SetUID權(quán)限,所以使用 cui-01 用戶身份去訪問(wèn) /etc/shadow 文件,


4.suid授權(quán)方法:權(quán)限字符s(S),用戶位置上的 執(zhí)行權(quán)限(x)位上設(shè)置

  • 4000 數(shù)字設(shè)置,
  • u+s 用命令設(shè)置
    suid優(yōu)點(diǎn): 可以讓普通用戶執(zhí)行無(wú)法執(zhí)行的命令 方便
  • suid缺點(diǎn): 如果rm 為suid, 無(wú)論誰(shuí)執(zhí)行該命令,都能刪除系統(tǒng)的任何 資源
[root@boldboy ~]# chmod 4755 passwd
[root@boldboy ~]# chmod  u+s  passwd

——suid 的作用

  • 讓普通用戶對(duì)可執(zhí)行的二進(jìn)制文件,臨時(shí)擁有二進(jìn)制文件的所屬主權(quán)限。
  • 如果設(shè)置的二進(jìn)制文件沒(méi)有執(zhí)行權(quán)限,那么suid的權(quán)限顯示就是大S。
  • 特殊權(quán)限suid僅對(duì)二進(jìn)制可執(zhí)行程序有效,其他文件或目錄則無(wú)效。

5.特殊權(quán)限SGID

將目錄設(shè)置為 sgid 后,如果在該目錄下創(chuàng)建文件,都將與該目錄的所屬組保持一致,演示如下

1.建立測(cè)試目錄
[root@oldboy ~]# cd /tmp/ && mkdir dtest

2.給測(cè)試目錄賦予SetGID權(quán)限,檢查SetGID是否生效
[root@oldboy  tmp]# chmod g+s dtest/ && ll -d dtest/
drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/

3.給測(cè)試目錄賦予777權(quán)限,讓普通用戶可以寫(xiě)
[root@oldboy  tmp]# chmod 777 dtest/

4.切換成普通用戶lamp,并進(jìn)入該目錄
[root@oldboy  tmp]# su - lamp
[cui-01@oldboy~]$ cd /tmp/dtest/

5.普通用戶創(chuàng)建測(cè)試文件,檢查文件的信息
[cui-01@oldboy dtest]$ touch lamp_test
[cui-01@oldboy dtest]$ ll
-rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_test

1)sgid授權(quán)方法: 權(quán)限字符s(S),取決于屬“組”位置上的x

  • 2000數(shù)字授權(quán)
  • g+s 命令授權(quán)
[root@oldboy ~]# chmod 2755  directory 
[root@oldboy ~]# chmod  g+s  directory

——sgid作用

  • 針對(duì)用戶 “組” 權(quán)限位修改,用戶創(chuàng)建的目錄或文件所屬組和該目錄的所屬組一致。
  • 當(dāng)某個(gè)目錄設(shè)置了sgid后,在該目錄中新建的文件不在是創(chuàng)建該文件的默認(rèn)所屬組
  • 使用sgid可以使得多個(gè)用戶之間共享一個(gè)目錄的所有文件變得簡(jiǎn)單。

6.特殊權(quán)限SBIT——粘滯位 (只對(duì)目錄有效)

普通用戶對(duì)該目錄擁有 w 和 x 權(quán)限,即普通用戶可以在此目錄中擁有寫(xiě)入權(quán)限。如果沒(méi)有粘滯位,那么普通用戶擁有 w 權(quán)限,就可以刪除此目錄下的所有文件,包括其他用戶建立的文件。但是一旦被賦予了粘滯位,除了 root 可以刪除所有文件,普通用戶就算擁有 w 權(quán)限,也只能刪除自己建立的文件,而不能刪除其他用戶建立的文件。

示例圖
圖片.png
[root@oldboy tmp]# ll -d /tmp/
drwxrwxrwt. 12 root root 4096 Apr 13 05:32 /tmp/

1)sticky授權(quán)方法——字符t(T),其他用戶位的x位上設(shè)置。

  • 1000 數(shù)字授權(quán)
  • 0 + t 命令授權(quán)
[root@oldboy~]# chmod 1755  /tmp
[root@oldboy~]# chmod o+t /tmp

——sticky作用

  • 讓多個(gè)用戶都具有寫(xiě)權(quán)限的目錄,并讓每個(gè)用戶只能刪自己的文件。
  • 特殊sticky目錄表現(xiàn)在others的x位,用小t表示,如果沒(méi)有執(zhí)行權(quán)限是T
  • 一個(gè)目錄即使它的權(quán)限為"777"如果是設(shè)置了粘滯位,除了目錄的屬主和"root"用戶有權(quán)限刪除,除此之外其他用戶都不允許刪除該目錄。

三、權(quán)限的屬性

1.權(quán)限屬性chattr

chatrr 只有 root 用戶可以使用,用來(lái)修改文件系統(tǒng)的權(quán)限屬性,建立凌駕于 rwx 基礎(chǔ)權(quán)限之上的授權(quán)。
chatrr 命令格式:[root@oldboy ~]# chattr [+-=] [選項(xiàng)] 文件或目錄名

1)參數(shù)

a 權(quán)限,無(wú)法寫(xiě)入和刪除文件,但可以追加數(shù)據(jù),適合/etc/passwd這樣的文件
i 權(quán)限, 無(wú)法寫(xiě)入,無(wú)法刪除,適合不需要更改的重要文件加鎖
1.創(chuàng)建文件并設(shè)置屬性
[root@oldboy~]# touch file_a file_i
[root@oldboy~]# lsattr file_a file_i
---------------- file_a
---------------- file_i

2.使用chattr設(shè)置屬性,lsattr查看權(quán)限限制
[root@oldboy ~]# chattr +a file_a
[root@oldboy~]# chattr +i file_i
[root@oldboy~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i

3.a權(quán)限,無(wú)法寫(xiě)入和刪除文件,但可以追加數(shù)據(jù),適合/etc/passwd這樣的文件
[root@oldboy ~]# echo "aa" > file_a
bash: file_a: Operation not permitted
[root@oldboy ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
[root@oldboy ~]# echo "aa" >> file_a

4.i權(quán)限, 無(wú)法寫(xiě)入,無(wú)法刪除,適合不需要更改的重要文件加鎖
[root@xuliangwei ~]# echo "i" > file_i
bash: file_i: Permission denied
[root@oldboy ~]# echo "i" >> file_i
bash: file_i: Permission denied
[root@oldboy  ~]# rm -f  file_i
rm: cannot remove ‘file_i’: Operation not permitted

5.解除限制
[root@oldboy ~]# chattr -a file100 
[root@oldboy~]# chattr -i file200

2.進(jìn)程掩碼umask

1)umask 默認(rèn)權(quán)限的含義

當(dāng)我們登錄系統(tǒng)之后創(chuàng)建一個(gè)文件總是有一個(gè)默認(rèn)權(quán)限的,比如: 目錄755、文件644、這就是umaskumask設(shè)置了用戶創(chuàng)建文件的默認(rèn)權(quán)限。-

2).umask是如何改變創(chuàng)建新文件的權(quán)限

系統(tǒng)默認(rèn)umask為022,那么當(dāng)我們創(chuàng)建一個(gè)目錄時(shí),正常情況下目錄的權(quán)限應(yīng)該是777,但umask表示要減去的值,所以新目錄文件的權(quán)限應(yīng)該是777 - 022 =755。至于文件的權(quán)限也依次類推666 - 022 =644。

3)umask涉及哪些配置文件

相關(guān)文件/etc/bashrc 、/etc/profile 、~/.bashrc 、~/.bash_profile

4)umask 默認(rèn)權(quán)限 目錄: 755 文件: 664

  • umask是用來(lái)控制默認(rèn)創(chuàng)建文件或目錄的權(quán)限
  • umask設(shè)定為022,
    • 表示要減去的權(quán)限
    • 目錄 777 -022 =755
    • 文件 666 -022 =644
  • umask 設(shè)定為奇數(shù) 偶數(shù) 對(duì)文件和目錄有什么影響?
    • 文件: 如果umask出現(xiàn)了奇數(shù), 要在奇數(shù)位+1
    • 目錄: 對(duì)目錄毫無(wú)影響
  • 設(shè)定umask umask number 臨時(shí) (當(dāng)前bash窗口有效,會(huì)隨著bash的關(guān)閉一 起結(jié)束)
  • vim /etc/profile /etc/login.defs # 如果修改則都為永久.

總結(jié)

今天我們學(xué)習(xí)了用戶的特殊權(quán)限,suid 、sgid 、sbit、特殊的屬性,umask 默認(rèn)權(quán)限( 表示要減去的權(quán)限 目錄:777 -umask 文件:666 umask)等,大多數(shù)權(quán)限屬于我們了解的內(nèi)容,運(yùn)用的地方并不是很多。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容