Linux賬號許可權管理

来源:https://www.cnblogs.com/SiceLc/archive/2019/10/10/11651418.html
-Advertisement-
Play Games

本篇文章主要講解Linux系統中賬號許可權的管理。希望對大家有所幫助 ...


用戶賬號和組賬號概述

用戶賬號

  • 超級用戶:root用戶是Linux 操作系統中預設的超級用戶賬號,對本主機擁有至高無上的許可權。
  • 普通用戶:需要管理員用戶創建,擁有的許可權受到一定限制,一般只在用戶自己的宿主目錄中擁有完整許可權。
  • 程式用戶:安裝 Linux 操作系統及部分應用程式時,會添加一些特定的低許可權用戶賬號,這些用戶一般不允許登錄到系統,而僅用於維持系統或某個程式的正常運行。

組賬號

  • 基本組:每一個用戶賬號至少屬於一個組,這個組稱為該用戶的基本組(或私有組)。
  • 附加組:若用戶除基本組外同時還包含在其他的組中,則這些組稱為該用戶的附加組(或公共組)

UIDGID

  • UIDLinux操作系統中的每一個用戶賬號都有一個數字形式的身份標記,稱為 UIDroot 用戶賬號的 UID 號為固定值0,而程式用戶賬號的 UID號預設為1~499500~60000UID 號預設分配給普通用戶使用。

  • GID:與 UID類似,每一個組賬號也有一個數字形式的身份標記,稱為 GIDGroup IDentity,組標識號)。root組賬號的GID號為固定值0,而程式組賬號的GID 號預設為1~499500~60000GID 號預設分配給普通組使用。

用戶賬戶管理

用戶賬戶文件

  • /etc/passwd:用於保存用戶名稱、宿主目錄、登錄 Shell 等基本信息。

  • /etc/shadow:者用於保存用戶的密碼、賬號有效期等信息。

    在這兩個配置文件中,每一行對應一個用戶賬號,不同的配置項之間使用“:”(冒號)進行分隔。

passwd文件中的配置行格式

  • passwd文件的每一行內容中包含了七個用“:”(冒號)分隔的配置欄位,每個配置欄位的含義如下:

    sun:x:1000:1000:sun:/home/sun:/bin/bash

欄位 含義
第1欄位:sun 用戶賬號的名稱
第2欄位:x 密碼占位符
第3欄位:1000 用戶賬號的UID
第4欄位:1000 所屬基本組賬號的 GID
第5欄位:sun 用戶全名
第6欄位:/home/sun 宿主目錄
第7欄位:/bin/bash 登錄 Shell等信息
  • shadow 文件的每一行內容中包含了九個用“:”(冒號)分隔的配置欄位,配置欄位的含義分別如下:

    sun:$6$ozmUzfeRN9m7...PWcx0:18117:0:99999:7:::

欄位 含義
第1欄位:sun 用戶賬號名稱
第2欄位:$6$ozmU...PWcx0 使用哈希演算法加密的密碼字串信息
第3欄位:18117 表示從 1970 年 01 月 01 日算起到最近一次修改密碼時間隔的天數
第4欄位:0 密碼的最短有效天數,預設值為0,表示不進行限制。
第5欄位:99999 密碼的最長有效天數
第6欄位:7 提前多少天警告用戶密碼將過期,預設值為7
第7欄位 在密碼過期之後多少天內禁用此用戶。
第8欄位 賬號失效時間,預設值為空,表示賬號永久可用。
第9欄位 保留欄位,目前沒有特定用途。

添加、修改、刪除用戶賬號

useradd 命令——添加用戶賬號

  • 命令格式

    useradd [選項]… 用戶名...

  • 常用選項

選項 含義
-u 指定用戶UID號。
-d 指定用戶宿主目錄位置。
-e 指定用戶的賬戶失效時間,可使用 YYYY-MM-DD的日期格式。
-g 指定用戶的基本組
-G 指定用戶的附加組
-M 不建立宿主目錄
-s 指定用戶的登錄shell/bin/bash可以登錄系統 ,/sbin/nologin 不可登錄系統
[root@localhost ~]# useradd -u 1008 -s /sbin/nologin siti
[root@localhost ~]# tail -3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
sun:x:1000:1000:sun:/home/sun:/bin/bash
siti:x:1008:1008::/home/siti:/sbin/nologin
//創建siti用戶,指定UID號1008,指定用戶無法登錄系統

passwd 命令——為用戶賬號設置密碼

  • 命令格式

    passwd [選項]… 用戶名...

  • 常用選項

選項 含義
-d 清空指定用戶的密碼
-l 鎖定用戶賬戶
-S 查看用戶賬戶狀態
-u 解鎖用戶賬戶
[root@localhost ~]# passwd siti                 //設置siti賬戶密碼
更改用戶 siti 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字元                   
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost ~]# passwd -l siti             //鎖定siti賬戶
鎖定用戶 siti 的密碼 。
passwd: 操作成功
[root@localhost ~]# passwd -S siti             //查看賬戶siti狀態
siti LK 2019-08-21 0 99999 7 -1 (密碼已被鎖定。)
[root@localhost ~]# passwd -u siti             //解鎖siti賬戶
解鎖用戶 siti 的密碼。
passwd: 操作成功
[root@localhost ~]# passwd -S siti            //查看賬戶siti狀態
siti PS 2019-08-21 0 99999 7 -1 (密碼已設置,使用 SHA512 演算法。)

usermod命令——修改用戶賬號屬性

  • 命令格式

    usermod [選項]… 用戶名...

  • 常用選項

選項 含義
-u 修改用戶UID
-d 修改用戶的宿主目錄位置
-e 修改用戶的賬戶失效時間,可使用YYYY-MM-DD的日期格式
-s 指定用戶的登錄shell
-l 更改用戶賬號的登錄名稱
-L 鎖定用戶賬戶
-U 解鎖用戶賬戶
[root@localhost ~]# usermod -l st11 siti            //更改siti賬戶名為st11
[root@localhost ~]# tail -2 /etc/passwd             //查看passwd文件後兩行信息
sun:x:1000:1000:sun:/home/sun:/bin/bash
st11:x:1008:1008::/home/siti:/sbin/nologin          //賬戶名已更改
[root@localhost ~]# usermod -L st11                 //鎖定st11用戶
[root@localhost ~]# passwd -S st11                  //查看st11用戶狀態
st11 LK 2019-08-21 0 99999 7 -1 (密碼已被鎖定。)
[root@localhost ~]# usermod -U st11                 //解鎖st11用戶
[root@localhost ~]# passwd -S st11                  //查看st11用戶狀態
st11 PS 2019-08-21 0 99999 7 -1 (密碼已設置,使用 SHA512 演算法。)
[root@localhost ~]# usermod -s /bin/bash st11       //設置st11可以登錄系統
[root@localhost ~]# tail -2 /etc/passwd             //查看passwd文件後兩行信息
sun:x:1000:1000:sun:/home/sun:/bin/bash
st11:x:1008:1008::/home/siti:/bin/bash              //shell登錄已更改

userdel命令——刪除用戶賬號

  • 命令格式

    userdel [選項]… 用戶名...

  • 常用選項

選項 含義
-r 遞歸刪除(同時刪除宿主目錄)
[root@localhost ~]# userdel -r st11              //刪除st11用戶,同時刪除宿主目錄
[root@localhost ~]# tail -2 /etc/passwd          //查看passwd文件後兩行信息
tcpdump:x:72:72::/:/sbin/nologin
sun:x:1000:1000:sun:/home/sun:/bin/bash          //st11用戶已刪除

組賬號管理

組賬號文件

  • /etc/group:用於保存組賬號名稱、 GID 號、組成員等基本信息。

  • /etc/gshadow: 用於保存組賬號的加密密碼字串等信息(但是很少使用到)。

    某一個組賬號包含哪些用戶成員,將會在 group文件內最後一個欄位中體現出來(基本組對應的用戶賬號預設可能不會列出),多個組成員之間使用“,”(逗號)分隔。

添加、管理、刪除組賬號

groupadd命令——添加組賬號

  • 命令格式

    groupadd 要添加的組名稱

[root@localhost ~]# groupadd caiwu                 //創建caiwu組
[root@localhost ~]# tail -3 /etc/group             //查看group文件後兩行信息
sun:x:1000:
siti:x:1008:
caiwu:x:1009:                                      //創建的caiwu組

gpasswd 命令——添加、設置、刪除組成員

  • 命令格式

    gpasswd [選項] [用戶名] [組名稱]

  • 常用選項

選項 含義
-a 向組內添加一個用戶
-d 從組內刪除一個用戶成員
-M 定義組成員列表,以逗號分隔(註意:當組內有已經有成員時,用此選項將覆蓋原組內成員)
[root@localhost ~]# gpasswd -a st11 caiwu         //將st11加入caiwu組
正在將用戶“st11”加入到“caiwu”組中
[root@localhost ~]# tail -5 /etc/group            //查看group文件後5行信息
sun:x:1000:
caiwu:x:1009:st11                                 //st11成功加入caiwu組
siti:x:1001:
si22:x:1002:
st11:x:1003:
[root@localhost ~]# gpasswd -d st11 caiwu         //將st11從caiwu組中刪除
正在將用戶“st11”從“caiwu”組中刪除
[root@localhost ~]# tail -5 /etc/group            //查看group文件後5行信息
sun:x:1000:
caiwu:x:1009:                                     //st11從caiwu組中刪除
siti:x:1001:
si22:x:1002:
st11:x:1003:
[root@localhost ~]# gpasswd -M st11,si22,siti caiwu  //將st11,si22,siti添加進caiwu組
[root@localhost ~]# tail -5 /etc/group               //查看group文件後5行信息
sun:x:1000:
caiwu:x:1009:st11,si22,siti                          //st11,si22,siti成功加入caiwu組
siti:x:1001:
si22:x:1002:        
st11:x:1003:

groupdel命令——刪除組賬號

  • 命令格式

    groupdel 組名稱

[root@localhost ~]# groupdel caiwu                  //刪除caiwu組
[root@localhost ~]# tail -5 /etc/group              //查看group文件後5行信息
tcpdump:x:72:
sun:x:1000:
siti:x:1001:
si22:x:1002:
st11:x:1003:                                       //caiwu組已刪除

查詢賬戶信息

groups 命令——查詢用戶賬號所屬的組

  • 命令格式

    groups 用戶名稱(當不填寫用戶名稱時預設當前用戶)

[root@localhost ~]# groups                //預設查看當前賬戶所屬組
root
[root@localhost ~]# groups sun            //查看sun賬戶所屬組
sun : sun wheel

id——查詢用戶賬號的身份標識

  • 命令格式

    id 用戶名稱(當不填寫用戶名稱時預設當前用戶)

[root@localhost ~]# id                   //預設查看當前用戶身份標識
uid=0(root) gid=0(root) 組=0(root) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# id sun               //查看sun用戶身份標識
uid=1000(sun) gid=1000(sun) 組=1000(sun),10(wheel)

finger命令——查詢用戶賬號的登錄屬性

  • 命令格式

    finger 用戶名稱(當不填寫用戶名稱時預設當前用戶)

[root@localhost ~]# finger               //預設查看當前賬戶登錄屬性
Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
root      root       pts/0          Aug 21 21:58                           (192.168.144.1)
[root@localhost ~]# finger sun           //查看sun賬戶登錄屬性
Login: sun                      Name: sun
Directory: /home/sun                    Shell: /bin/bash
Last login 五 8月  9 12:19 (CST) on :1
No mail.
No Plan.

w、who、users 命令——查詢當前主機的用戶登錄情況

  • 命令格式

    w 用戶名稱(當不填寫用戶名稱時預設當前用戶)

[root@localhost ~]# w                       //預設查看當前賬戶登錄情況
 00:11:19 up  2:13,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.144.1    21:58    7.00s  0.36s  0.02s w
[root@localhost ~]# who                    //預設查看當前賬戶登錄情況
root     pts/0        2019-08-21 21:58 (192.168.144.1)
[root@localhost ~]# users                  //預設查看當前賬戶登錄情況
root
[root@localhost ~]# w sun                  //查看sun賬戶登錄情況
 00:11:52 up  2:14,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

文件/目錄的許可權和歸屬

訪問許可權

  • 讀取r:允許查看文件內容、顯示目錄列表
  • 寫入w:允許修改文件內容,允許在目錄中新建、移動、刪除文件或子目錄
  • 可執行x:允許運行程式、切換目錄

歸屬

  • 屬主:擁有該文件或目錄的用戶帳號
  • 屬組:擁有該文件或目錄的組帳號

查看文件/目錄的許可權和歸屬

  • 使用帶“-l”選項的 ls命令時,將以長格式顯示文件或目錄的詳細信息,其中包括該文件的許可權和歸屬等參數。
[root@localhost ~]# ls -l /etc/passwd                    //以長格式查看passwd文件
-rw-r--r--. 1 root root 2218 8月  21 23:27 /etc/passwd   //顯示文件信息
  • 在上述輸出信息中,第 34欄位的數據分別表示該文件(或目錄)的屬主、屬組,上例中/etc/passwd文件屬於root用戶、root組;而第 1 欄位的數據表示該文件(或目錄)的訪問許可權,如-rw-r--r--。許可權欄位由四部分組成,各自的含義如下:
欄位 含義
第1字元 表示該文件的類型,d目錄、c字元設備文件、 -普通文件、字母l鏈接文件等。
第2~4個字元 表示該文件的屬主用戶對該文件的訪問許可權。
第5~7個字元 表示該文件的屬組內各成員用戶對該文件的訪問許可權。
第8~10個字元 表示其他任何用戶對該文件的訪問許可權。
第11個字元 這裡的.SELinux 有關,目前不必關註。

許可權的數字標識形式

chmod命令——設置文件或目錄的許可權

  • 命令格式

    chmod [ugoa] [+-=] [rwx] 文件或目錄...

    chmod nnn 文件或目錄...

  • [ugoa…][+-=][rwx]的形式中,三個組成部分的含義及用法如下:

    ugoa表示該許可權設置所針對的用戶類別。u代表文件屬主,g代表文件屬組內的用戶, o代表其他任何用戶, a代表所有用戶(ugo 的總和)。

    +-=表示設置許可權的操作動作。 +代表增加相應許可權, -代表減少相應許可權,=代表僅設置對應的許可權。

    rwx是許可權的字元組合形式,也可以拆分使用,如rrx

  • nnn為需要設置的具體許可權值,如755644

[root@localhost opt]# ls -l siti.txt                    //以長格式查看siti.txt文件信息
-rw-r--r--. 1 root root 0 8月  22 01:19 siti.txt        
[root@localhost opt]# chmod guo+x siti.txt              //設置文件所有用戶可執行許可權
[root@localhost opt]# ls -l siti.txt                    //以長格式查看siti.txt文件信息
-rwxr-xr-x. 1 root root 0 8月  22 01:19 siti.txt        //文件成功添加多有用戶可只執行許可權
[root@localhost opt]# chmod 666 siti.txt                //設置文件所有用戶可讀、可寫許可權
[root@localhost opt]# ls -l siti.txt                    //以長格式查看siti.txt文件信息
-rw-rw-rw-. 1 root root 0 8月  22 01:19 siti.txt         //文件成功設置許可權

umask應用

  • umask 就是預設指定目前用戶在新建文件或目錄是的許可權預設值。執行umask 022即可以設置當前用戶的預設許可權。直接執行umask命令就是查看當前系統的預設許可權。需要註意的是,umask的分數指的是“該預設值需要減掉的許可權”,如果執行umask 022代表 groupother被拿掉了許可權2,也就是被拿掉了“寫”許可權。如果執行命令umask 000,代表文件的預設許可權是777
[root@localhost opt]# umask 000                   
[root@localhost opt]# mkdir sisi
[root@localhost opt]# ls -ld sisi
drwxrwxrwx. 2 root root 6 8月  22 01:42 sisi
[root@localhost opt]# umask 022
[root@localhost opt]# mkdir sisi2
[root@localhost opt]# ls -ld sisi2
drwxr-xr-x. 2 root root 6 8月  22 01:44 sisi2

chown命令——設置目錄和文件的歸屬

  • 命令格式

    chown 屬主[:[屬組]] 文件或目錄...

  • 常用選項

選項 含義
-R 遞歸刪除(同時刪除宿主目錄)
[root@localhost opt]# chown -R sun sisi2          //更改sisi2目錄屬主為sun
[root@localhost opt]# ls -ld sisi2                //以長格式友好查看sisi2目錄信息
drwxr-xr-x. 2 sun root 6 8月  22 01:44 sisi2      //sisi2目錄屬主成功更改
[root@localhost opt]# chown -R :sun sisi2         //更改sisi2目錄屬組為sun
[root@localhost opt]# ls -ld sisi2                //以長格式友好查看sisi2目錄信息
drwxr-xr-x. 2 sun sun 6 8月  22 01:44 sisi2       //sisi2目錄屬組成功更改
[root@localhost opt]# chown -R root:root sisi2    //更改sisi2目錄屬主、屬組為root
[root@localhost opt]# ls -ld sisi2                //以長格式友好查看sisi2目錄信息
drwxr-xr-x. 2 root root 6 8月  22 01:44 sisi2     //成功更改sisi2目錄屬主、屬組信息

補充內容

  • 用戶賬號的初始配置文件

    添加新的用戶賬號後useradd命令會在用戶的宿主目錄中建立一些初始配置文件。這些文件來自於賬號模板目錄/etc/skel/,基本上都是隱藏文件,較常用的初始配置文件包括.bash_logout.bash_profile.bashrc。其中.bash_profile”文件中的命令將在該用戶每次登錄時被執行;; .bashrc文件中的命令會在每次載入/bin/Bash程式(當然也包括登錄系統)時執行;而.bash_logout文件中的命令將在用戶每次退出登錄時執行。理解這些文件的作用,可以方便我們安排一些自動運行的後臺管理任務。

    .bashrc等文件中,可以添加用戶自己設置的可執行語句(如 Linux命令行、腳本控制語句等),以便自動完成相應的任務。如果希望為所有用戶添加登錄後自動運行的命令程式、自動設置變數等,可以直接修改/etc目錄下的類似文件,如/etc/bashrc文件、/etc/profile文件。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制項,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr ...
  • ABP進階教程 本教程主要講解如何基於ABP實現條件查詢/分頁/排序/導出等功能。 源碼已分享: GitHub Gitee ABP進階教程0 - 目錄 ABP進階教程1 - 條件查詢 ABP進階教程2 - 分頁 ABP進階教程3 - 排序 ABP進階教程4 - 導出 ...
  • 簡介請看這裡https://www.cnblogs.com/ch00486259/p/11383686.html 前言 經過一段時間的優化,Socean.RPC的性能又提高了一些,不過這差不多是socketAPM模型的極限了,已經很難再提升了。本框架僅僅2000多行代碼,無第三方框架引用,在普通PC ...
  • 將C#對SQLserver常用的操作進行封裝,方便後續開發使用! ...
  • Parallel.ForEach相對於foreach是多線程,並行操作;foreach是單線程品德操作。 ...
  • 前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制項,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr ...
  • 前言 在C#調用OpenCV其實非常簡單,因為C#中有很多OPenCV的開源類庫。 本文主要介紹在WPF項目中使用OpenCVSharp3-AnyCPU開源類庫處理圖片,下麵我們先來做開發前的準備工作。 準備工作 首先,我們先創建一個WPF項目。 然後,在Nuget上搜索OpenCVSharp,如下 ...
  • 前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制項,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...