Linux總結(二十六):linux的/文件特殊權限chattr、 lsattr、sudo

一、chattr命令:修改文件系統的權限屬性

        管理 Linux 系統中的文件和目錄,除了可以設定普通權限和特殊權限外,還可以利用文件和目錄具有的一些隱藏屬性。chattr 命令,專門用來修改文件或目錄的隱藏屬性,只有 root 用戶可以使用。

1、基本格式

[root@localhost ~]# chattr [+-=] [屬性] 文件或目錄名

        + 表示給文件或目錄添加屬性,- 表示移除文件或目錄擁有的某些屬性,= 表示給文件或目錄設定一些屬性。

        表 1 列出了常用的一些屬性及功能。

表 1 chattr 命令常用的屬性選項及功能
屬性選項 功能
i 如果對文件設置 i 屬性,那麼不允許對文件進行刪除、改名,也不能添加和修改數據;
如果對目錄設置 i 屬性,那麼只能修改目錄下文件中的數據,但不允許建立和刪除文件;
a 如果對文件設置 a 屬性,那麼只能在文件中増加數據,但是不能刪除和修改數據;
如果對目錄設置 a 屬性,那麼只允許在目錄中建立和修改文件,但是不允許刪除文件;
u 設置此屬性的文件或目錄,在刪除時,其內容會被保存,以保證後期能夠恢復,常用來防止意外刪除文件或目錄。
s 和 u 相反,刪除文件或目錄時,會被徹底刪除(直接從硬盤上刪除,然後用 0 填充所佔用的區域),不可恢復。

 2、基本應用

(1)爲文件賦予 i 屬性

        設置有 i 屬性的文件,即便是 root 用戶,也無法刪除和修改數據。 

(2)爲目錄賦予 i 屬性

         一旦給目錄設置 i 屬性,即使是 root 用戶,也無法在目錄內部新建或刪除文件,但可以修改文件內容。

        給設置有 i 屬性的文件刪除此屬性也很簡單,只需將 chattr 命令中 + 改爲 - 即可。

(3)賦予a屬性

        假設有這樣一種應用,我們每天自動實現把服務器的日誌備份到指定目錄,備份目錄可設置 a 屬性,變爲只可創建文件而不可刪除。命令如下:

[root@localhost ~]# mkdir -p /back/log
#建立備份目錄
[root@localhost ~]# chattr +a /back/log
#賦予a屬性
[root@localhost ~]# cp /var/log/messages /back/log
#可以複製文件和新建文件到指定目錄中
[root@localhost ~]# rm -rf /back/log/messages
rm: cannot remove '/back/log/messages': Permission denied
#無法刪除 /back/log/messages,操作不允許

        注意,通常情況下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目錄的隱藏屬性,很容易導致系統無法啓動。另外,chatrr 命令常與 lsattr 命令合用,前者修改文件或目錄的隱藏屬性,後者用於查看是否修改成功。有關 lsattr 命令,放到下節講解。

二、lsattr命令:查看文件系統屬性

使用 chattr 命令配置文件或目錄的隱藏屬性後,可以使用 lsattr 命令查看。

1、基本格式

         lsattr 命令,用於顯示文件或目錄的隱藏屬性,其基本格式如下:

[root@localhost ~]# lsattr [選項] 文件或目錄名

        常用選項有以下 3 種:

        (1)-a:後面不帶文件或目錄名,表示顯示所有文件和目錄(包括隱藏文件和目錄)

        (2)-d:如果目標是目錄,只會列出目錄本身的隱藏屬性,而不會列出所含文件或子目錄的隱藏屬性信息;

        (3)-R:和 -d 恰好相反,作用於目錄時,會連同子目錄的隱藏信息數據也一併顯示出來。

2、基本應用

三、sudo命令

       我們知道,使用 su 命令可以讓普通用戶切換到 root 身份去執行某些特權命令,但存在一些問題,比如說:

    (1)僅僅爲了一個特權操作就直接賦予普通用戶控制系統的完整權限;

    (2)當多人使用同一臺主機時,如果大家都要使用 su 命令切換到 root 身份,那勢必就需要 root 的密碼,這就導致很多人都知道 root 的密碼;

        考慮到使用 su 命令可能對系統安裝造成的隱患,最常見的解決方法是使用 sudo 命令,此命令也可以讓你切換至其他用戶的身份去執行命令。
        相對於使用 su 命令還需要新切換用戶的密碼,sudo 命令的運行只需要知道自己的密碼即可,甚至於,我們可以通過手動修改 sudo 的配置文件,使其無需任何密碼即可運行。

        su需要知道root密碼,sudo只需要輸入自己密碼即可。

一、基本格式

        sudo 命令默認只有 root 用戶可以運行,該命令的基本格式爲:

[root@localhost ~]# sudo [-b] [-u 新使用者賬號] 要執行的命令

         常用的選項與參數:

        -b  :將後續的命令放到背景中讓系統自行運行,不對當前的 shell 環境產生影響。

        -u  :後面可以接欲切換的用戶名,若無此項則代表切換身份爲 root 。

        -l:此選項的用法爲 sudo -l,用於顯示當前用戶可以用 sudo 執行那些命令。

2、基本使用

        (1)無法使用 su - sshd 的方式成功切換到 sshd 賬戶中,因爲此用戶的默認 Shell 是 /sbin/nologin。這時就顯現出 sudo 的優勢,我們可以使用 sudo 以 sshd 的身份在 /tmp 目錄下創建 mysshd 文件,可以看到,新創建的 mysshd 文件的所有者確實是 sshd。

        (2)使用 sudo 命令切換至 vbird1 身份,並運行 sh -c 的方式來運行一連串的命令。

[root@localhost ~]#  sudo -u vbird1 sh -c "mkdir ~vbird1/www; cd ~vbird1/www; \
>  echo 'This is index.html file' > index.html"
[root@localhost ~]#  ll -a ~vbird1/www
drwxr-xr-x 2 vbird1 vbird1 4096 Feb 28 17:51 .
drwx------ 5 vbird1 vbird1 4096 Feb 28 17:51 ..
-rw-r--r-- 1 vbird1 vbird1   24 Feb 28 17:51 index.html

3、執行過程

        sudo命令的運行,需經歷如下幾步:

        (1)當用戶運行 sudo 命令時,系統會先通過 /etc/sudoers 文件,驗證該用戶是否有運行 sudo 的權限;

        (2)確定用戶具有使用 sudo 命令的權限後,還要讓用戶輸入自己的密碼進行確認。出於對系統安全性的考慮,如果用戶在默認時間內(默認是 5 分鐘)不使用 sudo 命令,此後使用時需要再次輸入密碼;

        (3)密碼輸入成功後,纔會執行 sudo 命令後接的命令。

        顯然,能否使用 sudo 命令,取決於對 /etc/sudoers 文件的配置(默認情況下,此文件中只配置有 root 用戶)。所以接下來,我們學習對 /etc/sudoers 文件進行合理的修改。

4、sudo命令的配置文件/etc/sudoers

        修改 /etc/sudoers,不建議直接使用 vim,而是使用 visudo。因爲修改 /etc/sudoers 文件需遵循一定的語法規則,使用 visudo 的好處就在於,當修改完畢 /etc/sudoers 文件,離開修改頁面時,系統會自行檢驗 /etc/sudoers 文件的語法。

    [root@localhost ~]# visudo

        輸入後,進入了配置文件:

        通過 visudo 命令,我們就打開了 /etc/sudoers 文件,可以看到如上顯示的 2 行信息,這是系統給我們提供的 2 個模板,分別用於添加用戶和羣組,使其能夠使用 sudo 命令。
        這兩行模板的含義分爲是:

root ALL=(ALL) ALL
#用戶名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
#%wheel ALL=(ALL) ALL
#%組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)

         表 1 對以上 2 個模板的各部分進行詳細的說明。

表 1 /etc/sudoers 用戶和羣組模板的含義
模塊 含義
用戶名或羣組名 表示系統中的那個用戶或羣組,可以使用 sudo 這個命令。
被管理主機的地址 用戶可以管理指定 IP 地址的服務器。這裏如果寫 ALL,則代表用戶可以管理任何主機;如果寫固定 IP,則代表用戶可以管理指定的服務器。如果我們在這裏寫本機的 IP 地址,不代表只允許本機的用戶使用指定命令,而是代表指定的用戶可以從任何 IP 地址來管理當前服務器。
可使用的身份 就是把來源用戶切換成什麼身份使用,(ALL)代表可以切換成任意身份。這個字段可以省略。
授權命令 表示 root 把什麼命令命令授權給用戶,換句話說,可以用切換的身份執行什麼命令。需要注意的是,此命令必須使用絕對路徑寫。默認值是 ALL,表示可以執行任何命令。

5、基本示例

        (1)授權用戶 lamp 可以重啓服務器,由 root 用戶添加,可以在 /etc/sudoers 模板下添加如下語句:

[root@localhost ~]# visudo
lamp ALL=/sbin/shutdown -r now

        注意,這裏也可以寫多個授權命令,之間用逗號分隔。用戶 lamp 可以使用 sudo -l 查看授權的命令列表:

[root@localhost ~]# su - lamp
#切換成lamp用戶
[lamp@localhost ~]$ sudo -l
[sudo] password for lamp:
#需要輸入lamp用戶的密碼
User lamp may run the following commands on this host:
(root) /sbin/shutdown -r now

         可以看到,lamp 用戶擁有了 shutdown -r now 的權限。這時,lamp 用戶就可以使用 sudo 執行如下命令重啓服務器:

[lamp@localhost ~]$ sudo /sbin/shutdown -r now

         再次強調,授權命令要使用絕對路徑(或者把 /sbin 路徑導入普通用戶 PATH 路徑中,不推薦使用此方式),否則無法執行。

        (2)假設現在有 pro1,pro2,pro3 這 3 個用戶,還有一個 group 羣組,我們可以通過在 /etc/sudoers 文件配置 wheel 羣組信息,令這 3 個用戶同時擁有管理系統的權限。
        首先,向 /etc/sudoers 文件中添加羣組配置信息:

[root@localhost ~]# visudo
....(前面省略)....
%group     ALL=(ALL)    ALL
#在 84 行#wheel這一行後面寫入

         此配置信息表示,group 這個羣組中的所有用戶都能夠使用 sudo 切換任何身份,執行任何命令。接下來,我們使用 usermod 命令將 pro1 加入 group 羣組,看看有什麼效果:

[root@localhost ~]# usermod -a -G group pro1
[pro1@localhost ~]# sudo tail -n 1 /etc/shadow <==注意身份是 pro1
....(前面省略)....
Password:  <==輸入 pro1 的口令喔!
pro3:$1$GfinyJgZ$9J8IdrBXXMwZIauANg7tW0:14302:0:99999:7:::
[pro2@localhost ~]# sudo tail -n 1 /etc/shadow <==注意身份是 pro2
Password:
pro2 is not in the sudoers file.  This incident will be reported.
#此錯誤信息表示 pro2 不在 /etc/sudoers 的配置中。

         可以看到,由於 pro1 加入到了 group 羣組,因此 pro1 就可以使用 sudo 命令,而 pro2 不行。同樣的道理,如果我們想讓 pro3 也可以使用 sudo 命令,不用再修改 /etc/sudoers 文件,只需要將 pro3 加入 group 羣組即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章