linux 權限相關知識

linux day 6    

用戶、組和權限

1.Linux用戶:Username/UID

        管理員:root, 0

        普通用戶:1-65535

            系統用戶:1-499, 1-999

                對守護進程獲取資源進行權限分配;

            登錄用戶:500+, 1000+

                交互式登錄;

2.Linux組:Groupname/GID

        管理員組:root, 0

        普通組:

            系統組:1-499, 1-999

            普通組:500+, 1000+

3.Linux用戶和組之間的關系:

    對于用戶而言:

        用戶必須有且只有一個主要組(primary group),也叫私有組,組名和用戶名相同

        輔助組(secondary group),一個用戶可以有0個或多個輔助組

    一個組可以有多個成員,也可以有多個組管理員,組管理員可以改變組密碼,添加或刪除

    組成員

4.跟用戶相關的配置文件

    /etc/passwd     用戶及其屬性細心

    /etc/group      組及其屬性信息

    /etc/shadow     用戶密碼及其相關屬性

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

    注意:1):這兩個文件一個是存儲用戶信息,一個是存儲密碼的,早期是放在一起的,可想而知這種做法并不安全,但使用命令也可以將這兩個文件合并:

          #pwunconv 

          將密碼填入/etc/passwd的x位置,并重命名/etc/shadow文件為/etc/shadow-,相關的密碼策略不會顯示在/etc/paaawd中

          #pwconv 

          恢復成兩個文件

  

         2):查看/etc/passwd和/etc/shadow中某個特定用戶的信息:

          #getent passwd 用戶名

          #getent shadow 用戶名

    /etc/passwd 用于存儲用戶的相關信息,此文件以:為分隔符分為7個字段,各個字段的含義如下:

        1) login name:登錄用戶名

        2) passwd:密碼(x,表示占位符;其內容在/etc/shadow文件中)

        3) UID:用戶ID 

        4) GID:基本組ID

        5) Comment:用戶全名或注釋

        6) home directory:用戶家目錄

        7) shell:用戶的默認shell

    

    /etc/shadow 用于存儲用戶的密碼信息,同樣以:為分隔符分為9個字段,各個字段的含義如下:

        1) 用戶名

        2) 加密后的用戶密碼;現在一般使用sha512加密

        3) 上次修改時間:從1970年1月1日起到最近一次被更改的時間

        4) 最小使用時間:密碼過幾天后可以變更(0表示可隨時變更)

        5) 最大使用時間:密碼過期時間(99999表示永不過期)

        6) 密碼警告時間:密碼過期前幾天系統提示用戶(默認為一周)

        7) 密碼失效時間:密碼過期后多少天賬號會被鎖定

        8) 賬號過期時間:從1970年1月1日起,多少天后賬號失效

        9) 保留字段(reserved field)

    密碼加密

    md5 128bits

    sha1  160bits

    sha224  224bits

    sha256  256bits

    sha384  384bits

    sha512  512bits

    更改加密算法   authconfig –passalgo=sha256 –update

    或者改  cat /etc/login.defs 

5.組相關的兩個配置文件

    /etc/group和/etc/gshadow

      查看/etc/group和/etc/gshadow中某個特定用戶的信息:

          #getent group 用戶名

          #getent gshadow 用戶名

    /etc/group存儲的是組的相關信息,以:為分隔符:

        1) 組名

        2) 組密碼;通常不需要設定;密碼被記錄在/etc/gshadow

        3) GID:組ID

        4) 以當前組為附加組(輔助組)的用戶列表(以逗號分隔)

    /etc/gshadow 存儲的是組密碼的相關信息

        1) 組名

        2) 組密碼;和/etc/shadow的密碼構造一樣

        3) 組管理員;逗號分隔用戶列表,這些用戶都是組管理員

        4) 組成員;逗號分隔用戶列表,這些都是組成員

6.專門來修改/etc/passwd和/etc/group的工具:

    修改且帶有語法檢查的:vipw和vigr

    只有語法檢查功能:pwck和grpck

7.用戶管理命令

    

    1) 創建用戶

  

        useradd [option] username

            -u UID  UID的范圍在/etc/login.defs中定義

            -u -o   不檢查UID的唯一性

            -g GID  指明要加入的基本組,如果不指定則創建一個與用戶名相同的組,并將其作為用戶的基本組

            -c "Comment" 用戶的注釋信息

            -d HOME_DIR 以指定的路徑為家目錄 此處指定的路徑必須不能是已存在的目錄

            -s SHELL 指明用戶的默認shell

            -G GP1[GP2,…] 為用戶指明附加組,組必須事先存在

            -N 不創建私有組作為,使用users組(Gid=100)作為基本組

            -r 創建系統用戶

            -M 不創建家目錄

            -D 顯示默認配置

            -D -s 修改用戶的默認shell信息

    

    2)創建用戶口令            

        passwd [options] username

            -l 鎖定指定用戶 (密碼前加!!) 

            -u 解鎖指定用戶 (刪除密碼前的!!)

            -n mindays: 指定最短使用期限

            -x maxdays: 最大使用期限

            -w warndays: 提前多少天開始警告

            -i inactive-days: 非活動期限

            –stdin 從標準輸入接收用戶密碼; eg: echo "123456" | passwd –stdin username

    3)批量創建用戶和修改用戶口令 

        #newusers files 批量創建用戶;file是滿足/etc/passwd格式的文件

        #chpasswd 從標準輸出讀入user:passwd的格式的多行文本,以此來批量修改用戶口令

                    vim batchpasswd

                    user1:明文口令

                    user2:明文口令

                    …

                    cat batchpasswd | chpasswd

    

    4)用戶屬性修改

        #usermod [option] username 

            -u UID:指定用戶新的UID

            -g GID:指明用戶新的基本組

            -G GP1[Gp2…] 指明新的附加組,原來的附加組會被覆蓋(若要保留原來的附加組,則要使用-aG)

                -G ""  清空附加組

            -s SHELL:指明新的默認shell

            -c 'COMMENT':新的注釋信息

            -d HOME: 新的家目錄,原來的家目錄中的文件不會同時移動至新的家目錄中,若要移動,則要同時使用-m選項

            -l login_name: 新用戶名

            -L: 鎖定用戶 (在/etc/shadow密碼前加!)

            -U: 解鎖用戶

            -e yyyy-MM-DD:指明用戶賬號的過期日期

            -f INACTIVE:設定非活動期限

            -r:刪除用戶家目錄

    5)查看用戶的相關信息

        #id [options] [user]  查看用戶相關信息;不指明用戶則查看的是當前用戶

            -u:UID

            -g:GID

            -G:group 附加組

            -n:顯示id對應的名字,通常和-u和-g一起使用

                 id -un [user] 或 is -gn [user]

        #finger 打印登錄到系統的所有用戶的信息

            finger user  查看user相關的一些信息,比如家目錄,shell類型,郵件等

    6) 在/etc/passwd中家目錄字段必須不能為空

     如果為空,則登錄這個用戶時,鍵入用戶和密碼之后,會不出現提示符,不能輸入任何命令,等待超時之后(提示:/usr/bin/xauth:  timeout in locking authority file /.Xauthority),進入/

               若su – user完全切換或不完全切換 su user, 則會顯示su: user user does not exist

     

     如果不空,但目錄不存在,則登錄這個用戶時,會直接進入/,

                             若su – user完全切換 會直接進入/

                             若不完全切換 su user 會進入執行 su user的目錄

  

  7) 切換用戶或以其它用戶身份執行命令

      su [options] [-] [user [args…]]

      切換用戶的方式:

      su user:非登錄式切換,不會讀取目標用戶的配置文件,不改變當前工作目錄,也稱之為不完全切換

      su – user 登錄式切換,會讀取目標用戶的配置文件,切換至其家目錄,也稱之為完全切換

      Attention:root執行su至其他用戶無需密碼,非root用戶切換時需要密碼

      

      切換身份執行命令

      su [-] user -c 'cmd'

      選項 -l –login

      su -l user 相當于 su – user

  

  8)修改用戶相關信息的其他命令

    chfn 指定個人信息

    chsh 指定shell

  

  9)修改用戶密碼策略

    chage [option]  user

          -d last_day 修改最后修改時間 對應于/etc/shadow的第3個字段

          -m –mindays Min_days 修改最小使用時間 對應于/etc/shadow的第4個字段 過多少時間可以修改

          -M –maxdays Max_days 修改最大使用時間 對應于/etc/shadow的第5個字段

          -W –warndays Warn_days 修改警告時間 對應于/etc/shadow的第6個字段

          -I –inactive Inactive 修改賬戶失效時間 對應于/etc/shadow的第7個字段                  

          -E –expiredate Expire_Date 修改賬戶過期時間 對應于/etc/shadow的第8個字段 

          -l 顯示密碼策略

    下次登錄強制重設密碼

    chage -d 0 tom 等價于 passwd -e tom

    e.g. chage -m 0 -M 42 -W 14   -I 7 tom

         chage -E 2016-09-10 tom 

  

  10)刪除用戶

      userdel user 不會刪除用戶家目錄

              -r user 才會刪除用戶的同時刪除家目錄

     在/etc/login.defs中,有這樣的描述

     # This enables userdel to remove user groups if no members exist.

     #

     USERGROUPS_ENAB yes    

8. 組管理命令

  1)創建組

     groupadd [option] groupname

              -g gid 指明GID 范圍在/etc/login.defs中指定

              -r 創建系統組

     

  2)修改組

    groupmod [OPTION] group

             -n groupname :組的新名字

             -g GID :新的GID

  

  3)組刪除

     groupdel group 

  

  4)更改組密碼

    gpasswd [option] group

            -a user 將user加入到指定組中

            -M user1,user2…指定組成員列表

            -d user 從指定組中刪除user

            -A user1,user2,… 設置有管理權限的用戶列表,即設置組管理員

    

    newgrp命令:臨時切換基本組

        如果用戶不屬于此組,則需要組密碼

        Attention:具體參見本文檔/etc/gshadow部分

   

   5)更改組成員

    groupmems [options] [action]

    options:

        -g /–group groupname 更改為指定組(只有root可用)

    

    action:

        -a /–add username 指定加入組的用戶

        -d / –delete username 指定從組刪除的用戶

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

        -l / –list         顯示組中成員

    

    e.g. groupmems -g peng -a wang 將wang用戶加入peng組

         groupmems -g peng -l 查看peng組中的所有成員,似乎是查看以peng組為附加組的成員列表

         groupmems -g peng -p 清除所有peng組中的成員

    

    6)查看組成員

       groups user1 user2 .. usern 列出指定一個或多個用戶的組關系,格式:primary group:secondary group1 secondary group

       groups 如果沒有指定用戶,那么打印當前進程的組關系,通常是沒有基本組和附加組的概念    

以上是基礎內容:

我是分割線————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

一次創建多個用戶的用法

[root@Centos7 ~]# cat useradd.txt 

user1:x:2001:2001::/testdir/user1:/bin/bash

user2:x:2002:2002::/testdir/user2:/bin/bash

user3:x:2003:2003::/testdir/user3:/bin/bash

[root@Centos7 ~]# newusers useradd.txt 

[root@Centos7 ~]# cat passwd.txt

user1:redhat

user2:ooppqq

user3:xxyyzz

[root@Centos7 ~]# cat passwd.txt | chpasswd 

創建用戶的家目錄內的隱藏文件

[root@Centos7 ~]# cp -r /etc/skel/. /testdir/user1

[root@Centos7 ~]# cp -r /etc/skel/. /testdir/user2

[root@Centos7 ~]# cp -r /etc/skel/. /testdir/user3

echo 112233 | passwd –stdin user2 修改用戶密碼的命令

簡單的用戶管理文件 回憶

/etc/passwd

user1:x:2001:2001::/testdir/user1:/bin/bash

username:x:uid:gid:comment:home:shell

/etc/shadow

user1:$6$…..t1:17015:0:99999:7:::

username:password:password age:min:max:warn:inactive:usernameage:

/etc/group

newgroup:x:3000:user1,user2,user3

groupname:x:gid:groupmember

/etc/gshadow

newgroup:$6$…XI.:user1:user1,user2,user3

groupname:password:groupadmin:groupmember

權限

    對目錄的意義

        read:查看目錄內容,列表

        excute:cd 讀目錄內文件內容

        write:能刪和創建文件 配合x

    對文件的意義

        r:可使用文件查看類工具獲取其內容

        w:可修改其內容

        x可以把此文件提請內核啟動一個進程

        X:加 x 到目錄上,而不給文件 x 權限(必須目錄內的文件沒有x)

  chmod who opt per file…

        who:u,g,o,a

        opt:+,-,=

        per:r,w,x,X

  chmod 數字 file

        數字:3個8進制

        r w x

        4 2 1 = 7

        rw-r—–

        420400000

        6  0  0

  chown 只能root能執行

  chgrp root 或者 文件所有者user可將之改為user的所屬組

  修改文件的屬主 和 屬組

      chown

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

      chown [OPTION]… –reference=RFILE FILE…    file 的主與rfile相同

            -R 遞歸

      chown user1:group1 file

      同時修改 file 的 屬主 屬組

      chown :group file

      chown user1: file 則 主 與 組 都修改為 user1

      以上兩條命令 簡單修改用戶屬性技巧

      chgrp group1 filp

            -R

            –reference=RFILE FILE  FILE 與 RFILE相同用戶組

此處再次重復以上回憶

    文件權限

      文件:

            r:可使用文件查看類工具獲得其內容

            w:可修改其內容

            x:可把文件提請到內核啟動為一個進程

      目錄:

            r:可ls查看目錄中的文件列表

            w:可在此目錄中創建文件,也可刪除此目錄內的文件

            x:可使用ls -l查看此目錄中的文件列表,可cd 進入此目錄

            X:只給目錄x權限,不給文件x權限(目錄內文件必須沒有x權限)

新建文件和目錄的默認權限

    

    默認權限 = 最大權限 – umask

      目錄

      文件:發現結果有奇數權限+1, 偶數權限不變

    umask值 

      新建file權限:666 – umask

          如果所得結果某位存在執行(奇數)權限,則將其權限+1

      新建dir 權限:777 – umask

      非特權用戶umask是 002

      

      root的 umask 是  022

      umask命令:

        umask #    :直接設定值 如umask 002

        

        umask -S 模式方式顯示

        umask -p 輸出可被調用

        全局設置: /etc/bashrc 用戶設置:~/.bashrc

linux 文件系統上的特殊權限

  SUID  SGID  Stiky

  前提:進程有屬主和屬組;文件有屬主和屬組

    1,任何一個可執行程序文件能能啟動為進程:取決于發起者對程序文件是否擁有執行權限

    2,啟動為進程之后,其進程的屬主衛發起者;進程的屬組為發起者所屬的組

    3,進程訪問文件時的權限,取決于進程的發起者

      a 進程的發起者,同文件的屬主:則應用文件屬主權限

      b 進程的發起者,屬于文件屬主;則應用文件屬組權限

      c 應用文件“其他”權限

  可執行文件上SUID權限

    任何一個可執行程序文件能不能啟動為進程:取決于發起者對于程序文件是否擁有執行權限

    啟動為進程之后,其進程的屬組為原程序文件的屬主

    SUID只對二進制可執行程序有效

    SUID設置在目錄上無意義

    權限設定:

            chmod u+s file…

            chmod u-s file…

  可執行文件上SGID權限

    任何一個可執行程序文件能不能啟動為進程:取決于發起者對于程序文件是否擁有執行權限

    啟動為進程之后,其進程的屬組為原程序文件的屬組

    權限設定:

            chmod g+s FILE…

            chmod g-s file…

  目錄上的SGID權限

    默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組

    一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組

    通常用于創建一個協作目錄

    權限設定:

            chmod g+s DIR…

            chmod g-s DIR…

  Sticky位

    具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權

    在目錄設置Sticky位 ,只有文件的所有者或root可以刪除該文件

    

    sticky設置在文件上無意義

    權限設定:

            chmod o+t DIR…

            chmod o-t DIR…  

  SUID SGID STICKY

   4     2     1

   chmod 7777 xxx

   chmod 4777 xxx 

權限位映射

  SUID  :user,占據屬主的執行權限位

        s:屬主擁有x權限

        S:屬主沒有x權限

  SGID  :group,占據屬組的執行權限位

        s:group擁有x權限

        s:group沒有x權限

  Sticky:other,占據other的執行權限位

        t:other擁有x權限

        T:other沒有x權限 

總結

    SUID 只能作用在2進制的程序上

    Sticky 只能作用在目錄上

    sgid 作用在二進制的程序上:用戶運行該程序是,自動繼承該 程序所屬組的權限

    chmod g+s file

    sgid 作用在目錄上時,該目錄內新建的文件或目錄的所屬組自動繼承該目錄的所屬組

    chgrp groupname dir; chmod g+s dir

設定文件特殊屬性

  chattr +i file…   給文件設特殊屬性  即使root 也不能刪除、改名、更改內容

  chattr -i file…

  chattr +a file…   給文件設特殊屬性  即使root…  

  只能追加內容 不能刪除、改名、更改內容

  lsattr file 顯示文件的特殊屬性

訪問控制列表

  ACL

      除了文件的所有者,所屬組合其他人,可以對更多的用戶設置權限

    getfacl file/directory  查看文件或目錄的訪問控制列表

    setfacl -m u:user:rwx file

    setfacl -m g:user:000 dir 

    給 特殊user 文件或目錄 添加訪問特殊權限

    setfacl -M file.txt file/dir

    創建指定文件 

        文件內容

        u:user1:0

        g:group1:rwx

        u:user2:rw

    setfacl -Rm g:group1:rw file/dir

    setfacl -m d:u:user1:rx dir

              d  默認 該目錄下后創建的都賦予user1特殊權限

    setfacl -x u:user1 file/dir

    刪除 user1 的特殊訪問權限

    setfacl -X file.txt dir

        創建文件 file.txt  并刪除文件內的用戶或組的特殊訪問權限

     ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限

     getfacl可看到特殊權限:flags

     默認ACL權限給了x,文件也不會繼承x權限。

     base ACL 不能刪除

     setfacl-k dir 刪除默認ACL權限

     setfacl-b file1清除所有ACL權限

     getfaclfile1 | setfacl–set-file=-file2 復制file1的acl權限給file2

訪問控制列表

maskmask只影響除所有者和other的之外的人和組的最大權限

[root@Centos7 testdir]# setfacl -m u:user1:rw xxx

[root@Centos7 testdir]# setfacl -m u:user2:r xxx

[root@Centos7 testdir]# setfacl -m u:user3:rwx xxx

[root@Centos7 testdir]# getfacl xxx

# file: xxx

# owner: root

# group: root

user::rw-

user:user1:rw-

user:user2:r–

user:user3:rwx

group::r–

mask::rwx

other::r–

這三個用戶我想都只有rw 權限 可直接用mask來改 

[root@Centos7 testdir]# setfacl -m mask::rw xxx

[root@Centos7 testdir]# getfacl xxx

# file: xxx

# owner: root

# group: root

user::rw-

user:user1:rw-

user:user2:r–

user:user3:rwx      #effective:rw-

group::r–

mask::rw-

other::r–

練習

    在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如alice能對這些新文件有讀寫權限,組g3的成員如tom 只能對新文件有讀權限,其他用戶(不屬于g1,g2,g3)不能訪問這個文件夾

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

(0)
Nicolas ZhaoIVNicolas ZhaoIV
上一篇 2016-08-08
下一篇 2016-08-08

相關推薦

  • LVM

    LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地…

    Linux干貨 2016-12-17
  • 馬哥教育網絡班21期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 集線器(HUB)是在OSI模型的第一層——物理層——連接多臺主機、延長網絡的設備。其主要功能是將從一個端口接收到的數據包轉發給所有端口。中繼器(Repeater)是將由電纜傳過來的電信號或光信號調整波形和放大再傳給另一個電纜的設備,提供多端口服務的中繼器稱作集線器。二者的主要區別…

    Linux干貨 2016-09-05
  • 數據庫簡介和簡單操作

    數據庫 數據庫是數據的匯集,它以一定的形式存儲在存儲介質上 數據庫的發展史 萌芽階段:文件系統,使用磁盤文件來存儲數據 初級階段:第一代數據庫,出現了網狀模型、層次模型的數據庫 中級階段:第二代數據庫,關系型數據庫和結構化查詢語言 高級階段:新一代數據庫,“關系-對象”型數據庫 數據庫管理系統和文件管理系統 文件管理系統的缺點是: 編寫應用程序不方便 數據冗…

    2017-12-04
  • python-多進程

    進程是由系統自己管理的。 1:最基本的寫法 from multiprocessing import Pool def f(x):     return x*x if __name__ == '__main__': &nb…

    Linux干貨 2016-11-05
  • linux進程及作業管理

    linux進程及作業管理 cpu指令權限等級: 特權級也叫hierarchical protection domains, 有的也叫用戶態. 是一種用來保護數據和阻止惡意行為的機制. 電腦操作系統提供不同權限訪問級別的資源. 特權級分為四級, 特權級0,1,2,3. 在windows中只使用特權級0和特權級3, 特權最高的是特權級0, 可以直接操作硬件, 如…

    Linux干貨 2016-09-19
  • tomcat基礎-如何給Tomcat前端加反向代理服務器

    Tomcat可以做為反向代理服務器的組件有很多,例如使用nginx,如果使用nginx,Tomcat就只能使用http連接器,另外一種是apache。如果是使用httpd,Tomcat兩種連接器都能發揮作用,例如可以使用http連接器,也可以使用ajp連接器,

    Linux干貨 2018-03-19
欧美性久久久久