天天看點

使用者、組和權限詳解

一、使用者user

    在Linux系統上,使用者管理是基于使用者名和密碼的方式進行資源的配置設定,Linux上的使用者即Username/UID分為以下類别:

        管理者:root,0;

        普通使用者:1-65535;

    普通使用者又分為:系統使用者和登入使用者兩種;

        系統使用者:1-499(centos6系統)1-999(centos7系統)對守護程序擷取資源進行權限配置設定;

        登入使用者:500+(centos6系統) 1000+(centos7系統)通過互動式方式登入;

二、組

    Linux組:groupname/GID

        管理者組:root,0

        普通組:1-65535

    普通組又分為:系統組和非系統組,我們通常把非系統組就叫普通組;

        系統組:1-499(centos6系統)1-999(centos7系統)

        普通組:500+(centos6系統) 1000+(centos7系統)

    組的類别

        使用者的主組

            使用者必須屬于一個且隻有一個主組;

            組名與使用者名相同,且僅包含一個使用者,也叫私有組;

        使用者的附加組(輔助組)

            一個使用者可以屬于零個或多個附加組;

三、安全上下文

    運作中的程式:程序(process);

    以程序發起者的身份運作:

        root:/bin/cat;

        wu:/bin/cat;

    程序所能夠通路資源的權限取決于程序運作者的身份;

四、使用者群組的配置檔案

    Linux使用者群組的主要配置檔案:

        /etc/passwd:使用者及其屬性資訊(名稱,UID,主組ID等);

        /etc/group:組及其屬性資訊;

        /etc/shadow:使用者密碼及其相關屬性;

        /etc/gshadow:組密碼及其相關屬性;

五、/etc/passwd檔案格式

    login name:登入使用者名;

    passwd:密碼(x);

    UID:使用者身份編号(1000)

    GID:登入預設所在組編号(1000)

    GECOS:使用者的詳細說明資訊;

    home directory:使用者的家目錄

    shell:使用者預設使用shell(/bin/bash)

六、/etc/shadow檔案格式

    登入使用者名;

    加了密的密碼:一般用sha512加密;

    最近一次更改密碼的日期:從1970年1月1日期;

    密碼再過幾天可以被變更(0表示随時可被變更);

    密碼再過幾天必須被變更(99999表示永不過期);

    密碼過期前幾天系統提醒使用者(預設為一周);

    密碼過期幾天後賬号會被鎖定;

    賬戶的過期日期:從1970年1月1日算起,多少天後賬号失效;

    保留字段;

七、/etc/group檔案格式

    組名;

    組密碼:通常不需要設定,密碼是被記錄在/etc/gshadow;

    組id;

    以目前組為附加組的使用者清單(如果有多個,則用逗号隔開);

八、/etc/gshadow檔案格式

    組密碼;

    組管理者清單:組管理者的清單,更改組密碼和成員;

九、密碼加密

    密碼加密解密機制:

        加密:明文--->密文

        解密:密文--->明文

    單向加密:提取資料的指紋;

    算法有:md5,sha1,sha224,sha256,sha384,sha512;

    密碼在加密過程中存在雪崩效應,所謂雪崩效應是指初始的條件的微小變動,将會引起結果的巨大改變;

    更改加密算法:authconfig - -passalgo=sha512 - -update

    Linux系統當中的密碼采用定長格式輸出,如下:                                            $6$G.oHUezroD7c.nab$.nlbNZ1IwrA9FabkBLMTFOjMGlu04mZmROXm5HdA5pfK9GLw36hr5KvGmNAuT2eq1ikz8ileDgp.o9u15BW5e0  

    其中,

        $:為分隔符;

        6:表示加密算法;   

        G.oHUezroD7c.nab:表示salt;

    密碼的複雜性政策

        1 使用數字、大寫字母、小寫字母及特殊字元中至少3種;

        2 足夠長;

        3 使用随機密碼;

        4 定期更換,不要使用最近使用過的密碼;

十、useradd指令

    useradd:建立使用者

    格式:useradd [OPTION] login

    OPTION:

        -u UID;

        -o:配合-u選項,不檢查UID的唯一性;

        -g GID:指明使用者所屬基本組,可為組名,也可以GID;

        -c "COMMENT":使用者的注釋資訊;

        -d HOME_DIR:以指定的路徑為家目錄;

        -s SHELL:指明使用者的預設shell程式,可用清單在/etc/shells檔案中;

        -G GROUP1 [GORUP2...]:為使用者指明附加組,組必須事先存在;

        -N:不建立私用組做主組,使用user組做主組;

        -r:建立系統使用者(centos6:ID<500,centos7:ID<1000)

    eg1:useradd tom(建立使用者時不設定密碼系統預設不讓登入,在/etc/shadow檔案裡用兩個!!表示)

    eg2:也可以用指令設定不讓使用者登入,usermod -L tom(加鎖,不讓tom使用者登入);usermod -U tom(解鎖),如果tom使用者沒有設定密碼,使用-U解鎖時會有個報錯資訊,給tom設定個密碼就行了;

    eg3:useradd -u 1234 zhang:建立zhang使用者并制定UID;getent passwd root:檢視指定使用者配置檔案資訊(getent=cat /etc/passwd)

    eg4:useradd -ou 1234 wang(不檢查使用者UID唯一性)

    eg5:useradd -g wang li(指明使用者所屬組);groups li:檢視使用者屬于哪個組

    eg6: useradd -G wang,root,bin zhao(指明使用者附加組)

    eg7:useradd -d /testdir/zhou zhou(指明使用者家目錄)

    ge8: useradd -s /sbin/nologin mysql(禁止使用者登入)

    eg9:useradd -s /bin/csh hehe(指明使用者shell類型)

    eg10: useradd -rs /sbin/nologin httpd(建立系統使用者并禁止登陸),建立系統使用者不會生成家目錄;

    eg11: useradd -N haha(指明不和使用者名一樣的組做主組,使用user做主組)

    eg12: useradd -c "welcome to xix space" xixi(使用者注釋資訊)

十一、建立使用者相關檔案和指令

    1 /etc/skel:使用者家目錄的模闆檔案;

    2 /etc/default/useradd:建立使用者時的預設屬性在檔案中用定義;可以使用useradd -D(相當于cat /etc/default/useradd)來修改預設設定,例如:useradd -D -S /bin/csh(修改系統預設shell);

    3 /etc/login.defs:定義一些密碼的最小有效期、密碼到期預設時間、密碼最大有效期等;

    4 newusers:批量建立使用者,格式要和/etc/passwd配置檔案一樣;

        4.1 vim user.txt

        4.2 添加使用者,如圖所示:

        4.3 newusers user.txt(批量建立使用者)

    5 chpasswd:批量修改使用者密碼

        5.1 vim pass.txt

        5.2 添加使用者名和密碼,格式為username:passwd,如圖所示:

        5.3 cat pass.txt | chpasswd(批量修改使用者密碼);

        5.4 用剛建立的使用者登入時可以登陸進去,例如:user3,但是家目錄缺少一些檔案,運作cp -r /etc/skel/. /testdir/user3或cp -r /etc/skel/.[^.]* /testdir/user3,退出重新登入即可;    

十二、usermod指令

    usermod:修改使用者屬性

    格式:usermod [OPTION] login

    OPTION:        

        -u UID: 新UID;

        -g GID: 新基本組;

        -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組将會被覆寫;若保留原有,則要同時使用-a選項,表示append;

        -s SHELL:新的預設SHELL;

        -c 'COMMENT':新的注釋資訊;

        -d HOME: 新家目錄不會自動建立,原家目錄中的檔案不會同時移 動至新的家目錄;若要建立新家目錄并移動原家資料,同時使用-m選項;

        -l login_name: 新的名字;

        -L: lock指定使用者,在/etc/shadow 密碼欄的增加 !;

        -U: unlock指定使用者,将 /etc/shadow 密碼欄的 ! 拿掉;

        -e YYYY-MM-DD: 指明使用者賬号過期日期;

        -f INACTIVE: 設定非活動期限;

    示例: 

    eg:

        [root@centos7home]#usermod -u2017 -g wang -G root,bin -s /bin/csh -d /testdir/gentoohome -m-l gentooboom -e 2017-07-31 -f 5 gentoo

        [root@centos7 home]#getent passwd gentooboom

gentooboom:x:2017:1235:Gentoo dir:/testdir/gentoohome:/bin/csh

        [root@centos7 home]#groups gentooboom

gentooboom : wang root bin

        [root@centos7home]#  getent shadow gentooboom                                

gentooboom:!!:17378:0:99999:7:5:17378:

        [root@centos7 home]#usermod -G "" gentooboom  ###清空附加組

gentooboom : wang

 十三、userdel指令

    Usheredl:删除使用者

    格式:usheredl [OPTION]… login

    OPTION:

        -r:删除使用者家目錄;

十四、id指令

    Id:檢視使用者相關資訊;

    Id [OPTION]… [user]

    -u:UID

    -g:GID

    -G:Groups

    -n:Name

十五、su指令

    Su:切換使用者或其他使用者身份執行指令;

    格式:so [OPTIONS…] [-] [user [rags…]]   

    切換使用者的方式:

        Su username:非登入時切換,即不會讀取目标使用者的配置檔案,不改變目前工作目錄;

        Su - username:登入式切換,會讀取目标使用者的配置檔案,切換至家目錄,完全切換;

        root so至其他使用者無需密碼,非root使用者切換時需要密碼;

        -l –login:指定登入使用者名

            eg:su -l username 相當于su - username

十六、Passwd指令

    Passwd設定密碼,僅root使用者權限

    格式:passwd [OPTIONS] username

    Passed:修改自己的密碼

    OPTION:

        -l:鎖定指定使用者

        -u:解鎖指定使用者

        -e:強制使用者下次登入修改密碼

        -n middays:指定最短使用期限;

        -x maydays:最大使用期限;

        -w warn days:提前多少天開始警告;

        -I inactive days:非活動期限;

        - -stdin:從标準輸入接收使用者密碼;

            eg:echo centos7 | passwd - -stdin username

十七、chage指令

    chage:修改使用者密碼政策

    格式:chage [OPTION]… LOGIN

        -d LAST_DAY(上一次更改的日期)

        -E: --expire date EXPIRE_DATE(賬号到期日期)

        -I, --inactive INACTIVE(非活動期限)

 -m, --middays MIN_DAYS(密碼可更改的最小天數)

 -M, --maydays MAX_DAYS(保持密碼有效的最大天數)

 -W, --warn days WARN_DAYS(使用者密碼到期前,提前收到警告資訊天數)

–l,顯示密碼政策

示例:

Change -d 0 tom 下一次登入強制重設密碼

change -m 0 –M 42 –W 14 –I 7 tom

change -E 2016-09-10 tom

十八、groupadd指令

    groupadd:建立組

    格式:groupadd [OPTION]… group name

        -g GID:指明GID号

        -r:建立系統組;

            Centos6:ID<500

            Centos7:ID<1000

十九、groupmod指令

    groupmod:組屬性修改

    格式:groupmod [OPTION]… group

        -n group_name:新名字

        -g GID:新的GID

            eg1:修改組名

二十、groupdel指令

    groupdel:删除組

    格式:groupdel GROUP

二十一、gpasswd指令

    gpasswd:更改組密碼

    格式:gpasswd [OPTION] GROUP

        -a user:将user添加至指定組中;

        -d user:從指定組中移除使用者user

        -A user1,user2…:設定有管理權限的使用者清單

            eg1:添加使用者到組裡

二十二、newgrp指令

    newgrp:臨時切換基本組

        如果使用者本不屬于此組,則需要密碼;

二十三、groupmems指令

    groupmems:檢視和更改組成員

    格式:groupmems [OPTION] [action]

        -g, --group group_name 更改為指定組 (隻有root)

Actions:

-a, --add username      指定使用者加入組

-d, --delete username   從組中删除使用者

-p, --purge             從組中清除所有成員

-l, --list              顯示組成員清單

groups [OPTION]… [USERNAME]... 檢視使用者所屬組清單

    eg1:檢視組成員

    eg2:向組裡添加使用者

    eg3:删除組裡的使用者

    eg4:删除組裡所有使用者

二十四、chown指令

    chown:修改檔案的屬主和屬組

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

用法:

OWNER

OWNER: GROUP

: GROUP

指令中的冒号可用.替換;

-R: 遞歸

chown [OPTION]... --reference=RFILE FILE...  

二十五、chgrp指令

chgrp:修改檔案的屬組

格式:chgrp [OPTION]... GROUP FILE...

chgrp [OPTION]... --reference=RFILE FILE...

-R 遞歸

    注:chown隻有root才能執行;chgrp指令隻有root、檔案所有者執行,檔案所有者可将之改為檔案所有者所屬的組;

二十六、檔案權限

    檔案的權限主要針對三類對象進行定義:

owner: 屬主,u

group: 屬組,g

other: 其他,o

每個檔案針對每類通路者都定義了三種權限:

r: Readable

w: Writable

x: executable

    檔案和目錄各個權限含義

        檔案:

    r: 可使用檔案檢視類工具擷取其内容

    w: 可修改其内容

    x: 可以把此檔案提請核心啟動為一個程序 

    目錄:

    r: 可以使用ls檢視此目錄中檔案清單

    w: 可在此目錄中建立檔案,也可删除此目錄中的檔案,修改目錄中的檔案

    x: 可以使用ls -l檢視此目錄中檔案清單,可以cd進入此目錄并且讀目錄内檔案内容

    X:隻給目錄x權限,不給檔案x權限;前提是檔案本身無x權限,有的話會加;                

二十七、chmod指令

    chmod:修改檔案權限

chmod [OPTION]... OCTAL-MODE FILE...

    OPTIOM:

-R: 遞歸修改權限 

chmod [OPTION]... MODE [, MODE] ... FILE...

MODE:

修改一類使用者的所有權限: u= g= o= up= a= u=, g=    

修改一類使用者某位或某些位權限 u+  u- g+ g- o+ o- a+ a-

chmod [OPTION]... --reference=RFILE FILE...

參考RFILE檔案的權限,将FILE的修改為同RFILE;

    權限設定示例:

       chgrp sales test file 

chown rotations test file 

chmod u+wx, g-r, o=ax file 

chmod -R g+rwX /testier 

chmod 600 files 

chown mage testifies

二十八、建立檔案和目錄的預設權限

    unmask值可以用來保留在建立檔案權限

    建立檔案預設權限:666-umask;

        發現結果有奇數權限+1,偶數權限不變;

    建立目錄預設權限:777-umask;

    非特權使用者的unmask是002;

    Root的unmask是022;

    unmask –S 模式方式顯示 ;

    unmask –p 輸出可被調用 ;

全局設定: /etc./basher 使用者設定:~/. basher;

二十九、Linux檔案系統上的特殊檔案

    SUID(4), SGID(2), Sticky(1)  

三種常用權限:r, w, x;user group,other

前提:程序有屬主和屬組;檔案有屬主和屬組

(1) 任何一個可執行程式檔案能不能啟動為程序:取決發起者對程式檔案是否擁有執行權限

(2) 啟動為程序之後,其程序的屬主為發起者;程序的屬組為發起者所屬的組

(3) 程序通路檔案時的權限,取決于程序的發起者

(a) 程序的發起者,同檔案的屬主:則應用檔案屬主權限

(b) 程序的發起者,屬于檔案屬組;則應用檔案屬組權限

(c) 應用檔案“其它”權限

    1.可執行檔案上的SUID權限

       1.1 任何一個可執行程式檔案能不能啟動為程序:取決發起者對 程式檔案是否擁有執行權限;

       1.2 啟動為程序之後,其程序的屬主為原程式檔案的屬主;

       1.3 SUID隻對二進制可執行程式有效;

       1.4 SUID設定在目錄上無意義 ;

       1.5 權限設定: chmod u+s FILE... chmod u-s FILE...

   2.可執行檔案上的SGID權限

        2.1 任何一個可執行程式檔案能不能啟動為程序:取決發起者對 程式檔案是否擁有執行權限;

        2.2 啟動為程序之後,其程序的屬主為原程式檔案的屬組;

        2.3 作用在二進制程式上:使用者運作改程式時,自動繼承該程式所屬組的權限;

        2.4 權限設定: chmod g+s FILE... chmod g-s FILE...

    eg:

        chmod g+s /bin/cat

        su - wuzhongcheng

        cat /etc/shadow

        ll /bin/cat

        ll /etc/shadow

    3.目錄上的SGID權限

       3.1 預設情況下,使用者建立檔案時,其屬組為此使用者所屬的主組;

       3.2 一旦某目錄被設定了SGID,則對此目錄有寫權限的使用者在此目錄中建立的檔案所屬的組為此目錄的屬組;

       3.3 通常用于建立一個協作目錄;

       3.4 權限設定: chmod g+s DIR... chmod g-s DIR...

    4.Sticky(粘滞)位

4.1 具有寫權限的目錄通常使用者可以删除該目錄中的任何檔案,無論該檔案的權限或擁有權;

4.2 在目錄設定Sticky 位,隻有檔案的所有者或root可以删除該檔案;

4.3 sticky 設定在檔案上無意義;

4.4 權限設定:chmod o+t DIR... chmod o-t DIR...

      例如:ls -ld /tmp

        drwxrwxrwt 12 root root4096 Nov 2 15:44 /tmp

三十、設定檔案特定屬性

    chattr +i:不能删除,改名,更改;

    chattr +a:隻能增加;

    lsattr:顯示特定屬性;

三十一、通路控制清單

    1. ACL:AccessControlList,實作靈活的權限管理;

    2. 除了檔案的所有者,所屬組和其它人,可以對更多的使用者設 置權限;

    3. CentOS7.0預設建立的xfs和ext4檔案系統有ACL功能;

    4. CentOS7.X之前版本,預設手工建立的ext4檔案系統無ACL 功能;

        4.1 需手動增加:

             tune2fs –o acl/dev/sdb1

             mount –o acl/dev/sdb1  /mnt

    5. ACL生效順序:所有者,自定義使用者,自定義組,其他人;

   6. 為多使用者或者組的檔案和目錄賦予通路權限rwx

            mount -o acl /directory

            getfacl file |directory 

            setfacl -m u:wang:rwx file|directory

            setfacl -Rm g:sales:rwX directory

            setfacl -M file.acl file|directory

            setfacl -m g:salesgroup:rw file|directory

            setfacl -m d:u:wang:rx  directory

            setfacl -x u:wang  file |directory

            setfacl -X file.acl  directory

        eg1:設定特定的使用者不能對檔案進行通路

        eg2:設定特定使用者能對檔案進行讀和修改

        eg3:檢視檔案設定的acl權限

        eg3:删除使用者acl權限

        eg4:清空檔案上所有acl權限

        eg5:調用已寫好的acl權限檔案給指定檔案使用(vim acl.txt)

        eg6:設定預設acl權限

            對檔案:

            對目錄:

        eg7:删除已寫好檔案的acl權限(vim acl.txt)

    7. ACL檔案上的group權限是mask 值(自定義使用者,自定義組 ,擁有組的最大權限),而非傳統的組權限; 

    8. getfacl 可看到特殊權限:flags;

    9. 預設ACL權限給了x,檔案也不會繼承x權限;

    10. base ACL 不能删除 ;

    11. setfacl -k dir 删除預設ACL權限;

    12. setfacl -b file1清除所有ACL權限 ;

    13. getfacl file1 | setfacl--set-file=-file2  複制file1 的acl權限給file2;

    14. mask隻影響除所有者和other的之外的人群組的最大權限 Mask需要與使用者的權限進行邏輯與運算後,才能變成有限的權限(Effective  Permission)

    15. 使用者或組的設定必須存在于mask權限設定範圍内才會生效。

        setfacl -m mask::rx file 

        示例:(與mask權限為準,隻能小于或等于mask權限)

      本文轉自wzcLINUXER 51CTO部落格,原文連結:http://blog.51cto.com/yacheng0316/1953985,如需轉載請自行聯系原作者

繼續閱讀