用戶及權限管理

 今天是學習馬哥教育第四天,也是第一個博客作業,寫一篇關于用戶及權限管理的簡介型的博客文章,作文水品有限,所以寫出來有可能有病句或者意境有問題,請大家多多包涵。

 首先,用戶及權限管理,需要從2方面入手來說,首先來說用戶管理。

 何謂用戶,這是馬哥一上來就提到的問題,我簡單的理解,用戶其實就是一個人機交互的接口,人機交互的接口是shell ,但是登錄shell的時候都需要有用戶名和密碼登錄,否則系統是不會允許用戶登錄的,這一點和windows 不太一樣,在windows中,是允許空密碼登錄的,這一點Linux 比 Windows 安全,Linux 是不允許空密碼登錄的。那么我們怎樣去理解用戶這個概念呢,在人的角度上來說,我們每一個人都是一個用戶,我們去銀行辦卡,那個賬戶其實就是用戶,人類識別用戶很簡單,就是用戶名,也就是字符串來識別,我們每個人的銀行賬戶都是唯一的,都只代表了你一個人,不能代表其他人,當然,你可以辦很多的卡,但是每一個賬戶都是唯一的。對于計算機來說,它識別的最簡單的就是二進制,所以說,計算機識別的用戶是用戶的ID號,我們叫做UID,那么當我們登錄賬號和密碼的時候,在計算機中這個過程是怎樣的呢?首先當我們輸入完賬號和密碼之后,計算機會先找到/etc/passwd 其實這個文件就是一個簡單的數據庫文件,請看下面截圖:

 

        root:x:0:0:root:/root:/bin/bash

        bin:x:1:1:bin:/bin:/sbin/nologin

        daemon:x:2:2:daemon:/sbin:/sbin/nologin

        adm:x:3:4:adm:/var/adm:/sbin/nologin

        lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

        sync:x:5:0:sync:/sbin:/bin/sync

        shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

        halt:x:7:0:halt:/sbin:/sbin/halt

        mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

        operator:x:11:0:operator:/root:/sbin/nologin

        games:x:12:100:games:/usr/games:/sbin/nologin

        ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

        nobody:x:99:99:Nobody:/:/sbin/nologin

        avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

        systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin

        systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin

        dbus:x:81:81:System message bus:/:/sbin/nologin

        polkitd:x:997:995:User for polkitd:/:/sbin/nologin

        tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

        postfix:x:89:89::/var/spool/postfix:/sbin/nologin

        sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

        test:x:1000:1000::/home/test:/bin/bash

(圖1)

 這個文件中的每一行可以看成是一條記錄,每一列其實使用:分割開了,就像是一個數據庫的二維表一樣,可以通過類似的查詢語句找到我們登錄的用戶名是否存在,如果不存在,系統會報出這樣一個錯誤:blob.png,意思是登錄不正確。

 然后我們再看密碼驗證機制,其實密碼驗證機制還需要進一步的展開說明。

 提到密碼,我們先來看一下密碼使用策略原則,必須滿足以下幾點

  1、使用隨機密碼

  2、最短長度不要低于8位

  3、應該使用大寫字母、小寫字母、數字和標點符號4類字符中最少3類做為密碼

  4、密碼需要定期更換

 然后我們來講一下加密算法,打個比方來說,如果在計算機上設置好密碼之后,就把密碼明文存放在計算機的文件中或者是數據庫中的話,這樣是非常不安全的,因為如果其他的用戶登錄系統,如果具有高級管理員權限的話,就會造成密碼泄露,所以我們需要使用加密算法來加密保存用戶設置的密碼?,F在的加密算法主要分為以下3類

 1、對稱加密 加密和解密使用同一個密碼,速度快,但是不安全

 2、非對稱加密 加密和解密使用一對密鑰,密鑰分公鑰和私鑰,這樣比較安全,但是速度太慢,非對稱加密所用的時間是對稱加密的3個數量級

 3、單向加密 只能加密不能解密,提取數據指紋(特征碼) 

   單向加密的特點是定長輸出,什么是定長輸出呢,就是說8位的密碼。20位的密碼,都會被當作加密內容定長加密,密文的長度都是一樣的

   單向加密的特點還有就是雪崩效應或者說是蝴蝶效應,也就是說,你更改了密碼或者是文件當中的一小部分內容,那么密文的結果將會是翻天覆地的變化

   linux 主要用到的單向加密分以下6種 

                        1、md5 message digest 5是版本號,是128位定長

                   2、sha secure hash algorithm 安全的哈希加密算法 160位定長

                    3、sha224

                    4、sha256

                        5、sha384

                        6、sha512

   不論是用哪一種加密算法加密出的密文,在加密之前都需要加上隨機數(salt)之后再加密,這是因為如果用戶能打開/etc/shadow 看到和自己一樣的密文,就能猜出其他用戶的密碼

   這里我們提到了用戶的密碼存放位置 /etc/shadow 這個文件,其實用戶登錄的時候內核在驗證完/etc/passwd 之后,如果用戶名存在,那么就需要把你剛剛輸入的用戶名提取出來,到/etc/shadow 這個文件中去比對,請看下面的截圖:

   

        root:$6$r2KRPIf/llqwEcCt$jW8yjiWYaEKqMEGuWctlOeqrM9yb6bSSBU57wcwWcpeMTbJNBrPExBYXFi1fkCWkU8pdOfuh51m/SuP5VFQ4r/::0:99999:7:::

        bin:*:16659:0:99999:7:::

        daemon:*:16659:0:99999:7:::

        adm:*:16659:0:99999:7:::

        lp:*:16659:0:99999:7:::

        sync:*:16659:0:99999:7:::

        shutdown:*:16659:0:99999:7:::

        halt:*:16659:0:99999:7:::

        mail:*:16659:0:99999:7:::

        operator:*:16659:0:99999:7:::

        games:*:16659:0:99999:7:::

        ftp:*:16659:0:99999:7:::

        nobody:*:16659:0:99999:7:::

        avahi-autoipd:!!:17036::::::

        systemd-bus-proxy:!!:17036::::::

        systemd-network:!!:17036::::::

        dbus:!!:17036::::::

        polkitd:!!:17036::::::

        tss:!!:17036::::::

        postfix:!!:17036::::::

        sshd:!!:17036::::::

        test:$6$EgCCFvGO$.DVY878bWmEQdd/arosOmsFy/N1sPHLJ9ALGNxS4.ZLmlQ5bOPgexwEWsz/heVw6BseQJsxNh4oMdNrVu3.p/0:17041:0:99999:7:::

(圖2)

  從這個文件中先查找出用戶名所對應的密碼。然后找到這個密碼的隨機數(salt)然后把隨機數和你剛剛輸入的密碼添加到一起做單項加密,把加密后的結果和這個文件中所對應的記錄的密碼做比對,如果正確,那么就允許用戶登錄,如果錯誤,就報錯

  說了這么多,其實就是解釋了一個用戶登錄shell或者說使用linux系統的一個簡單的過程而已,下面來講一下linux是怎樣對用戶進行管理的。

  首先,我們明白一個道理 就是linux系統的用戶管理有這樣一個映射關系

      用戶——–用戶組(角色)———-權限

         多對多         多對多

 我們每一個用戶都是一個獨立的個體,所以我們每一個用戶都有自己獨立的權限,但是有時候有這樣或者那樣的需求,比如說我們想讓tom和jerry具有相同的訪問某一個目錄的權限,如果不使用用戶組(角色)的話,我們需要分別給tom 設置好權限,在給jerry設置好權限,但是如果有用戶組的概念的話,我們可以讓tom 和jerry所屬為同一個用戶組,我們給這個用戶組某種權限,這樣tom和jerry就具有了相同的權限,這樣就可以方便的去訪問相應的目錄了,所以說,用戶組(角色)的作用就是方便我們管理不同用戶的相同的權限。

 我們來單獨看用戶的管理,linux中把用戶分為管理員用戶和普通用戶,普通用戶又可以分為系統用戶和登錄用戶,用一個圖這樣表示:

  •  管理員用戶 root UID 0

   普通用戶 UID 1-60000

      系統用戶 非登錄用戶 對于CentOS7 1-999 CentOS6 1-499

       登錄用戶 CentOS7 1000-60000 CentOS6 500-60000

 然后我們來說用戶組,用戶組我們可以理解成程序的角色,也就是用戶的容器,用戶組如果從靜態的角度來分,和上面的用戶分類是一樣的

 組類別劃分1 

   管理員用戶組 root UID 0 

   普通用戶組 UID 1-60000

      系統用戶組 非登錄用戶 對于CentOS7 1-999 CentOS6 1-499

       登錄用戶組 CentOS7 1000-60000 CentOS6 500-60000

 組類別劃分2

   用戶的主組,基本組

   用戶的附加組

 組類別劃分3

   用戶的私有組 組名同用戶名且包含一個用戶

   用戶的公共組 組內可以包含多個用戶

 說完上述2個概念之后,我們來詳細說明/etc/passwd 中的內容,我們可以使用man 5 passwd 命令來查詢passwd中的詳細信息

 

     /etc/passwd:用戶的信息庫文件(圖1)

     name:password:UID:GID:GECOS:directory:shell

     UID:用戶ID

     GID:用戶所屬的主組的ID號

     GECOS:用戶的注釋信息

     directory:用戶的家目錄

     shell:用戶的默認shell

      /etc/shadow:用戶密碼文件(圖2)

      用戶名:加密的密碼:最近一次修改密碼的時間:密碼的最短使用期限:密碼的最長使用期限:密碼警告期限:賬戶過期期限:保留字段

      用一幅圖來描述一下各個期限的范圍

      blob.png

    /etc/group 組信息庫 

    group_name:password:GID:user_list

    user_list 改組的用戶成員:以此組為附加組的用戶列表

 下面具體的講解Linux用戶和組管理的各種命令

 1、groupadd命令 創建組命令

   groupadd [選項] group

   有2個選項,一個是

   -g GID 手動指定GID 默認如果不指定的話,是上一個組的GID號加1

   -r 創建系統組

   介紹一下安全上下文的概念,任何一個進程,都要以發起者的身份運行

   比如說,進程訪問文件時,對文件的訪問權限,取決于發起此進程的用戶的權限。

   例如:cat /etc/shadow 如果以管理員的身份運行這個命令的時候,那么訪問這個文件的權限就要以管理員的身份進行訪問,也就是先要查詢這個文件的屬主 屬組 和其他權限是什么,如果說這個文件的屬主和發起進程,(運行命令)的用戶一樣,那么就執行屬主的權限,如果沒有,那么就要看文件的屬組中有沒有進程發起者這個用戶,如果有,就執行屬組權限,否則最后就執行其他權限。

  至于說系統用戶,就是為了能夠讓那些后臺進程或服務類進程以非管理員的身份運行,通常需要為此任務創建多個普通用戶,這類用戶不用登陸系統,這類用戶就叫做系統用戶。

 2、刪除組命令 groupdel 命令

   groupdel [選項] GROUP

 3、修改組屬性命令 groupmod 命令

   groupmod [選項] GROUP

   -g GID :修改GID 原組名

   -n new_name 原組名 

 4、useradd命令:創建用戶

   useradd [選項] 登錄名

-u, –uid UID:指定UID;

-g, –gid GROUP:指定基本組ID,此組得事先存在;

-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:指明用戶所屬的附加組,多個組之間用逗號分隔;

-c, –comment COMMENT:指明注釋信息;

-d, –home HOME_DIR:以指定的路徑為用戶的家目錄;通過復制/etc/skel此目錄并重命名實現;指定的家目錄路徑如果事先存在,則不會為用戶復制環境配置文件;

-s, –shell SHELL:指定用戶的默認shell,可用的所有shell列表存儲在/etc/shells文件中;

-r, –system:創建系統用戶;

   注意:創建用戶時的諸多默認設定配置文件為/etc/login.defs

   useradd -D:顯示創建用戶的默認配置;

   useradd -D 選項: 修改默認選項的值;

   修改的結果保存于/etc/default/useradd文件中;

 5、usermod命令:修改用戶屬性

   usermod [選項] 登錄

-u, –uid UID:修改用戶的ID為此處指定的新UID;

-g, –gid GROUP:修改用戶所屬的基本組;

-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:修改用戶所屬的附加組;原來的附加組會被覆蓋;

-a, –append:與-G一同使用,用于為用戶追加新的附加組;

-c, –comment COMMENT:修改注釋信息;

-d, –home HOME_DIR:修改用戶的家目錄;用戶原有的文件不會被轉移至新位置;

-m, –move-home:只能與-d選項一同使用,用于將原來的家目錄移動為新的家目錄;

-l, –login NEW_LOGIN:修改用戶名;

-s, –shell SHELL:修改用戶的默認shell;

            -L, –lock:鎖定用戶密碼;即在用戶原來的密碼字符串之前添加一個"!";

-U, –unlock:解鎖用戶的密碼;

 6、userdel命令:刪除用戶

   userdel [選項] 登錄

-r:刪除用戶時一并刪除其家目錄;

 7、passwd命令:

passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]

(1) passwd:修改用戶自己的密碼;

(2) passwd USERNAME:修改指定用戶的密碼,但僅root有此權限;

-l, -u:鎖定和解鎖用戶;

-d:清除用戶密碼串;

-e DATE: 用戶賬戶過期期限,日期;

-i DAYS:非活動期限,寬限期;

-n DAYS:密碼的最短使用期限;

-x DAYS:密碼的最長使用期限;

-w DAYS:警告期限;

            不懂去看那副圖

–stdin:

echo "PASSWORD" | passwd –stdin USERNAME

 8、gpasswd命令:

    組密碼文件:/etc/gshadow

    gpasswd [選項] group

-a USERNAME:向組中添加用戶

-d USERNAME:從組中移除用戶

 9、newgrp命令:臨時切換指定的組為基本組;

   newgrp [-] [group]

   -: 會模擬用戶重新登錄以實現重新初始化其工作環境;

 10、chage命令:更改用戶密碼過期信息

   chage [選項] 登錄名

             -d:–lastday 修改最近一次修改密碼的時間 是距離1970.1.1的Days天數

-E:–expiredate EXPIRE_DATE 賬戶過期日期 EXPIRE_DATE 設置為 -1 會移除賬戶的過期日期。

-W:–warndays WARN_DAYS 警告日期天數

-m:–mindays MIN_DAYS 密碼最小使用的天數 在密碼更改之間的最小天數設置為 MIN_DAYS。此字段中的 0 值表示用戶可以在任何時間更改其密碼。

-M:–maxdays MAX_DAYS 密碼最大最長使用的天數 MAX_DAYS 設置為 -1 會移除密碼有效性檢查。

 11、id命令:顯示用戶的真和有效ID; 

   id [OPTION]… [USER]

-u: 僅顯示有效的UID;

-g: 僅顯示用戶的基本組ID; 

-G:僅顯示用戶所屬的所有組的ID;

-n: 顯示名字而非ID;

 12、su命令:switch user

        登錄式切換:會通過讀取目標用戶的配置文件來重新初始化

su – USERNAME

su -l USERNAME

非登錄式切換:不會讀取目標用戶的配置文件進行初始化

su USERNAME

        注意:管理員可無密碼切換至其它任何用戶;

        -c 'COMMAND':僅以指定用戶的身份運行此處指定的命令;

  其他需要了解的命令:

  其它幾個命令:chsh, chfn, finger, whoami, pwck, grpck

 

權限管理:

ls -l 

rwxrwxrwx:

左三位:定義user(owner)的權限

中三位:定義group的權限;

右三位:定義other的權限

進程安全上下文:

進程對文件的訪問權限應用模型:

進程的屬主與文件的屬主是否相同;如果相同,則應用屬主權限;

否則,則檢查進程的屬主是否屬于文件的屬組;如果是,則應用屬組權限;

否則,就只能應用other的權限;

權限:

r:readable, 讀

w:writable, 寫

x:excutable,執行

文件:

r:可獲取文件的數據;

w: 可修改文件的數據;

x:可將此文件運行為進程;

目錄:

r:可使用ls命令獲取其下的所有文件列表;

w: 可修改此目錄下的文件列表;即創建或刪除文件;

x: 可cd至此目錄中,且可使用ls -l來獲取所有文件的詳細屬性信息;

mode:rwxrwxrwx

ownership:user, group

權限組合機制:

— 000 0

–x 001 1

-w- 010 2

-wx 011 3

r– 100 4

r-x 101 5

rw- 110 6

rwx 111 7

練習:rw-rw-r–, rwxrwxr-x, rwxr-x—, rw——, rwxr-xr-x

 664, 640, 600, 775, 750, 755

權限管理命令:

chmod命令:

      chmod [OPTION]… MODE[,MODE]… FILE…

      chmod [OPTION]… OCTAL-MODE FILE…

      chmod [OPTION]… –reference=RFILE FILE…

      三類用戶:

      u:屬主

      g:屬組

      o:其它

      a: 所有

      (1) chmod [OPTION]… MODE[,MODE]… FILE…

      MODE表示法:

      賦權表示法:直接操作一類用戶的所有權限位rwx;

      u=

      g=

      o=

      a=

      授權表示法:直接操作一類用戶的一個權限位r,w,x;

      u+, u-

      g+, g-

      o+, o-

      a+, a-

      (2) chmod [OPTION]… OCTAL-MODE FILE…

      (3) chmod [OPTION]… –reference=RFILE FILE…

      選項:

      -R, –recursive:遞歸修改

      注意:用戶僅能修改屬主為自己的那些文件的權限;

從屬關系管理命令:chown, chgrp

chown命令:

chown [OPTION]… [OWNER][:[GROUP]] FILE…

        chown [OPTION]… –reference=RFILE FILE…

        選項:

        -R:遞歸修改

        chgrp命令:

        chgrp [OPTION]… GROUP FILE…

        chgrp [OPTION]… –reference=RFILE FILE…

        注意:僅管理員可修改文件的屬主和屬組;

        思考:用戶對目錄有寫權限,但對目錄下的文件沒有寫權限時,能否修改此文件內容?能否刪除此文件?

        模擬之;

        umask:文件的權限反向掩碼,遮罩碼;

        文件:

        666-umask

        目錄:

        777-umask

        注意:之所以文件用666去減,表示文件默認不能擁有執行權限;如果減得的結果中有執行權限,則需要將其加1;

        umask: 023

        666-023=644

        777-023=754

        umask命令:

        umask:查看當前umask

        umask MASK: 設置umask

        注意:此類設定僅對當前shell進程有效;

        練習:完成以下任務

        1、新建系統組mariadb, 新建系統用戶mariadb, 屬于mariadb組,要求其沒有家目錄,且shell為/sbin/nologin;嘗試root切換至用戶,查看其命令提示符;

        2、新建GID為5000的組mageedu,新建用戶gentoo,要求其家目錄為/users/gentoo,密碼同用戶名;

        3、新建用戶fedora,其家目錄為/users/fedora,密碼同用戶名;

        4、新建用戶www, 其家目錄為/users/www;刪除www用戶,但保留其家目錄;

        5、為用戶gentoo和fedora新增附加組mageedu; 

        6、復制目錄/var/log至/tmp/目錄,修改/tmp/log及其內部的所有文件的屬組為mageedu,并讓屬組對目錄本身擁有寫權限;

    install命令:

    install – copy files and set attributes

    單源復制:

        install [OPTION]… [-T] SOURCE DEST

        多源復制:

        install [OPTION]… SOURCE… DIRECTORY

        install [OPTION]… -t DIRECTORY SOURCE…

        創建目錄:

        install [OPTION]… -d DIRECTORY…

        常用選項:

        -m, –mode=MODE:設定目標文件權限,默認為755;

        -o, –owner=OWNER:設定目標文件屬主;

        -g, –group=GROUP:設定目標文件屬組;

    mktemp命令:

    mktemp – create a temporary file or directory

    mktemp [OPTION]… [TEMPLATE]

    常用選項:

    -d:創建臨時目錄

    注意:mktemp會將創建的臨時文件名直接返回,因此,可直接通過命令引用保存起來;

原創文章,作者:luobo3692003,如若轉載,請注明出處:http://www.www58058.com/41896

(0)
luobo3692003luobo3692003
上一篇 2016-09-15
下一篇 2016-09-15

相關推薦

  • Jerry的學習計劃/目標/宣言

    學習計劃 按照班主任給的計劃進度來,多動手做實驗。 目標 勇敢做自己,做更好的自己 宣言 能不能成為高富帥,日后是否能愉快地裝逼,就看這半年!

    Linux干貨 2016-10-24
  • Redhat的Linux產品版本AS/ES/WS的聯系與區別

    Redhat 有兩大Linux產品系列,其一是免費的Fedora Core系列主要用于桌面版本,提供了較多新特性的支持。另外一個產品系列是收費的Enterprise系列,這個系列分成:AS/ES/WS等分支,他 們都是redhat企業級Linux,簡稱為 RHEL AS 是超級服務器版(Advanced Server),他在標準Linux內核的基礎上,做了性…

    Linux干貨 2015-03-20
  • 第二周作業

    由于圖片粘貼復雜,請看鏈接。 http://note.youdao.com/noteshare?id=a78c3236bbf77232fcc3e2624a38ae12

    Linux干貨 2016-09-19
  • CentOS6.7上編譯安裝MariaDB

    CentOS6.7上編譯安裝MariaDB

    系統運維 2016-06-03
  • 網絡設備及工作

    集線器集線器又叫Hub,是一種多用于星形網絡組織的中心設備。具備中繼器放大信號的特點,集線器是一種半雙工,同一時間只能接收或發送數據,不能同時既接受又發送數據,是沖突型設備,共享帶寬,放大信號的同時放大噪聲,不隔離廣播,不能成環,不安全。 二層交換機二層交換機的工作原理能自學習構造MAC地址表,基于MAC地址表進行轉發、劃分沖突域,對MAC地址實現過濾等功能…

    Linux干貨 2017-10-30
  • CentOS7口令破解

    一.rd.break方式修改  1.啟動時任意鍵暫停啟動      2.按e 鍵進入編輯模式 將光標移動linux16 開始的行,添加內核參數rd.break 按ctrl-x 啟動 3.重新掛載可讀可寫根目錄 :mount –o remount,rw /sysroot 切回根目錄: chroot /sysroot 修改…

    Linux干貨 2016-11-29
欧美性久久久久