1. 程式人生 > >linux——用戶及文件權限管理

linux——用戶及文件權限管理

改變 共享 就會 一點 ech 查看內部 AR 文件系統 mod

通過第一節課程的學習,你應該已經知道,Linux 是一個可以實現多用戶登陸的操作系統,比如“李雷”和“韓梅梅”都可以同時登陸同一臺主機,他們共享一些主機的資源,但他們也分別有自己的用戶空間,用於存放各自的文件。但實際上他們的文件都是放在同一個物理磁盤上的甚至同一個邏輯分區或者目錄裏,但是由於 Linux 的 用戶管理 和 權限機制,不同用戶不可以輕易地查看、修改彼此的文件。

下面我們就來學習一下 Linux 下的賬戶管理的基礎知識。

2.1 查看用戶

請打開終端,輸入命令:

$ who am i

或者

$ who mom likes

輸出的第一列表示打開當前偽終端的用戶的用戶名(要查看當前登錄用戶的用戶名,去掉空格直接使用 whoami

即可),第二列的 pts/0pts 表示偽終端,所謂偽是相對於 /dev/tty 設備而言的,還記得上一節講終端時的那七個使用 [Ctrl]+[Alt]+[F1]~[F7] 進行切換的 /dev/tty 設備麽,這是“真終端”,偽終端就是當你在圖形用戶界面使用 /dev/tty7 時每打開一個終端就會產生一個偽終端, pts/0 後面那個數字就表示打開的偽終端序號,你可以嘗試再打開一個終端,然後在裏面輸入 who am i ,看第二列是不是就變成 pts/1 了,第三列則表示當前偽終端的啟動時間。

who 命令其它常用參數

參數說明
-a 打印能打印的全部
-d 打印死掉的進程
-m am i
,mom likes
-q 打印當前登錄用戶數及用戶名
-u 打印當前登錄用戶登錄信息
-r 打印運行等級

2.2 創建用戶

在 Linux 系統裏, root 賬戶擁有整個系統至高無上的權利,比如 新建/添加 用戶。

root 權限,系統權限的一種,與 SYSTEM 權限可以理解成一個概念,但高於 Administrator 權限,root 是 Linux 和 UNIX 系統中的超級管理員用戶帳戶,該帳戶擁有整個系統至高無上的權力,所有對象他都可以操作,所以很多黑客在入侵系統的時候,都要把權限提升到 root 權限,用 Windows 的方法理解也就是將自己的非法帳戶添加到 Administrators 用戶組。更比如安卓操作系統中(基於 Linux 內核)獲得 root 權限之後就意味著已經獲得了手機的最高權限,這時候你可以對手機中的任何文件(包括系統文件)執行所有增、刪、改、查的操作。

我們一般登錄系統時都是以普通賬戶的身份登錄的,要創建用戶需要 root 權限,這裏就要用到 sudo 這個命令了。不過使用這個命令有兩個大前提,一是你要知道當前登錄用戶的密碼,二是當前用戶必須在 sudo 用戶組。shiyanlou 用戶也屬於 sudo 用戶組(稍後會介紹如何查看和添加用戶組)。

su,su- 與 sudo

su <user> 可以切換到用戶 user,執行時需要輸入目標用戶的密碼,sudo <cmd> 可以以特權級別運行 cmd 命令,需要當前用戶屬於 sudo 組,且需要輸入當前用戶的密碼。su - <user> 命令也是切換用戶,同時環境變量也會跟著改變成目標用戶的環境變量。

現在我們新建一個叫 lilei 的用戶:

sudo adduser lilei

這個命令不但可以添加用戶到系統,同時也會默認為新用戶創建 home 目錄:

$ ls /home

現在你已經創建好一個用戶,並且你可以使用你創建的用戶登錄了,使用如下命令切換登錄用戶:

$ su -l lilei

輸入剛剛設置的 lilei 的密碼:

退出當前用戶跟退出終端一樣可以使用 exit 命令或者使用快捷鍵 Ctrl+d

技術分享圖片 2.3 用戶組

在 Linux 裏面每個用戶都有一個歸屬(用戶組),用戶組簡單地理解就是一組用戶的集合,它們共享一些資源和權限,同時擁有私有資源,就跟家的形式差不多,你的兄弟姐妹(不同的用戶)屬於同一個家(用戶組),你們可以共同擁有這個家(共享資源),爸媽對待你們都一樣(共享權限),你偶爾寫寫日記,其他人未經允許不能查看(私有資源和權限)。當然一個用戶是可以屬於多個用戶組的,正如你既屬於家庭,又屬於學校或公司。

在 Linux 裏面如何知道自己屬於哪些用戶組呢?

方法一:使用 groups 命令

$ groups shiyanlou

其中冒號之前表示用戶,後面表示該用戶所屬的用戶組。這裏可以看到 shiyanlou 用戶屬於 shiyanlou 用戶組,每次新建用戶如果不指定用戶組的話,默認會自動創建一個與用戶名相同的用戶組(差不多就相當於家長的意思,或者說是老總)。默認情況下在 sudo 用戶組裏的可以使用 sudo 命令獲得 root 權限。shiyanlou 用戶也可以使用 sudo 命令,為什麽這裏沒有顯示在 sudo 用戶組裏呢?可以查看下 /etc/sudoers.d/shiyanlou 文件,我們在 /etc/sudoers.d 目錄下創建了這個文件,從而給 shiyanlou 用戶賦予了 sudo 權限:

方法二:查看 /etc/group 文件

$ cat /etc/group | sort

這裏 cat 命令用於讀取指定文件的內容並打印到終端輸出,後面會詳細講它的使用。 | sort 表示將讀取的文本進行一個字典排序再輸出,然後你將看到如下一堆輸出,你可以在最下面看到 shiyanlou 的用戶組信息:

技術分享圖片

沒找到,沒關系,你可以使用命令過濾掉一些你不想看到的結果:

$ cat /etc/group | grep -E "shiyanlou"
 
etc/group 文件格式說明

/etc/group 的內容包括用戶組(Group)、用戶組口令、GID 及該用戶組所包含的用戶(User),每個用戶組一條記錄。格式如下:

group_name:password:GID:user_list

你看到上面的 password 字段為一個 x 並不是說密碼就是它,只是表示密碼不可見而已。

將其它用戶加入 sudo 用戶組

默認情況下新創建的用戶是不具有 root 權限的,也不在 sudo 用戶組,可以讓其加入 sudo 用戶組從而獲取 root 權限:

$ su -l lilei
$ sudo ls

會提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用戶組中,至於 sudoers 文件(/etc/sudoers)你現在最好不要動它,操作不慎會導致比較麻煩的後果。

使用 usermod 命令可以為用戶添加用戶組,同樣使用該命令你必需有 root 權限,你可以直接使用 root 用戶為其它用戶添加用戶組,或者用其它已經在 sudo 用戶組的用戶使用 sudo 命令獲取權限來執行該命令。

這裏我用 shiyanlou 用戶執行 sudo 命令將 lilei 添加到 sudo 用戶組,讓它也可以使用 sudo 命令獲得 root 權限:

$ su shiyanlou # 此處需要輸入shiyanlou用戶密碼,點擊右側工具欄“SSH直連”,可以看到密碼。
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei

然後你再切換回 lilei 用戶,現在就可以使用 sudo 獲取 root 權限了。

刪除用戶是很簡單的事:

$ sudo deluser lilei --remove-home

三、Linux 文件權限

文件權限就是文件的訪問控制權限,即哪些用戶和組群可以訪問文件以及可以執行什麽樣的操作。

Unix/Linux系統是一個典型的多用戶系統,不同的用戶處於不同的地位,對文件和目錄有不同的訪問權限。為了保護系統的安全性,Unix/Linux系統除了對用戶權限作了嚴格的界定外,還在用戶身份認證、訪問控制、傳輸安全、文件讀寫權限等方面作了周密的控制。

在 Unix/Linux中的每一個文件或目錄都包含有訪問權限,這些訪問權限決定了誰能訪問和如何訪問這些文件和目錄。

技術分享圖片 3.1 查看文件權限

我們之前已經很多次用到 ls 命令了,如你所見,我們用它來列出並顯示當前目錄下的文件,當然這是在不帶任何參數的情況下,它能做的當然不止這麽多,現在我們就要用它來查看文件權限。

使用較長格式列出文件:

$ ls -l

技術分享圖片

你可能除了知道最後面那一項是文件名之外,其它項就不太清楚了,那麽到底是什麽意思呢:

技術分享圖片

可能你還是不太明白,比如第一項文件類型和權限那一堆東西具體指什麽,鏈接又是什麽,何為最後修改時間,下面一一道來:

技術分享圖片

  • 文件類型

關於文件類型,這裏有一點你必需時刻牢記 Linux 裏面一切皆文件,正因為這一點才有了設備文件( /dev 目錄下有各種設備文件,大都跟具體的硬件設備相關)這一說。 socket:網絡套接字,具體是什麽,感興趣的用戶可以自己去了解或期待實驗樓的後續相關課程。pipe 管道,這個東西很重要,我們以後將會討論到,這裏你先知道有它的存在即可。軟鏈接文件:鏈接文件是分為兩種的,另一種當然是“硬鏈接”(硬鏈接不常用,具體內容不作為本課程討論重點,而軟鏈接等同於 Windows 上的快捷方式,你記住這一點就夠了)。

  • 文件權限

讀權限,表示你可以使用 cat <file name> 之類的命令來讀取某個文件的內容;寫權限,表示你可以編輯和修改某個文件; 執行權限,通常指可以運行的二進制程序文件或者腳本文件,如同 Windows 上的 exe 後綴的文件,不過 Linux 上不是通過文件後綴名來區分文件的類型。你需要註意的一點是,一個目錄同時具有讀權限和執行權限才可以打開並查看內部文件,而一個目錄要有寫權限才允許在其中創建其它文件,這是因為目錄文件實際保存著該目錄裏面的文件的列表等信息。

所有者權限,這一點相信你應該明白了,至於所屬用戶組權限,是指你所在的用戶組中的所有其它用戶對於該文件的權限,比如,你有一個艾派德,那麽這個用戶組權限就決定了你的兄弟姐妹有沒有權限使用它破壞它和占有它。

  • 鏈接數

鏈接到該文件所在的 inode 結點的文件名數目(關於這個概念涉及到 Linux 文件系統的相關概念知識,不在本課程的討論範圍,感興趣的用戶可以自己去了解)。

  • 文件大小

以 inode 結點大小為單位來表示的文件大小,你可以給 ls 加上 -lh 參數來更直觀的查看文件的大小。

明白了文件權限的一些概念,我們順帶補充一下關於 ls 命令的一些其它常用的用法:

  • 顯示除了 .(當前目錄)和 ..(上一級目錄)之外的所有文件,包括隱藏文件(Linux 下以 . 開頭的文件為隱藏文件)。
$ ls -A

技術分享圖片

當然,你可以同時使用 -A-l 參數:

$ ls -Al

查看某一個目錄的完整屬性,而不是顯示目錄裏面的文件屬性:

$ ls -dl <目錄名>
  • 顯示所有文件大小,並以普通人類能看懂的方式呈現:
$ ls -AsSh

其中小 s 為顯示文件大小,大 S 為按文件大小排序,若需要知道如何按其它方式排序,請使用“man”命令查詢。

假設目前是 lilei 用戶登錄,新建一個文件,命名為 “ iphone6 ”:

$ touch iphone6

可見文件所有者是 lilei :

技術分享圖片

現在,換回到 shiyanlou 用戶身份,使用以下命令變更文件所有者為 shiyanlou :

$ cd /home/lilei
$ ls iphone6
$ sudo chown shiyanlou iphone6

現在查看,發現 文件所有者成功修改為 shiyanlou :

技術分享圖片

如果你有一個自己的文件不想被其他用戶讀、寫、執行,那麽就需要對文件的權限做修改,這裏有兩種方式:

  • 方式一:二進制數字表示

技術分享圖片

每個文件的三組權限(擁有者,所屬用戶組,其他用戶,記住這個順序是一定的)對應一個 " rwx ",也就是一個 “ 7 ” ,所以如果我要將文件“ iphone6 ”的權限改為只有我自己可以用那麽就這樣:

為了演示,我先在文件裏加點內容:

$ echo "echo \"hello shiyanlou\"" > iphone6

然後修改權限:

$ chmod 700 iphone6

現在,其他用戶已經不能讀這個“ iphone6 ”文件了:

技術分享圖片

  • 方式二:加減賦值操作

完成上述相同的效果,你可以:

$ chmod go-rw iphone6

技術分享圖片

go 還有 u 分別表示 group、others 和 user,+- 分別表示增加和去掉相應的權限。

adduseruseradd 的區別是什麽?

答:useradd 只創建用戶,創建完了用 passwd lilei 去設置新用戶的密碼。adduser 會創建用戶,創建目錄,創建密碼(提示你設置),做這一系列的操作。其實 useradd、userdel 這類操作更像是一種命令,執行完了就返回。而 adduser 更像是一種程序,需要你輸入、確定等一系列操作。

Linux 還有一些關於隱藏權限和特殊權限的內容,想全面了解 Linux 權限管理這部分內容的用戶可以通過其它方式學習。

linux——用戶及文件權限管理