Ubuntu/Linux用戶管理與權限管理(超詳細解析)

由于實驗室幾個老師的學生要共同使用一臺服務器,所以需要規范一下服務器的使用,并且給各位學生配置相關的用戶和權限,之前一直都是自己用,所以借此機會學習和總結一下Linux服務器的用戶管理與權限管理。

用戶與用戶組

根用戶——root用戶

在Ubuntu下,終端提示符里$表示普通管理員,#表示系統管理員(也就是root用戶),root用戶默認是沒有密碼的,啟用root用戶,就需要給root用戶設置密碼,命令如下:

$ sudo passwd root

系統會先驗證當前普通管理員的密碼,然后要求輸入兩次root用戶的密碼,之后就可以進入root用戶了,關于用戶和權限的管理,最好是在root用戶下操作。進入root用戶下的命令如下:

$ su root

輸入密碼后就進入root用戶了。

用戶組創建與刪除

很多時候在創建新用戶的時候,希望把一些用戶歸為一個組,以便后續的管理,例如我就打算把學生的賬號都放到StudentGroup里面去,在Ubuntu中,一個用戶是可以同時在幾個組里面的,會指定一個主要組。

  • 1.查看用戶所在組情況
    可以通過id命令查看當前用戶或通過id user1來查看用戶user1的用戶組情況,例如:
id user1
uid=1001(user1) gid=1001(userGroup) groups=1001(userGroup),4(adm),27(sudo)

上面的命令可以看到,id user1命令的結果為顯示用戶名及id(uid),顯示用戶所在主組(gid),顯示用戶所在的組列表(groups),這里例子中,用戶user1所在的主組為userGroup,同時也在adm,sudo用戶組中。

  • 2.創建用戶組
    創建用戶組的命令是groupadd,普通管理員需要加sudo來執行,root用戶不用。具體命令語法如下:
$ sudo groupadd [options] GroupName

其中的選項可以通過命令groupadd --help來查看,一般用的不多,就不細說了,需要的自己看。

  • 3.刪除用戶組
    刪除用戶組的命令語法如下:
$ sudo groupdel GroupName
  • 4.修改用戶組信息
    修改用戶組的命令語法如下:
$ sudo groupmod [options] GroupNameOld

其中的選項可以通過命令groupmod --help來查看,常用的主要是以下兩個:

-g NewID:為GroupNameOld用戶組指定新的組id
-n NewGroupName:為GroupNameOld用戶組指定新的組名稱

例如下面一條命令:

$ sudo groupmod -g 10001 -n group2 group1

即為將用戶組group1改名為group2,同時組id設置為10001。

  • 4.用戶組管理
    用戶組管理的命令是gpasswd,通常用來給用戶組添加或移除用戶,其基本語法如下:
gpasswd [option] GroupName

可以通過gpasswd --help來查看選項列表,其中常用的選項有:
-a:添加用戶到該用戶組,例如下面命令:

gpasswd -a user1 Group2 #將用戶user1添加到用戶組Group2中;

-d:從用戶組移除用戶,例如下面命令:

gpasswd -d user1 Group1 #將用戶user1從用戶組Group1中移除;

少部分Ubuntu發行版中沒有gpasswd命令,但是其功能可以用更為常用的usermod來完成(詳見下面的用戶管理)。

創建新用戶

創建新用戶可以用兩個命令,一個是adduser,一個是useradd,這兩個命令一個是通過系統提示配置密碼等信息由系統以默認目錄配置創建用戶(adduser,會把用戶主目錄建立在\home目錄下,僅配置密碼和一些用戶信息,其他的配置如權限用戶組等都是默認的);一個是用戶自己通過參數配置來添加用戶(useradd,可以自行輸入參數來確定用戶的主目錄、用戶組等配置)

為了避免搞混這兩個命令,我是這么記的:
(系統)添加用戶——System add user,add在前,user在后,由系統自動完成,system省略了,所以是adduser;
用戶添加(用戶)——User add user,用戶添加用戶,可以自定義參數配置,省略后面的users,所以是useradd。

  • 使用adduser
    在普通管理員權限下,需要加sudo來執行命令:
$ sudo adduser UserName

在root用戶下,可以不加sudo直接執行。
之后,系統會提示輸入并二次確認用戶名的密碼,設置完成后,會默認建立一個新的用戶組以及在\home目錄下創建新的用戶目錄\home\abc\。最后會要求為新用戶設置信息(全名、電話等),一路回車不用管這些都可以。

  • 使用useradd
    useradd命令的基本語法是:
useradd [options] UserName

可以使用useradd --help來查看系統給出的幫助文檔。常用的選項如下(注意嚴格區分大小寫):

-d DirPath:指定DirPath為新用戶的主目錄;
-m:不需要帶值,與-d合用,表示當上述DirPath目錄不存在時,創建目錄DirPath;
-g GroupName:指定新用戶主要所在的用戶組(指定的組不存在時會報錯,需要先創建用戶組;
-G GroupName1 GroupName2:指定新用戶所在的用戶組(可以列出多個);
-s ShellPath:指定用戶的登錄shell為文件ShellPath。

例如下面這一條命令:

useradd -d /media/StudentGroup/stu1/ -m -g StudentGroup -G adm,root stu1

創建用戶stu1,主用戶組為StudentGroup(需要提前創建好),同時也屬于用戶組adm和root,主目錄為/media/StudentGroup/stu1/。這樣創建好的用戶是沒有密碼的,可以在root用戶下給它設置密碼(passwd stu1命令,詳見后面的用戶修改部分)。
這里要注意一點,這樣操作的時候,需要先手動創建目錄/media/StudentGroup/或者確保這個目錄存在,因為這條命令中的創建目錄是不支持多級目錄同時創建的,好像mkdir這個命令也是?

修改用戶

1.配置相關
修改用戶的配置需要在root用戶下或者管理員權限,命令的基本語法如下:

usermod [options] UserName

具體的選項可以參考usermod --help,常用的選項和useradd類似,這里需要注意的有兩個:

  • 一個是-m選項,在修改用戶配置的時候,同樣需要和-d選項合用,此時的-m選項就不是創建用戶主目錄了,而是移動舊用戶主目錄的內容到-d所指定的新用戶主目錄中去。
  • 另一個是-G選項,如果要將用戶添加到一個或幾個組里去,-G后面的用戶組列表應當包含之前用戶所在的組列表和新的組列表,否則,用戶將從之前的組列表中移除,要查看用戶在哪些組里面,可以通過命令cat /etc/group | grep UserName查看(UserName是要查看的用戶名)。
    有時候用戶所在組比較多,只用-G選項會比較麻煩,需要把之前所在的組都列出來,這時候可以添加-a選項(append)和-G選項合用,表示附加一個組,用的時候如下列命令所示:
usermod -a -G newGroup user1 #將user1添加到newGroup組中,即向user1原有的組列表中添加newGroup

如果要在用戶的組列表中刪除一個,可以參考上面說的的用戶組管理命令gpasswd在組內刪除對應用戶組即可達到目的,同樣的也可以通過gpasswd達到一次或多次使用usermod -a -G的作用

2.口令相關
口令相關的修改命令基本語法如下:

passwd [options] UserName

如果只是當前用戶修改自己的口令,則可以只用passwd,如果是root用戶或者其他管理員用戶修改其他用戶的口令配置,則需要管理員權限sudo或者root用戶本身。跟上面的命令一樣,可以用passwd --help來查看選項詳情。常用的選項如下:

不使用任何選項:直接修改口令
-l:鎖定口令,即禁用用戶,用戶可以通過ssh登錄,但是不能修改口令
-u:解鎖口令,即解除禁用
-d:清除口令,使賬戶不需要密碼

3.切換組
有時候一個用戶同時屬于多個用戶組的時候,默認是會使用主用戶組的權限配置,如果需要切換當前用戶當前使用的用戶組,例如,用戶stu1同時在用戶組StudentGroup和adm中,默認是StudentGroup,在stu1下,使用如下命令可以切換到adm組中:

newgrp adm

與用戶賬號有關的系統文件(查看用戶/用戶組)

1. /etc/passwd——用戶賬戶文件
每個用戶都在文件/etc/passwd中有一個對應的記錄行,它記錄了這個用戶的一些基本屬性。這個文件對所有用戶可讀,查看命令為:

cat /etc/passwd

可以看到如下所示的輸出:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
stu1:x:1001:1001::/media/StudentGroup/stu1/:
stu2:x:1002:1001:I_love_this_test:/media/StudentGroup/stu2/:/bin/bash

可以看出,一行記錄對應著一個用戶,每行記錄又被冒號(:)分隔為7個字段,其格式和具體含義如下:
用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell

2. /etc/group——用戶組文件
每個用戶組會對應文件/etc/group中的一行記錄,查看方式如下:

cat /etc/group

此文件的格式也類似于/etc/passwd文件,由冒號(:)隔開若干個字段,這些字段有:
組名:口令:組標識號:組內用戶列表

**3. /etc/shadow
/etc/shadow中的記錄與/etc/passwd中的記錄一一對應,并且只有超級管理員才有權限查看,記錄著每個用戶更為隱私的信息。
它的文件格式與/etc/passwd類似,由若干個字段組成,字段之間用":"隔開。這些字段是:
登錄名:加密口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標志。

文件/目錄權限管理

在Linux系統中,一切皆文件,就是目錄(或文件夾)、文檔、程序等所有的都統一為文件,文件的權限控制包括讀、寫、執行三種,同時還有所屬權的概念。

查看權限

文件/目錄的權限查看命令為:ls -l,該命令會列出當前目錄下所有文件(包括子目錄)的詳情,結果如下圖所示:

在這里插入圖片描述

第一行是列出了當前目錄下所有文件數量(包括子目錄中所有文件),然后緊接著每一行都是當前目錄下的一個文件。每一行中各部分含義如下:

權限 incode 所屬用戶 所屬用戶組 文件大小 修改時間 名稱
drwxrwxrwx 0 user group 512 月日時間 name

其中第一個字段如drwxrwxrwxdrwxr-xr-x這種就表示該文件的權限,這個字段的值一共有10位字符,每一位的含義如下:

位置 含義 取值說明
第1位 是否為目錄 d表示該文件為目錄,-表示該文件不是目錄
2~4位 所屬用戶對該文件的權限 2,3,4位分別對應讀、寫、執行權限,如果對應位置為“-”符號表示不具備該權限,為對應字母r、w、x則表示具備該權限
5~7位 所屬用戶組對該文件的權限 5,6,7位分別對應讀、寫、執行權限,如果對應位置為“-”符號表示不具備該權限,為對應字母r、w、x則表示具備該權限
8~10位 其他用戶對該文件的權限 8,9,10位分別對應讀、寫、執行權限,如果對應位置為“-”符號表示不具備該權限,為對應字母r、w、x則表示具備該權限

舉個例子,如下圖所示結果:

-rwxr-xr-- 0 user1 Group1 512 May 23 14:23 AFile

這個結果表示的是文件AFile的信息,其權限為:

  • 文件屬于用戶user1,該用戶對該文件有讀、寫、執行權限;
  • 文件屬于用戶組Group1,該用戶組對AFile具有讀、執行權限,沒有寫權限(不能修改);
  • 其他用戶對文件AFile僅有只讀權限,沒有寫(修改)和執行權限。

注意:這里針對目錄(即文件夾),可執行權限表示能否進入該目錄,可讀權限代表能否查看該目錄內容。

修改/設置權限

修改權限的命令為chmod,基本語法如下:

chmod 權限操作 文件名

其中權限操作有兩種寫法:

  • 字符操作
    [用戶標識][操作符][權限內容]為語法規則,具體如下:
    • 用戶標識:
      • u——表示文件所屬用戶(user)
      • g——表示所屬用戶組(group)
      • o——表示其他用戶(other)
      • a——表示以上三個所有(all);
    • 操作符:
      • +——增加權限
      • -——刪除權限
      • =——將權限設置為;
    • 權限內容:(權限內容可以多項一起)
      • r——讀權限
      • ``w——寫權限
      • x——執行權限

舉幾個例子:(這里省略了可能需要的管理員權限,如果需要就在下列命令前加sudo
chmod u+w aFile:給aFile的所屬用戶增加對aFile的寫權限
chmod g-w aFile:使aFile的所屬用戶組對aFile不能寫
chmod a+rwx aFile:給所有用戶對aFile增加讀、寫、執行權限
chmod u=rw:將aFile的所屬用戶對aFile的權限設置為讀、寫(這里沒有x所以相當于rw-,即使修改之前所屬用戶有執行權限,執行該命令后執行權限會被刪除)。

  • 數值操作
    數值操作是一種更加簡便的用法,熟練用戶用的更多。其含義是把表示權限的九位(第一位表示是否為目錄的不算)視作9個二進制位(事實上系統正是這樣理解的),分別對應9個權限位,取值為1表示具備該權限,取值為0則表示不具備該權限。
    然后這9個二進制位中每三位可以轉化為一個八進制位,這樣,恰好可以將所屬用戶、所屬用戶組、其他用戶三類的權限分別用一個八進制數字來表示,對于每類用戶(每個八進制位)的每種獨立權限可表示如下:
    r--——100——4
    -w-——010——2
    --x——001——1
    ---——000——0
    然后各種組合權限如此類推,也可以簡單的計算為以上權限對應數值的加和,例如:
    rw-——110——6=4+2
    這種方法修改的時候需同時列出三類用戶的權限值,例如下列命令:
chmod 777 aFile

這條命令就是將aFile的權限修改為所有用戶對它具有所有權限。
再比如下面這條命令:

chmod 754 aFile

這條命令是將aFile權限設置為:所屬用戶對aFile具有全部權限,所屬用戶組有可讀可執行權限但不可寫,其他用戶僅有可讀權限。

修改文件所屬權

上面提到的文件權限的修改都是針對文件屬性中文件的擁有者(所屬用戶)以及所屬用戶組的,如果需要修改文件的所屬權(即擁有者用戶及所屬用戶組)則需要使用命令chown(change owner?),具體用法如下示例:

#遇到權限不足的情況自行添加sudo,沒sudo權限就聯系管理員吧
chown user1 aFile #修改aFile的所屬用戶為user1;
chown user1: aFile #修改aFile的所屬用戶為user1,所屬用戶組為user1所在的主組;
chown :Group1 aFile #修改aFile的所屬用戶組為Group1,所屬用戶不變;
chown user1:Group2 aFile #修改aFile的所屬用戶為user1,所屬用戶組為Group2;

以上就是Ubuntu中關于用戶和權限管理的基本用法,對于大多數用戶來講已經足夠了,也基本滿足了實驗室現在對Linux服務器的管理,當然還有更加高階一些的功能和用途,例如修改系統配置文件,修改系統默認的用戶組和管理權限以及多用戶登錄和環境變量切換這些,下次再專門整理關于多用戶遠程登錄的內容。

歡迎訪問博主的個人主頁——靜葉思的隨筆

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容