用戶和組管理

用戶和組管理
資源分派 安全3A
Authentication:認證
Authorization:授權
Accouting|Audition:審計

令牌token、identity(username/passwd)

linux用戶:Username/UID
    管理員:root,0
    普通用戶:1-60000自動分配
        系統用戶:1-499,1-999
            對守護進程獲取資源進行權限分配;
        登錄用戶:500+,1000+
            交互式登錄:

linux組:Groupname/GID
    管理員組:root,0
    普通組:
        系統組:1-499,1-999
        普通組:500+,1000+

linux安全上下文:
    運行中的程序:進程(process)

        以進程發起者的身份運行:
            root:/bin/cat
            user1:/bin/cat
        進程所能夠訪問的所有資源的權限取決於進程的發起者的身份;

linux組的類別:
    用戶的基本組:(主組)
        用戶必須屬於一個且只有一個主組
        組名同用戶名,且僅包含一個用戶,私有組
    用戶的附加組:(額外組):
        一個用戶可以屬於零個或多個輔助組

linux用戶和組相關的配置文件:
    /etc/passwd:用戶及其屬性信息(名稱、UID、基本組ID等);
    /etc/group:組及其屬性信息;
    /etc/shadow:用戶密碼及其相關屬性;
    /etc/gshadow:組密碼及其相關屬性;

/etc/passwd:
    name:paaword:UID:GID:GECOS:directory:shell
    用戶名:密碼:UID:GID:GECOS:主目錄:默認shell
        login name:登錄用名(wang)
        passwd:密碼 (x)
        UID:用戶身份編號 (1000)
        GID:登錄默認所在組編號 (1000)
        GECOS:用戶全名或註釋
        home directory:用戶主目錄 (/home/wang)
        shell:用戶默認使用shell (/bin/bash)

/etc/group:
    group_name:password:GID:user_list
    組名:組密碼:GID:以當前組爲附加組的用戶列表(分隔符爲逗號)
        羣組名稱:就是羣組名稱
        羣組密碼:通常不需要設定,密碼是被記錄在 /etc/gshadow
        GID:就是羣組的 ID
        以當前組爲附加組的用戶列表(分隔符爲逗號)

/etc/shadow:
    login name:登錄用名
    encrypted password:用戶密碼:一般用sha512加密
    date of last password change(最後修改口令的時間單位是天):從1970年1月1日起到密碼最近一次被更改的時間
    minimum password age(密碼最短有效期):
    maximum password age(密碼最長有效期):
    password warning period(密碼過期前幾天系統提醒用戶):
    password inactivity period(密碼過期幾天後帳號會被鎖定密碼活動週期):
    account expiration date(密碼過期時間賬號失效日期):
    reserved field(保留字段):

    登錄名:加密了的密碼:最近一次更改密碼的日期:密碼的最小使用期限:最大密碼使用期限:密碼警告時間段:密碼禁用期:賬戶過期日期:保留字段
        加密機制:
            加密:明文<-- -->密文
            解密:密文<-- -->明文

            單項加密:提取數據指紋(唯一特徵碼)
                哈希算法,原文不同,密文必不同
                相同算法定長輸出,獲得密文不可逆推出原始數據
                雪崩效應:初始條件的微小改變,引起結果的巨大改變
                md5:message digest,128bit
                sha1:secure hash algorithm,160bits
                sha224:224bits
                sha256:256bits
                sha384:384bits
                sha512:512bits

                雪崩效應:初始的條件的微小改變,將會引起結果的巨大改變;
                定長輸出:
            更改加密算法:
            authconfig --passalgo=sha256 --update

        密碼的複雜性策略:
            1、使用數字、大寫字母、小寫字母及特殊字符中至少3種;
            2、足夠長:
            3、使用隨機密碼:
            4、定期更換;不要使用最近曾經使用過的密碼;

/etc/gshadow:
    羣組名稱:就是羣的名稱
    羣組密碼:
    組管理員列表:組管理員的列表,更改組密碼和成員
    以當前組爲附加組的用戶列表:多個用戶間用逗號分隔

用戶和組相關的管理命令:
    用戶創建:useradd   一些創建用戶的參考:rpm -q --scripts postfix
        useradd [options] LOGIN
            -u UID:[UID_MIN UID_MAX ],UID_MIN UID_MAX定義在/etc/login.defs文件中;
            -o:配合-u 選項,不檢查UID的唯一性
            -g UID:指明用戶的所屬基本組,可以爲組名,也可以爲GID;
            -c "COMMENT":用戶的註釋信息
            -r:創建系統用戶,centos6:ID小於500  centos7:ID小於1000
            -d /PATH/TO/HOME_DIR:指明家目錄,一般不要指定爲存在的目錄下,否則會報錯;
            -s SHELL:指明用戶的默認shell程序,可用列表在/etc/shells文件中;
            -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:爲用戶指明附加組,組必須事先存在;
            -N:不創建私用組做主組,使用users組做主組
            -m:創建家目錄,用於系統用戶
            -M:不創建家目錄,用於非系統用戶
            -D:顯示或 修改默認的設定值
                -s SHELL:
                -g:
                -f:
            新增用戶的默認值的設定文件: /etc/default/useradd
                [root@localhost ~]# cat /etc/default/useradd
                 useradd defaults file
                GROUP=100
                HOME=/home
                INACTIVE=-1
                EXPIRE=
                SHELL=/bin/bash
                SKEL=/etc/skel            家目錄的參考模板
                CREATE_MAIL_SPOOL=yes

            cp -r /home/wang/. /data/wanghome
            等同於 cp -r /home/wang/`ls -A` /data/wanghome
            注意*號不匹配隱藏文件
        新建用戶的相關文件和命令
            /etc/default/useradd
            /etc/skel/*
            /etc/login.defs
            newusers passwd格式文件 批量創建用戶
            chpasswd 批量修改用戶口令

    組創建:groupadd
        groupadd [options] group
            -g GID:指明GID號,[GID_MIN GID_MAX  ],GID_MIN GID_MAX定義在/etc/login.defs文件中;
            -r:創建系統組,centos6:ID小於500  centos7:ID小於1000
        新建用戶和組的一些默認配置文件:cat /etc/login.defs

    id:查看用戶的相關ID信息
        id [OPTION]... [USERNAME]
        -u:顯示UID
        -g:顯示GID
        -G:顯示GROUPS,顯示用戶所屬的組的ID
        -n:name,顯示名稱,需配合ugG使用  -u -n  -g -n
            id -u root

    su:切換用戶或以其他用戶身份執行命令
        su [options...] [-] [user [args...]]

        - 用戶:注意-前後都有空格字符
        注意使用-和不使用的區別:
        切換用戶的方式:
            su UserName:非登錄式切換,即不會讀取目標用戶的配置文件;不改變當前工作目錄
            su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換;
        注意:root su至其他用戶無需密碼,非root用戶切換時需要密碼;

        換個身份執行命令:
            su [-] UserName -c 'COMMAND'

        選項:-l --login
        su -l UserName 相當於 su - UserName
        -l:和-用法相同

usermod:修改用戶信息,用戶屬性修改
    usermod [options] LOGIN
        -u UID:新UID
        -g GID:新基本組
        -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append;
            usermod -G "" wang  或者usermod -G "wang" wang  此命令用於清空附加組
        -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:設定非活動期限;

    給用戶添加密碼:passwd
    passwd [OPTIONS] UserName: 修改指定用戶的密碼
    passwd UserName:修改指定用戶的密碼;僅root用戶權限
    passwd:修改自己的密碼;

        常用選項:
            -d:刪除指定用戶密碼
            -l:鎖定指定用戶
            -u:解鎖指定用戶
            -e:強制用戶下次登錄修改密碼
            -f:強制操作
            -n mindays:指定最短使用期限
            -x maxdays:最大使用期限
            -w warndays:提前多少天開始警告用戶修改密碼
            -i inactive-days:非活動期限,密碼過期後多少天允許登錄使用
            --stdin:從標準輸入接受用戶密碼;
                ehco "PASSWORD" | passwd --stdin USERNAME
                注意:/dev/null,bit buckets
                      /dev/zero,

    生成隨機口令:openssl rand -base64 12
                cat /dev/urandom |tr -dc 'a-zA-Z0-9'|head -c12
    批量修改密碼操作方法:
        newusers passwd格式文件 批量創建用戶
        chpasswd 批量修改用戶口令
        newusers:update and create new users in batch
        chpasswd:update passwords in batch mode   批量修改用戶密碼

    windowns查看密碼信息
        C:\Users\bin>net accounts
        強制用戶在時間到期之後多久必須註銷?:     從不
        密碼最短使用期限(天):                    0
        密碼最長使用期限(天):                    42
        密碼長度最小值:                          0
        保持的密碼歷史記錄長度:                  None
        鎖定閾值:                                從不
        鎖定持續時間(分):                        30
        鎖定觀測窗口(分):                        30
        計算機角色:                              WORKSTATION
        命令成功完成。

userdel:刪除用戶        userdel [options] LOGIN
    -r:刪除用戶家目錄和郵件;

groupmod:組屬性修改
    groupmod [options] GROUP
        -n groupname:指定新名稱
        -g GID:指定新的GID

組刪除:groupdel    用戶的主組不能刪除
    groupdel [options] GROUP
    groupdel GROUP

組密碼更改:gpasswd
    gpasswd [option] group
        -a user:將user添加至指定組中;
        -d user:從指定組中移除用戶user,刪除用戶user的以當前組爲組名的附加組;
        -A user1,user2,... :設置有管理權限的用戶列表;
newgrp命令:臨時切換基本組
    如果用戶本不屬於此組,則需要組密碼;

groupmems:更改和查看組成員(只有root可以執行)
    groupmems [options] [action]
    options:
    -g, --group groupname 更改爲指定組 (只有root)
    Actions:
    -a, --add username 指定用戶加入組
    -d, --delete username 從組中刪除用戶
    -p, --purge 從組中清除所有成員
    -l, --list 顯示組成員列表

groups [OPTION].[USERNAME]... 查看用戶所屬組列表

修改用戶屬性:chage
    chage [options] LOGIN

    -d, --lastday LAST_DAY
    -E, --expiredate EXPIRE_DATE
    -I, --inactive INACTIVE
    -m, --mindays MIN_DAYS
    -M, --maxdays MAX_DAYS
    -W, --warndays WARN_DAYS
    -l 顯示密碼策略

其它命令:cgfn、finger、chsh

    chfn:提供使用者更改個人信息,change finger information,
        chfn 指令可用來更改執行 finger 指令時所顯示的信息,這些信息都存放在/etc 目錄裏
    finger:user information lookup program
        用來查找並顯示用戶信息,系統管理員通過使用該命令可以知道某個時候到底有多少用戶在使用這臺Linux主機
    chsh:修改用戶的登錄shell
    -s:指定用戶的登錄shell
    -l:顯示/etv/shells中的shell列表,然後退出

    getent:用來察看系統的數據庫中的相關記錄
    getent passwd|group|shadow|gshadow
    pwconv:命令用於開啓用戶的投影密碼
    即將用戶的密碼在/etc/passwd的第二部分用x代替顯示
    pwunconv:關閉用戶的投影密碼
    即將用戶的密碼在/etc/paawd文件中顯示
    文件操作:
        vipw vi=nano /etc/passwd
        vigr vi=nano /etc/gpasswd
        pwck命令:檢查密碼相關信息
        pwck:verify integrity of password files
        grpck:verify integrity of group files

權限管理:
文件的權限主要針對三類對象進行定義:
owner:屬主,u
group:屬組,g
other:其它,o
每個文件針對每類訪問者都定義了三種權限:
r:Readable
w:Writeadble
x:Excutable

文件:
    r:可使用文件查看類工具獲取其內容;
    w:可修改其內容;
    x:可以把此文件提請內核啓動爲一個進程;
目錄:
    r:可以使用ls查看此目錄中文件列表;
    w:可在此目錄中創建文件、也可刪除此目錄中的文件;
    x:可以ls -l查看此目錄中文件列表元數據(須配合r),可以cd進入此目錄;
    X 只給目錄x權限,不給文件x權限

修改文件權限:
    chmod

    chmod [OPTION]... MODE[,MODE]... FILE...
    chmod [OPTION]... OCTAL-MODE FILE...
    chmod [OPTION]... --reference=RFILE FILE...

    1、chmod 640 文件或目錄
    2、修改一類用戶的權限:
        chmod u=rwx 文件或目錄883
        chmod u=rwx,g=r-x 文件或目錄
        chmod ug=rw- 文件或目錄

        chmod a-x 文件或目錄
        chmod +x 文件或目錄

    3、chmod [OPTION]... --reference=RFILE FILE...
    參考RFILE文件的權限,將FILE的修改爲同RFILE
        選項:
        -R:遞歸修改權限
  • a+X:其中X的含義:X 只給目錄x權限,不給文件x權限

    修改文件的屬主和屬組:僅root可用
    修改文件的屬主:chown
    chown [OPTION]... [OWNER][:[GROUP]] FILE...
    chown [OPTION]... --reference=RFILE FILE...
    選項:
    OWNER
    OWNER:GROUP
    :GROUP,冒號也可用 . 替換
    -R: 遞歸

    修改文件的屬組:chgrp
        chgrp [OPTION]... GROUP FILE...
        chgrp [OPTION]... --reference=RFILE FILE...
            -R 遞歸

    文件或目錄重建時的遮罩碼:umask
    文件的默認權限:666-umask
    注意:如果某類的用戶的權限減得的結果中存在x權限,則將其權限+1
    (所得結果某位存在執行(奇數)權限,則將其權限+1)
    目錄的默認權限:777-umask

    umask:查看
    umask #:設定
        示例:umask 002
        umask u=rw,g=r,o=
    umask –S 模式方式顯示
  • umask –p 輸出可被調用
    root用戶的默認值爲0022
    非特權用戶umask是 002
    文件默認權限爲644
    目錄默認權限爲755
    新建的文件默認權限爲 666-022=644
    新建的目錄默認權限爲 777-022=755
    文件: 666-umask 結果爲偶數位的不變,奇數位的加1 列如666-125=541=642
    目錄: 777-umask

    全局設置: /etc/bashrc 用戶設置:~/.bashrc
        /etc/bashrc中包含默認的umask值的設置
    
    誤刪除git用戶的家目錄後,恢復家目錄的方法
    mkdir /home/gir;cp -a /etc/skel/.[^.]* /home/git;chown -R git:git /home/git;chmod 700 /home/git
    cp /etc/skel /home/git;chown -R git:git /home/git;chmod 700 /home/git

linux文件系統上的特殊權限
SUID, SGID, Sticky
三種常用權限:r, w, x user, group, other
安全上下文
前提:進程有屬主和屬組,文件有屬主和屬組
(1)任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限;
(2)啓動爲進程之後,其進程的屬主爲發起者,屬組爲發起者所屬的組;
(3)進程訪問文件時的權限,取決於進程的發起者:
(a)進程的發起者,同文件的屬主,則應用文件屬主權限;
(b)進程的發起者,屬於文件的屬組,則應用文件屬組權限;
(c)應用文件“其它”權限;

SUID    可執行文件上SUID權限
    (1)任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限;
    (2)啓動爲進程之後,其進程的屬主爲原程序文件的屬主;ls -l `which passwd`
    (3)只適合二進制的可執行程序文件
    (4)SUID設置在目錄上無意義
    權限設定:suid=4
        chmod u+s file...   或者chmod 4XYZ file..  其中XYZ表示原來文件的數字權限
        chmod u-s file...   或者chmod XYZ  file..  其中XYZ表示原來文件的數字權限
        需要注意的是因爲權限的所有者位置權限顯示爲s或者S,s表示包含x權限,S表示不包含x權限

SGID
    可執行文件上SGID權限
        任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限
        啓動爲進程之後,其進程的屬組爲原程序文件的屬組
        權限設定:
        chmod g+s FILE...
        chmod g-s FILE...
    目錄上的SGID權限
        默認情況下,用戶創建文件時,其屬組爲此用戶所屬的基本組。
        一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組爲此目錄的屬組;
        通常用於創建一個協作目錄
        權限設定
        chmod g+s DIR...   或者chmod 2XYZ file..  其中XYZ表示原來文件的數字權限
        chmod g-s DIR...   或者chmod XYZ  file..  其中XYZ表示原來文件的數字權限

Sticky  粘滯位 針對目錄設置有意義,針對文件沒有實際價值
    具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
    對於一個多人可寫的目錄,如果設置了sticky,則每個用戶僅能刪除自己的文件;
    在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
    權限設定:
        chmod o+t DIR...    或者chmod 1XYZ file..  其中XYZ表示原來文件的數字權限
        chmod o-t DIR...    或者chmod  XYZ file..  其中XYZ表示原來文件的數字權限
        ls -ald /tmp
        ls -ald /var/tmp

SUID SGID STICKY
000
111

幾個權限位映射:
    SUID:user佔據屬主的執行權限位:
        s:屬主擁有x權限
        S:屬主沒有x權限
    SGID:group佔據屬組的執行權限位:
        s:屬組擁有x權限
        S:屬組沒有x權限
    Sticky:other佔據other的執行權限位:
        s:other擁有x權限
        S:other沒有x權限

文件和目錄權限的注意點:
    文件的刪除權限是由所在的目錄的權限決定的,
    進入目錄的權限由目錄的x權限控制

suid:繼承二進制程序所有者的權限   功能:執行此文件的用戶將臨時繼承此文件所有者的權限 su
sgid:繼承二進制程序所有組的權限;功能:執行此文件的用戶將臨時繼承此文件所屬組的權限
      *作用於目錄,此目錄新建的文件繼承目錄的所屬組
sticky:*作用於目錄,此目錄的文件只能被所有者和root刪除    /tmp目錄

設定文件特定屬性
    chattr +i 不能刪除,改名,更改
    chattr +a 只能追加內容
    lsattr 顯示特定屬性
    chattr +A  鎖定atime

訪問控制列表
    ACL:Access Control List,實現靈活的權限管理
    除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
    CentOS7 默認創建的xfs和ext4文件系統具有ACL功能
    CentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動增加
    tune2fs –o acl /dev/sdb1
    mount –o acl /dev/sdb1 /mnt/test
  • ACL生效順序:所有者,自定義用戶,自定義組,其他人

    ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
    getfacl 可看到特殊權限:flags
    通過ACL賦予目錄默認x權限,目錄內文件也不會繼承x權限
    base ACL 不能刪除
    setfacl -k dir 刪除默認ACL權限
    setfacl –b file1清除所有ACL權限
    getfacl file1 | setfacl --set-file=- file2 複製file1的acl權限給file2
    mask隻影響除所有者和other的之外的人和組的最大權限
    Mask需要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission)
    用戶或組的設置必須存在於mask權限設定範圍內纔會生效 setfacl -m mask::rx file
    --set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以
    示例:
    setfacl --set u::rw,u:wang:rw,g::r,o::- file1
    備份和恢復ACL
  • 主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
    getfacl -R /tmp/dir1 > acl.txt
    setfacl -R -b /tmp/dir1
    setfacl -R --set-file=acl.txt /tmp/dir1
    setfacl --restore acl.txt
    getfacl -R /tmp/dir1

    setfacl - set file access control lists
        -m:--modify=acl        modify the current ACL(s) of file(s)
            setfacl -m u:wangbin:rw f1
            setfacl -m mask::r f1
        -M, --modify-file=file  read ACL entries to modify from file
        -X, --remove-file=file  read ACL entries to remove from file
        -x:--remove=acl        remove entries from the ACL(s) of file(s)
        -b:-remove-all        remove all extended ACL entries   清空所有setfacl設置的權限
            全部清除acl權限使用-b,清空部分acl權限使用-x
        -d, --default           operations apply to the default ACL
    
    getfacl file:查看file文件的setfacl設置的權限信息
        爲多用戶或者組的文件和目錄賦予訪問權限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 7
        setfacl -x u:wang file |directory
        setfacl -X file.acl directory
    
                [root@localhost data]# setfacl -m u:wangbin:rw ens33
                [root@localhost data]# setfacl -m mask:r ens33
                [root@localhost data]# getfacl ens33
                # file: ens33
                # owner: root
                # group: root
                user::rw-
                user:wangbin:rw-        #effective:r--
                group::r--
                mask::r--
                other::r--
    
                [root@localhost data]# setfacl -m u:wangbin:rw ens33
                [root@localhost data]# getfacl ens33
                # file: ens33
                # owner: root
                # group: root
                user::rw-
                user:wangbin:rw-
                group::r--
                mask::rw-
                other::r--
    
        備份/testdir/dir裏所有文件的ACL權限到/root/acl.txt中,清除/testdir/dir中所有ACL權限,最後還原ACL權限
  • getfacl對目錄操作時,不能使用絕對路徑;
    [root@Magedu ~]# tar -cvf dir.tar /testdir/dir
    [root@Magedu ~]# getfacl -R testdir/dir > /root/acl.txt
    清除/testdir/dir中所有ACL權限
    [root@Magedu ~]# setfacl -b testdir/dir
    還原ACL權限
    [root@Magedu ~]# tar -xvf dir.tar -C /var/tmp
    [root@Magedu ~]# cp ac1.txt /var/tmp
    [root@Magedu ~]# cd /root
    setfacl --restore ac1.txt

        tar -cvf dir.tar /testdir/dir
        getfacl -R testdir/dir > /root/acl.txt
        setfacl -b testdir/dir
        tar -xvf dir.tar -C /var/tmp
        cp acl.txt /var/tmp
        cd /root
        setfacl --restort acl.txt
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章