Linux用戶與權限管理

由于Linux是多用戶、多任務系統,出于一些需要,當我們創建的文件希望對一部分用戶開放,對一部分用戶隱藏的時候應該怎么辦呢?這樣的話,就需要涉及到Linux系統中對用戶以及對文件權限的管理。

一、相關文件

Linux中,一切配置文件都是以文本文檔的方式來保存的,同樣用戶的信息也保存在系統的一些文件中,其位置為/etc/passwd。此文件只有root用戶具有查看與修改權限,以保證用戶信息的安全性。下面介紹一下passwd文件中的一些具體內容。

  

passwd.PNG

從上圖中可以看到,文件中的每一行都代表系統中的一個用戶,而且每一行都具有相同的格式,包含7個字段,每個字段的具體含義如下圖所示:

  

-etc-passwd文件結構.PNG

在第二列中存放的為賬號的密碼,但可以看到每個賬戶都是x,這是由于系統處于安全考慮,將用戶密碼單獨存放在/etc/shadow文件中,打開shadow文件,可以看到以下信息。

blob.png

我們以root的密碼行來看一下shadow文件中的每一行都包含什么內容。

-etc-shadow文件結構.PNG

在內容中,包含很多與密碼有關的時間概念,我們來詳細敘述一下:

    • 最近一次修改密碼的時間:以上一次修改密碼的時間距離197011日的天數來表示;

    • 密碼最短使用期限:表示密碼修改完成后,在此期限內不得修改密碼;

    • 密碼最長使用期限:即為到達此期限后,需要修改密碼;

    • 警告時間:在密碼到期前的此期限內,會提示用戶修改密碼;

    • 密碼失效日期:超出密碼最長使用期限后,用戶在此期限內登錄系統時,系統會強制用戶更改密碼,但此期限內賬戶不會被鎖定;

    • 賬號失效日期:以距離197011日的天數來表示,到達此期限后,用戶賬號將失效;

了解了passwd中第二字段密碼的相關內容后,在第三字段表示的是用戶的UID。在Linux中,對用戶的識別是依靠UID來完成的,系統對于不同用戶的UID有不同的劃分。管理員的UID0,也就是說,只要用戶的UID0,其便擁有root權限。在CentOS7中,系統用戶的UID1999,普通用戶為100065535

GIDpasswd文件中第四字段的內容,其代表用戶的基本組。組在Linux權限管理中是一個重要的概念,當我們需要一類用戶具有一些相同的權限時,可以將這些用戶劃分為一個用戶組,統一管理。對于同一個用戶,其可以屬于多個組,但在這些組中,只有一個是屬于用戶的基本組,其余組我們稱為用戶的附屬組。系統中用戶的組的信息存放在/etc/group文件中,文件內容包含組名稱、組密碼、GID、以此組為附屬組的用戶列表四部分。除了/etc/group外,還有文件/etc/gshadow同樣存放著用戶組的信息,包含組名稱、組密碼、組管理員、以此組為附屬組的用戶列表四項內容。

二、用戶管理

介紹了用戶與用戶組的相關概念后,那么具體我們應該如何在系統中創建一個新的用戶呢?可以使用useradd命令,其具體用法如下:

useradd [options] LOGIN

       我們對命令中一些比較重要的選項做一下介紹:

??-u,–uid UID:直接指定一個特定的UID給此賬號

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

??-g,–gid GROUP:直接指定用戶的基本組

??-G,–groups GROUP1[,GROUP2][,GROUP3]…[,GROUPN]:指定用戶的(一個或多個)附加組

??-m,–creat-home:強制!要創建用戶主文件夾(一般賬號默認值)

??-M,–no-create-home:強制!不要創建用戶主文件夾(系統賬號默認值)

??-N:不創建私有組做基本組,使用users組做主組

??-c,–comment COMMENT:給定用戶的注釋內容(/etc/passwd文件中第五列)

??-d,–home-dir HOME_DIR:指定用戶的主文件夾(必須使用絕對路徑),不使用默認值

??-r,–system:創建一個系統賬號

??-s,–shell SHELL:指定用戶的shell

??-e,–expiredate EXPIRE_DATE:后面接一個日期,格式為"YYYY-MM-DD",此選項可寫入/etc/shadow第八字段,即賬號失效日期的設置

??-f,–inactive INACTIVE:設置密碼過期后的賬號寬限時間(/etc/shadow第七字段),0為過期后立刻失效,-1為過期后永不失效(密碼只會過期而強制與登錄時重新設置而已)

了解了useradd的語法與相關選項后,我們使用此命令創建一個如下要求的用戶:用戶名為centos,UID=1500,基本組為g1,附屬組為g2g3,賬號注釋信息為centos7.2,用戶shell/bin/csh,賬號失效日期為201711日。

useradd.PNG

 除了我們單獨定義的一些選項,那么在創建新用戶時,系統又會使用哪些默認配置呢?我們可以通過useradd –D來進行查看。

useradd-D.PNG

同樣的,對于新建用戶的密碼,系統同樣有一些默認配置保存在文件/etc/login.defs中,可以自行查看。

在創建了用戶后,我們一般需要對密碼進行一些設置,這時,我們一般使用到的命令為passwd,下面對此命令做一些介紹:

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

–stdin:可以通過來自前一個管道的數據,作為密碼輸入

-l,–lock:鎖定用戶,會在/etc/shadow第二列最前面加上!使密碼失效

-u,–unlock:解鎖鎖定用戶

-S:列出密碼相關參數,即/etc/shadow文件內的大部分信息

-n,–minimum DAYS:后面接天數,密碼的最短使用期限;/etc/shadow中第4字段

-x,–maximum DAYS:后面接天數,密碼的最長使用期限;/etc/shadow中第5字段

-w,–warning DAYS:后面接天數,密碼過期前的警告天數;/etc/shadow中第6字段

-i,–inactive DAYS:后面接天數,密碼的失效日期;/etc/shadow中第7字段

-e,–expire:令密碼失效,即用戶下次登錄時強制更改密碼

現在,我們對centos用戶的密碼進行如下設置:密碼為centos7,最短使用期限為3天,最長使用期限為60天,在密碼過期前5天發出警告,超出密碼最長使用期限后將在10天后失效。

passwd-1.PNG

有些時候,我們需要對用戶的一些設置進行更改,如shell類型、家目錄等。那么,我們就需要使用usermod命令來進行這些更改,此命令的具體用法如下:

?   usermod [options] LOGIN

-c,–comment COMMENT:后接賬號的說明,即/etc/passwd第五列的說明,可以加入一些賬號的說明

-d,–home HOME_DIR:后面接賬號的主文件夾,即修改/etc/passwd的第六列

-e,–expiredate EXPIRE_DATE:后面接日期,格式是YYYY-MM-DD,也就是在/etc/shadow內的第八個字段數據(賬號失效日期)

-f,–inactive INACTIVE:后面接天數,為shadow的第七字段(密碼失效日期)

-g,–gid GROUP:后面接用戶基本組(可以為組名,也可為GID),修改/etc/passwd的第四個字段,即GID字段

-G,–groups GROUP1[,GROUP2][,GROUP3]…[,GROUPN]:后面接用戶附加組,可修改用戶的附加組

-a,–append:與-G結合使用,可增加用戶的附加組而非修改

-l,–login NEW_LOGIN:后面接賬號名稱以修改用戶名稱

-L,–lock:鎖定用戶密碼,使其無法登陸(即在/etc/shadow的密碼前加!

-U,–unlock:解鎖鎖定用戶(即將/etc/shadow中密碼前的!去掉)

-s,–shell SHELL:修改用戶的shell類型

-u,–uid UID:修改用戶的UID

下面我們用此命令來對centos用戶進行一些修改,將其用戶名更改為centos7,UID=1600,默認shell/bin/bash,注釋信息更改為Linux centos7,家目錄為/testdir/centos7,增加附屬組root,并將賬號失效日期設為201761日。

usermod.PNG

       當我們出于需要需刪除一些用戶時,就要使用到userdel命令了,其用法如下:

userdel [options] LOGIN

-r,–remove:連同用戶的主文件夾一并刪除

三、用戶組管理

在上面我們介紹到用戶屬組的概念,每個用戶可以屬于多個組,但當我們新建一個文件時,此文件的屬組應該屬于用戶的哪個組呢?在這里就要涉及到用戶有效組了。

當用戶創建文件時,文件的屬組其實是用戶當前的有效組,默認情況下,用戶的基本組即為用戶的有效組,但我們可以通過chgrp命令來切換用戶的基本組。

blob.png

但在此,需要注意用戶切換的有效組只能是用戶的屬組,而且通過mewgrp命令切換有效組是通過重新開啟一個shell來提供的,所以在回到原來環境時,需要輸入exit推出。

了解了用戶有效組后,下面來看一下在系統內對用戶組的相關操作。在新建用戶組時,我們通過groupadd命令來實現,并可以在創建時定義相關屬性。使用groupmod命令修改用戶組的相關屬性;在刪除用戶組時使用groupdel命令;下面看一下三個命令的相關內容。

groupadd [options] group

-g,–gid GID:后面接某個特定的GID,用來指明GID

-r,–system:新建系統用戶組

groupmod [options] GROUP

-g,–gid GID:修改用戶組的GID

-n,–new-name NEW_NAME:修改用戶組的組名

groupdel [options] GROUP

我們通過實際應用來看一下這三個命令在系統中的具體實現,

group.PNG

但需要注意的是,通過groupdel命令是不可以刪除用戶的基本組的。

我們知道用戶組是用來管理具有相同權限的一類用戶的,那么對于對組內用戶的管理便應該成為組管理的重點。我們通過gpasswd命令來對用戶組的成員與密碼進行管理。

gpasswd [option] group

-a,–add USER:將某位用戶加入到用戶組中(組管理員可用)

-d,–delete USER:將某位用戶移出用戶組(組管理員可用)

-A,–adeministrators USER,…:設置有管理權限的用戶列表(用戶組管理員,用戶組管理員可以不屬于此用戶組)

-M,–members USER,…:將某些賬號加入到用戶組當中

-r,–remove-password:刪除用戶組的密碼

-R,–restrict:使用戶組的密碼失效

現在,我們要通過此命令實現如下的功能,將用戶myuser2加入到組grouptest中,將用戶myuser3從組中移除,并將myuser1設為組管理員;

gpasswd.PNG

四、文件權限管理

設置用戶與組的目的是為了更好的管理權限,那么在了解了系統中組和用戶的管理后,我們來看一下對文件權限的一些管理。當我們用ls查看文件屬性時,可以看到如下的內容,每段內容均有其對應的含義。

       

文件屬性示意圖.PNG

對于文件來說,用戶分為屬主,屬組與其他用戶三類,對于每類用戶分別分配不同的權限。從上圖可以看到,每類用戶分別有三位權限位,分別為:r(read)w(write)、x(execute)。需要注意的是,此三類權限對于文件與目錄的意義是不完全一樣的。

對于文件來說,

r:可讀取此文件的實際內容

w:可以編輯、新增或者是修改該文件的內容(但不含刪除該文件)

x:該文件具有可以被系統執行的權限

對于目錄而言,

r–read contents in directory:具有讀取目錄結構列表的權限,但無法獲取目錄內文件的詳細信息;

w–modify contents of directory:具有更改目錄結構列表的權限,包括:新建新的文件和目錄;刪除已經存在的文件或目錄(不論該文件的權限如何);將已存在的文件或目錄重命名;轉移該目錄內的文件、目錄位置;

x–access directory:具有進入該目錄成為工作目錄的權限;如果用戶對某目錄不具有x權限,那么就無法切換到該目錄下,也就無法執行該目錄下的任何命令,即使具有該目錄的r權限;

假如對于權限位按照二進制進行標定,具有相應權限位的權限標定為1,不具有相應權限位的權限標定為0,則每類用戶的權限都只有以下八種,我們可以用八進制數來分表代表每一類用戶權限:

       

八進制權限.PNG

了解了以上權限相關內容,下面來看如何對文件權限進行管理,涉及到一個比較重要的命令——chmod,來看一下其具體用法:

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

chmod [OPTION]… OCTAL-MODE FILE…

chmod [OPTION]… –reference=RFILE FILE…

-R,–recursive:進行遞歸的持續修改,即連同子目錄下的所有文件都會更改

上面我們介紹了權限的各種表示方法,那么同樣,對于權限的修改,我們也有以下幾種表達方式:

直接對某類用戶進行賦權

??u=[r][w][x],g=[r][w][x],o=[r][w][x],ug=[r][w][x],uo=[r][w][x],go=[r][w][x],a=[r][w][x]

對某類用戶的權限位進行更改

??u[+-][s][r][w][x],g[+-][s][r][w][x],o[+-][s][r][w][x],ug[+-][s][r][w][x],uo[+-][s][r][w][x],go[+-][s][r][w][x],a[+-][s][r][w][x]

其中在給用戶賦予x權限時,可使用大寫X,其代表特定意義:只給目錄執行權限,不給文件執行權限,在遞歸修改目錄的權限時比較有用,避免賦予目錄下的文件執行權限

數字賦權

??xyzx–用八進制數字表示的屬主權限;y–用八進制數字表示的屬組權限;z–用八進制數字表示的其他用戶權限;

注:在使用+、更改權限的情況下,只要是沒有被指定到的選項,則該權限不會變動;[]代表其內的內容可選;其中s代表特殊權限,后面詳述;

現在加入需要對文件賦予644的權限,我們可以使用以下方法:

chmod.PNG

五、umask

了解了權限更改,那么對于新建文件,系統默認會賦予什么樣的權限呢,這里就牽涉到umask的概念了。我們先通過umask命令查看一下root用戶的umask

       

umask.PNG

那么umask具體代表什么含義呢?我么就以rootumask=022來討論(第一位0對應為特殊權限,在此先不討論)。前面我們說了可以以八進制數據來表示,那么022代表的就是—-w–w-。當我們創建新文件時,就將最大權限的相應權限位去除即為系統默認權限。需要注意的是,由于普通文件默認是沒有執行權限的,所以新建文件時的最大權限是666rw-rw-rw-),目錄為777rwxrwxrwx)。因此新建文件的默認權限就應該為rw-r–r–=644,新建目錄的默認權限應為rwxr-xr-x=755,我們來看一下:

umask默認權限.PNG

了解了umask的作用機制后,我們來看一下如何查看與設定用戶的umask

umask [-p] [-S] [mode]

-p:輸出可被調用,比如可被管道命令作為標準輸入使用

-S:以符號形式顯示默認權限

umask:以數字形式顯示umask

umask 數字形式的umask:直接設定umask

umask -S 符號形式的默認權限:直接設定默認權限

六、文件屬主與屬組

在理解了文件的基礎權限后,我們看一下文件的屬主與屬組,其在上述文件屬性的第三與第四字段。我們已經知道文件的權限分配分為屬主權限,屬組權限與其他用戶權限。那么又該如何管理文件的屬主與屬組呢?有以下兩個命令:

chgrp – change group ownership?改變文件所屬用戶組

chgrp [OPTION]… –reference=RFILE FILE…

-R,–recursive:進行遞歸持續更改,即連同目錄下的所有文件與子目錄

chown – change file owner and group?改變文件所有者與所有組

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

chown [OPTION]… –reference=RFILE FILE..

-R,–recursive:進行遞歸的持續更改,即連同目錄下的所有文件與子目錄

注:chown OWNER: FILE?修改文件的所有者,并將文件的所有組修改為與屬主同名的組;chown :GROUP FILE?只修改文件的所有組

現在我們將屬主與屬組皆為root的文件更改為屬主為centos7,屬組為group1

       

chown.PNG

七、特殊權限

Linux系統中,任何一個可執行程序文件能不能啟動為進程,取決于發起者對程序文件是否擁有執行權限;啟動為進程之后,其進程的屬主為進程發起者,進程的屬組為為進程發起者的屬組;進程訪問文件時的權限,取決于進程的發起者,進程的發起者,同文件的屬主,則應用文件屬主權限;若屬于文件屬組,則應用文件屬組權限;其他情況,應用文件的其他用戶權限。那么假如一些文件只對屬主或屬組有權限,但又需要其他用戶在執行某些命令時能夠對該文件具有屬主或屬組的權限應該怎么辦呢?這里就需要能夠了解文件的特殊權限——SUID、SGID、STICKY。

       

blob.png

當我們查看某些目錄或文件時,會看到權限位有非rwx-的字符,這些就是文件的特殊權限。先來看一下SUID。

SUID僅對二進制程序有效,首先要求執行者對于該程序需要具有x可執行權限,當賦予特殊權限時執行者將具有該程序所有者的權限,但特殊權限僅在執行該程序的過程中有效。SUID目錄是無效的而且不能夠用在shell script上面,因為shell script只是將很多的二進制執行文件調進來執行而已。所以SUID的權限部分,還是要看shell script調用進來的程序的設置,而不是shell script本身。

SUID不同,SGID針對文件和目錄都可使用。但對兩者使用的意義不完全一樣。

當對文件使用時,其同樣只對二進制程序有效,而且執行者對于該程序需要具有x的執行權限,滿足上述條件后,那么執行者在執行的過程中將會獲得該程序所屬用戶組的權限。

當對目錄使用時,若用戶對于此目錄具有rx的權限時,該用戶能夠進入此目錄,用戶在此目錄下的有效用戶組將會變成該目錄的用戶組,若用戶在此目錄下還具有w的權限,則用戶所創建的新文件的用戶組與此目錄的用戶組相同。

而對于STIKY,其僅對目錄有效,其作用效果為,當用戶對此目錄具有w,x權限時,用戶在該目錄下創建的文件或目錄,僅有自己與root才有權利刪除該文件。

對于特殊權限,我們同樣可以使用八進制數來表示

       八進制特殊權限位.PNG

了解了特殊權限后,那么該如何設置特殊權限呢?有兩種方法:

第一種是直接賦權:chmod [u+s] [g+s] [o+t] FILE

第二種是數字賦權:chmod abcd FILE

    其中,a代表特殊權限位的八進制數字,bcd代表標準權限位的八進制數字。

八、ACL

現在,我們知道,對于文件而言,權限的分配分為屬主,屬組與其他用戶三類;假如需要讓一些用戶擁有除屬主,屬組,其他人之外的一些權限,這時候就需要用到ACL——訪問控制列表了。那么如何設置與查看ACL呢,主要用到以下兩個命令:

setfacl – set file access control lists?設置文件訪問控制列表

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …

setfacl –restore=file

-m,–modify:設置后續的acl參數給文件使用,不可與-x合用

-x,–remove:刪除后續的acl參數,不可與-m合用

-b:刪除所有的ACL設置參數

-k:刪除默認的ACL參數

-R:遞歸設置ACL,亦即包括子目錄都會被設置起來

-d:設置默認的ACL參數,只對目錄有效,在該目錄新建的數據會引用此默認值

復制file1ACL權限給file2

getfacl file1 | setfacl –restore=file2

ACL參數格式:

針對特定用戶的方式:?u:[用戶賬號列表]:[r][w][x];當無用戶賬號列表時,代表設置該文件所有者;

針對特定用戶組的方式:?g:[用戶組列表]:[r][w][x];當無用戶組列表時,代表設置該文件所屬組;

針對有效權限mask的設置方式:?m:[r][w][x];

針對默認權限的設置方式:?d:[ug]:用戶|用戶組列表:[r][w][x];對目錄進行默認權限設置后,可以讓這些屬性繼承到子目錄下面;

需要注意的是:ACL文件上存在的mask值,其影響除所有者和other的之外的人和組的最大權限,mask與用戶的權限進行邏輯與運算后,才能變成有效的權限(effective permission)也就是說用戶或組的設置必須存在于mask權限設定范圍內才會生效。

getfacl – get file access control lists?查看文件訪問控制列表

getfacl [-aceEsRLPtpndvh] file …

getfacl [-aceEsRLPtpndvh] –

現在假如我們需要對新建目錄dir進行權限分配為rwxr-x—,使其本身與其下新建的文件屬組均為group1,而且要求group2的成員對此目錄及其內的文件具有rwx權限。

setfacl.PNG

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

(0)
luoliumengluoliumeng
上一篇 2016-08-05
下一篇 2016-08-05

相關推薦

  • https搭建

    https             http over ssl = https 443/tcp                 ssl: v3           &nb…

    Linux干貨 2016-06-28
  • 馬哥教育網絡班21期-第5周課程練習

    第5周課程練習 1、 顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; # grep "^[[:space:]]\+" /boot/grub/grub.conf 2、 顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; # egrep "…

    Linux干貨 2016-08-02
  • 網絡理論基礎

    一、網絡概述   1、什么是網絡     網絡就是通過有線或無線技術將各種硬件設備連接起來進行數據傳輸的一種方式。   2、網絡的分類     根據距離范圍可以將網絡劃分為局域網和廣域網。       局域網:傳輸距離較近,傳輸速率快。     &n…

    Linux干貨 2016-01-11
  • shell腳本編程進階

    一些常用的編程語句,

    2017-12-23
  • find 和 壓縮工具

    find命令 一、find命令基本介紹 1、find作用 通過遍歷指定路徑實時查找符合條件的文件。 find工作特點 2、find工作特點 ?查找速度較慢 ?精確查找 ?實時查找 ?用戶只能搜索有讀取和執行權限的目錄 3、語法 find [OPTIONS]… [查找路徑] [查找條件] [處理方式] 查找路徑:指定…

    Linux干貨 2016-08-16
  • N22-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 # cp -r /etc/skel /home/tuser1 # chmod 700 /home/tuser1 2、編輯/etc/group文件,添加組h…

    Linux干貨 2016-09-06

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-08 21:00

    文章整體結構層次清晰,有理論有實踐,圖文并貌。

欧美性久久久久