Linux User and Group、Mode Management
早期Linux系統(tǒng)設(shè)計(jì)為了能夠?qū)崿F(xiàn)多用戶、多進(jìn)程高效的利用服務(wù)器資源,在此種情況下,為了能夠保證用戶與用戶之間的文件不被隨意的訪問及修改、刪除等操作,用戶、組的管理能在某種程序上實(shí)現(xiàn)管理用戶或批量管理用戶。由于Linux的設(shè)計(jì)哲學(xué)思想『一切皆文件』,用戶對(duì)設(shè)備的訪問就是對(duì)文件的訪問。
此章節(jié)涉及到的命令匯總
useradd,usermod,userdel,groupadd,groupdel,groupmod,passwd,gpasswd,newgrp,su,id,chmod,chown,chgrp,setfacl,getfacl
==============
理論相關(guān)
User:
管理員
UID:0,GID:0
系統(tǒng)用戶
UID:1-499 GID:1-499(Centos6)
UID:1-999 GID:1-999(Centos7)
普通用戶
UID:500-60000 GID:500-6000(Centos6)
UID:1000-60000 GID:1000-60000(Centos7)
group:
分類一:
系統(tǒng)組
普通用戶組
分類二:
基本組
附加組
分類三:
私有組
公有組
注:組的UID、GID跟用戶的分配類似
File Mode:
Linux系統(tǒng)安全上下文:
當(dāng)一個(gè)用戶發(fā)起一個(gè)進(jìn)程時(shí),此進(jìn)程將繼承用戶的屬主、屬組的權(quán)限,再以進(jìn)程繼承的權(quán)限來控制文件的訪問權(quán)限。
Linux權(quán)限標(biāo)識(shí):
r: Readable 讀
W: writable 寫
x: executable 執(zhí)行
rwx標(biāo)識(shí)對(duì)文件及目錄的意義:
對(duì)文件:
r : 可以讀取文件中的內(nèi)容
w : 可以修改及刪除文件中的內(nèi)容
x : 可以將其發(fā)起為一個(gè)進(jìn)程
對(duì)目錄:
r : 可以查看目錄中的文件,可以使用ls命令, 但不能使用 -l選項(xiàng)
w : 可以創(chuàng)建、刪除目錄,但不能修改文件中的內(nèi)容
x : 可以使用cd命令進(jìn)入目錄
文件及目錄權(quán)限詳細(xì)表示方面
文件:-rwxrwxrwx
從左邊第二位開始,每三位代表一個(gè)權(quán)限類別:
u : owner
g : owner group
o : other
a : 代表以上三項(xiàng)
目錄:drwxrwxrwx
u、g、o同文件權(quán)限位
Linux內(nèi)核對(duì)文件權(quán)限的表示方法:
rwx: 4 2 1
Umask Mode Control
Linux對(duì)初始權(quán)限的控制來自于Umask的設(shè)定,其工作原理如下:
對(duì)新建立的文件:
666 - Umask值(由于Linux對(duì)文件的執(zhí)行權(quán)限控制很嚴(yán)格,默認(rèn)取消了文件的執(zhí)行權(quán)限,所以這里是666)
對(duì)新建立的目錄:
777 - Umask值
Umask對(duì)管理員ROOT的初始值:022
Umask對(duì)普通用戶的初始值為:002
普通用戶建立的文件及目錄權(quán)限如下:
文件:
666-002=664 (如果減得的結(jié)果為奇數(shù),就自動(dòng)加1)對(duì)應(yīng)的權(quán)限如下:
-rw-rw-r--
目錄:
777-002=775 ,對(duì)應(yīng)的權(quán)限如下:
drwxrwxr-x
對(duì)管理員root建立的文件及目錄權(quán)限如下:
文件:
666-022=644,對(duì)應(yīng)的權(quán)限如下:
-rw-r--r--
目錄:
777-022=755,對(duì)應(yīng)的權(quán)限如下:
drwx-r-xr-x
注:Umask的值可以使用umask命令來設(shè)置,但只對(duì)當(dāng)前進(jìn)程(即shell)有效,如要長(zhǎng)期有效,需將此值設(shè)置到/etc/profile文件中,或者家目錄下的.開頭的文件中
===================
Configuration file for Linux system
User:
`/etc/passwd` (記錄用戶的詳細(xì)信息)
`/etc/shadow` (記錄用戶的密碼信息)
Group:
`/etc/group` (記錄組的詳細(xì)信息)
`/etc/gshadow` (記錄組的密碼信息)
定義創(chuàng)建用戶時(shí)的默認(rèn)配置信息:
`/etc/default/useradd`(記錄創(chuàng)建用戶所需設(shè)定的值)
useradd -D 可以設(shè)置對(duì)應(yīng)的參數(shù)
`/etc/login.defs`(配置創(chuàng)建用戶預(yù)設(shè)詳細(xì)參數(shù))
對(duì)應(yīng)文檔的格式說明
/etc/passwd
root:x:0:0:root:/root:/bin/bash
用戶名:密碼:UID:GID:用戶注釋信息:用戶家目錄:Shell定義
- 用戶名: 用戶的名稱
- 密碼: X表示占位符,也可以是密碼
- UID: 用戶識(shí)別代碼
- GID: 用戶所屬組的GID(基本組)
- 用戶注釋信息:Comment,可以完善用戶的基本信息
- 用戶家目錄: 系統(tǒng)登錄用戶后的工作目錄
- shell: 定義用戶登錄系統(tǒng)所使用的shell,指定的shell需要在/etc/shells中出現(xiàn)
/etc/shadow
root:$6$YqkEsOcfKPptyhnS$YD0ym4BZ52pzcCnU....:16781:0:99999:7:::
用戶名:密碼:上一次修改密碼的時(shí)間:密碼最小使用期限:最長(zhǎng)使用期限:警告時(shí)間:帳戶過期時(shí)間:保留字段
- 用戶名: 用戶的名稱,對(duì)應(yīng)/etc/passwd文件中
- 密碼: Centos6中使用MD5加密算法,Centos7中使用sha1的算法,第一個(gè)$后面加密算法類型,第二個(gè)$后面表示salt,第三個(gè)$后面表示密碼的提取碼(參照加密類型)
- 上一次修改密碼的時(shí)間: 指用戶上次修改密碼的時(shí)間,計(jì)算方法:從Linux元年1970年01月01日0點(diǎn)0分到目錄所經(jīng)過的秒數(shù)
- 密碼最小使用期限: 指用戶修改密碼后,需要到多少天后方可更改密碼,0表示禁用
- 密碼最長(zhǎng)使用期限: 指用戶的密碼到多少天后需要修改密碼
- 警告時(shí)間: 指用戶密碼到期前多少天提示用戶修改密碼,0和空字段表示禁用此功能
- 帳戶過期時(shí)間: 批帳戶在密碼過期后多少天還未修改密碼,將被停用
/etc/group
root:x:0:
組名:密碼:GID:User_list
- 組名:組的名稱,默認(rèn)同名用戶名
- 密碼: 組的密碼占位符,用于用戶臨時(shí)切換至需要的組以獲取相應(yīng)權(quán)限,可以使用
newgrp - GROUP_NAME
切換 - GID:組的全局識(shí)別號(hào)
- User_list:隸屬此組的用戶,多個(gè)用戶使用","隔開
/etc/gshadow
root:$6$PLRAi/Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO.::
組名:密碼:組管理者:User_list
- 組名:組的名稱,同步/etc/group文件中
- 密碼:第一個(gè)$后面表示加密算法,第二個(gè)$后面表示加密的密碼
- 組管理者:可以對(duì)此組成員有操作權(quán)限,如果有多個(gè),可以用逗號(hào)隔開
- User_list: 用戶的列表,如果有多個(gè),可以使用逗號(hào)隔開
=============
Linux管理用戶的相關(guān)命令
添加用戶:
`useradd` - create a new user or update default new user information
synopsis: useradd [options] LOGIN
useradd -D [options]
options:
-u : 指定用戶的UID
-g : 指定GID
-c : 指定注釋信息,如果有空格,需要使用" "包含
-d : 指定用戶家目錄,創(chuàng)建用戶時(shí),會(huì)自動(dòng)將/etc/skel中的文件復(fù)制到用戶家目錄下,如果指定的文件存 在將不會(huì)復(fù)制文件,如果父目錄不存在,創(chuàng)建也將會(huì)失敗
-s : 指定用戶shell
-r : 指定創(chuàng)建一個(gè)系統(tǒng)用戶
-M :不創(chuàng)建用戶家目錄
-G : 指定附加組,多個(gè)使用逗號(hào)隔開
-D :修改創(chuàng)建用戶的配置信息,文件位于/etc/default/useradd
注:創(chuàng)建用戶時(shí)的諸多默認(rèn)設(shè)定配置文件為/etc/login.defs
修改用戶:
`usermod` - modify a user account
synopsis: usermod [options] LOGIN
options:
-u : 修改用戶UID
-g : 修改用戶GID
-c : 修改用戶的注釋信息
-d : 修改用戶家目錄,需要配合使用-m選項(xiàng)才會(huì)自動(dòng)復(fù)制用戶家目錄下的文件到新的家目錄
-m : move-home to new directory
-s : 修改用戶的shell
-l : 修改用戶的登陸名,即login名稱
-G : 修改用戶的附加組信息,需要配合-a(append)一起使用,如果不使用-a將刪除原來的附加組
-a : --append,連接多個(gè)附加組的參數(shù)
-L : 鎖定用戶,即lock,在/etcpasswd文件中,密碼前面加!(一個(gè))
-U : 解鎖用戶,即unlock,在/etc/passwd文件中,取消密碼前面的!號(hào)
刪除用戶
`userdel` - delete a user account and related files
synopsis: userdel [options] LOGIN
options:
-r : 刪除用戶的同時(shí)刪除用戶的家目錄,即--remove參數(shù)
用戶密碼設(shè)置
`passwd` - passwd - update user's authentication tokens
synopsis:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
1、passwd (修改自己的密碼)
2、passwd USERNAME(修改其他用戶的密碼,root權(quán)限 )
options:
-l : 鎖定用戶,在/etc/passwd的密碼前面加!!,
-u : 解鎖用戶,在/etcpasswd的密碼前!!取消
-d : --delete,刪除用戶密碼
-e DATE : --expire,設(shè)定過期時(shí)間
-i DAYS : 非活動(dòng)時(shí)間
-n days : 最短使用期限
-x days : 最長(zhǎng)使用期限
-w days : 警告期限
--stdin : `echo "PASSWD" | passwd --stdin root`
Linux管理組的相關(guān)命令
添加組
`groupadd` - create a new group
synopsis: groupadd [options] group
options:
-g : 指定GID號(hào)
-r : 指定為一個(gè)系統(tǒng)組
修改組
`groupmod` - modify a group definition on the system
synopsis: groupmod [options] GROUP
options:
-g : 修改GID號(hào)碼
-n : 修改組名稱 (groupmod -n NEW_GROUP OLD_GROUP)
刪除組
`groupdel` - delete a group
synopsis: groupdel GROUP_NAME
組密碼設(shè)置
`gpasswd` - administer /etc/group and /etc/gshadow
synopsis: gpasswd [option] group
options:
-a USER_NAME GROUP_NAME: 向組內(nèi)添加用戶
-d USER_NAME GROUP_NAME: 把用戶從組內(nèi)刪除
-r USER_NAMEG : 刪除組的密碼
臨時(shí)切換到其他組,好能夠獲取相應(yīng)權(quán)限
`newgrp` - log in to a new group
synopsis: newgrp [-] [group]
- : 模擬用戶登陸, 以實(shí)現(xiàn)重新初始化環(huán)境變量
查看用戶相關(guān)信息
`id` - print real and effective user and group IDs
synopsis: id [OPTION]... [USERNAME]
options:
-u : 查看UID號(hào)
-g : 查看GID號(hào)
-G : 查看附加組GID號(hào),其他包含基本組ID號(hào)
-n : 將各ID轉(zhuǎn)換為對(duì)應(yīng)的名稱
切換用戶
`su` - switch user
sysnopsis: su [-] USER
options:
- : 以登陸方式切換用戶,以完成用戶環(huán)境變量、配置信息加載
-c : 不用登陸用戶即可以以指定用戶執(zhí)行命令
`su - mariabd -c 'id -u'`
用戶權(quán)限管理
`chmod` - change file mode bits
sysnopsis: chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
options:
-r --recursive : 遞歸修改
--reference : 參照某文件來修改
Usage:
1、賦權(quán)等值法
chmod u=rwx,g=rwx,0=rwx FILE
chmod a=rwx FILE
2、賦權(quán)加減法
chmod u-rwx,g-rwx,o-rwx FILE
chmod ugo-x FILE
chmod u+rwx,go+r FILE
chmod a+r FILE
3、十進(jìn)制賦權(quán)法
chmod 777 FILE
4、參照賦值法
chmod --reference/var/log/file FILE
注意:1、在使用a+w的情況下,只有屬主才會(huì)加w,go是不會(huì)加上W權(quán)限
2、目錄有寫權(quán)限操作,但對(duì)目錄下的文件同有寫權(quán)限時(shí),用戶是不能寫文件、但有刪除文件的能力
=============
chmod自己沒有執(zhí)行權(quán)限的解決方法:
1、使用ACL控制修復(fù)
- 1、setfacl -m u:root:rwx /bin/chmod
- 2、/bin/chmod 755 /bin/chmod
- 3、setfacl -b /bin/chmod (-b表示清除所有ACL訪問規(guī)則 )
2、使用系統(tǒng)盤的emergency模式,使用光盤的chmod修改根文件系統(tǒng)中的chmod權(quán)限
=========
用戶屬主、屬組修改(ownership)
`chown` - change file owner and group
synopsis: chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
options:
-R : --recursive 遞歸修改
--reference : 參照某文件來修改
Usage:
chown mariadb FILE : 只修改文件的屬主為mariadb
chown mariadb:mariadb FILE :修改文件的屬主、屬組為mariadb
chown mariadb:mariadb FILE : 同上
chown --reference=/var/log/file FILE : 參照/var/log/file來修改FILE的屬主、屬組
`chgrp` - chgrp - change group ownership
synopsis: chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注:由于chgrp只能修改屬組,故一般情況都使用chown代替
=============
Useradd、Usermod、Userdel、groupadd、groupdel、groupmod參數(shù)匯總
通用參數(shù)
用戶管理類
useradd:
-u
-g
-c
-d
-s
-G
-r
-M
-D
usermod:
-u
-g
-c
-d
-s
-G
-a
-m
-l
-L
-U
userdel:
-r
id:
-u
-g
-G
-n
su
-c
說明:前四個(gè)命令中,命令使用的參數(shù)意義大體一樣,只是useradd 和userdel的-r
參數(shù)意義不一樣,前者表示為system,后者表示為remove,最后的su命令-c
表示為command的意義。
=========
passwd:
-d
-l
-u
-i
-e
-n
-x
-w
--stdin
說明:passwd與上者三個(gè)命令有重合的參數(shù)-l
,-u
與usermod -L
和-u
大小寫不一樣,userdel的-r
與passwd中的-d
表示不一樣,同為刪除,前者表示為remove,后者表示為delete.
=======
組管理類
groupadd:
-r
-g
groupmod:
-g
-n
groupdel:
無參數(shù)
說明:以上三個(gè)組管理命令 -g
-r
同管理用戶的命令,groupmod中的-n
代表為new的意義
========
Linux系統(tǒng)特殊權(quán)限
Linux的安全上下文:
- 進(jìn)程以某用戶的身份運(yùn)行,進(jìn)程是發(fā)起此進(jìn)程用戶的代理,因此以此用戶的身份和權(quán)限完成所有操作
- 權(quán)限匹配模型:
- 判斷進(jìn)程的屬主,是否為被訪問文件的屬主,如果是則應(yīng)用屋主的權(quán)限,否則進(jìn)入第二步;
- 判斷進(jìn)程的屬主,是否屬于被訪問文件的屬組,如果是則應(yīng)用屬組的權(quán)限,否則進(jìn)入第三個(gè)步
- 應(yīng)用Other權(quán)限
特殊權(quán)限位
一. SUID
SUID為什么需要?
默認(rèn)情況下,用戶發(fā)起的進(jìn)程,其運(yùn)行的進(jìn)程屬主是其發(fā)起者
SUID的作用
SUID模型就是為了改變上述情況的匹配模型,當(dāng)用戶運(yùn)行某程序時(shí),如果此程序擁有SUID權(quán)限,那么此程序運(yùn)行為進(jìn)程時(shí),進(jìn)程的屬主不再是進(jìn)程的發(fā)起者,而是程序文件自己的屬主。
SUID實(shí)例應(yīng)用:
如用戶需要修改密碼調(diào)用passwd程序時(shí),需要將修改好的密碼保存至/etc/shadow文件中,但如果以Linux安全上下文的模型應(yīng)用,用戶根本沒有權(quán)限將新密碼保存至/etc/shadow文件中,故passwd的程序就是一個(gè)擁有SUID權(quán)限的程序。當(dāng)有新用戶發(fā)起此程序時(shí),進(jìn)程的屬主不再是進(jìn)程發(fā)起者,而是/etc/passwd文件的屬主,即root。
SUID權(quán)限的表示方法
-
-rws------
: 如果原本的U上有x
權(quán)限,設(shè)置SUID后,x
位變成小寫的s
-
-rwS------
: 如果原本的U上沒有x
權(quán)限,設(shè)置SUID后,x
位變成大寫的s
SUID的設(shè)置文件
chmod u+s FILE
chmod 4000 FILE
二、SGID
SGID為什么需要?
通常用戶于目錄,將多個(gè)用戶添加進(jìn)一個(gè)附加組,在這個(gè)目錄下建立的文件都屬于這個(gè)附加組,附加組的成員都可以來修改屬于這個(gè)附加組的文件,有修改,刪除權(quán)限。
SGID的作用
當(dāng)目錄屬主有寫權(quán)限,且有SGID權(quán)限位時(shí),所有屬于此目錄的屬組,且以屬組身份在此目錄中新建文件或目錄時(shí),新文件的屬組不再是用戶的基本組,而是此目錄的屬組,用戶可以修改此附加組下的所有文件
SGID的應(yīng)用實(shí)例
即SGID就是有效的解決了基本安全模型中,用戶自能修改自己的文件。改進(jìn)成了:在要在此目錄下建立的文件,屬組都屬于目錄的屬主,只要是需要這個(gè)附加組的成員,都可以修改。類似團(tuán)隊(duì)協(xié)同工作的情況下,可以以此類模型工作。
SGID權(quán)限的表示方法
-
----rws---
:如果原本G上有x
權(quán)限,設(shè)置SGID后,x
位變成小寫的s
. -
----rwS---
:如果原本G上有x
權(quán)限,設(shè)置SGID后,x
位變成大寫的S
.
SGID的設(shè)置文件
chmod g+s FILE
chmod 2000 FILE
三、Sticky
sticky為什么需要?
應(yīng)用于SGID這樣協(xié)同辦公的情況下, 用戶能做到修改自己、其他用戶的文件,卻也能刪除其他用戶的文件,這種情況下非常的不安全,不能保證其他用戶文件的安全存放問題。
sticky的作用
即為了解決以上情況,應(yīng)用上層目錄有寫權(quán)限,屬于此目錄的組中的用戶,只能修改文件,卻不能刪除別人的文件,能刪除屬于自己的文件
Sticky的表示方法
-
-------rwt
:如果原本o上有x
權(quán)限,設(shè)置Sticky后,x
位變成小寫的t
. -
-------rwT
:如果原本o上有x
權(quán)限,設(shè)置Sticky后,x
位變成大寫的T
.
四、facl(filesystem access control list)
為什么需要facl功能?
由于Linux安全模型中,當(dāng)user1所擁有的文件想讓user2來讀取、寫,只能通過如下方式實(shí)現(xiàn):
- 將user2加入user1組中,即設(shè)置user2的附加組為user1;
- 在user1的文件中,在Other權(quán)限中加入rw操作
以上操作首先需要有管理員才能操作,另外,Other中應(yīng)用r
或者w
權(quán)限安全隱患太大,故需要facl來解決。
facal的功能
- 實(shí)現(xiàn)用戶自己管理權(quán)限;
- 對(duì)需要權(quán)限的用戶設(shè)置單獨(dú)的權(quán)限
facl應(yīng)用后,權(quán)限訪問模型發(fā)生的改變
- 當(dāng)用戶訪問一個(gè)文件時(shí),系統(tǒng)會(huì)先檢查用戶的屬主是否等于文件的屬主,否則,向下應(yīng)用;
- 檢查facl權(quán)限中應(yīng)用的user權(quán)限位,有沒有對(duì)應(yīng)用戶的授權(quán)權(quán)限,如果有則應(yīng)用,否則,向下應(yīng)用;
- 檢查用戶的屬組是否跟文件的屬組一致,或者檢查此用戶的附加組,有沒有添加為文件的屬組,有則應(yīng)用,否則;
- 檢查facl權(quán)限中應(yīng)用的group權(quán)限位,有沒有對(duì)應(yīng)組的授權(quán)權(quán)限,如果有則應(yīng)用,否則
- 檢查Other的權(quán)限。
facl的設(shè)置
`facl` - filesystem access control list
sysnopsis: facl [options] [u|g]:[USER|GROUP][MODE][FILE]
options:
`-m` : 設(shè)置權(quán)限
`-x` : 清除權(quán)限
應(yīng)用實(shí)例
-
facl -m u:mariadb:rw ./file
: 設(shè)置用戶為mariadb對(duì)當(dāng)前目錄下的file有讀寫權(quán)限; -
facl -m g:mygrp:rw ./file
: 設(shè)置組為mygrp對(duì)當(dāng)前目錄下的file文件有讀寫權(quán)限 -
setfacl -x u:user5 dir/
:清除user5對(duì)dir目錄的權(quán)限 -
setfacl -b ./file
: 清除file文件的所有用戶和組的facl權(quán)限設(shè)置
facl權(quán)限的查看方法
getfacl FILE
: 查看file文件的facl的權(quán)限控制
有facl權(quán)限控制機(jī)制的文件,展示格式
----------+
: 在權(quán)限位后面多出來一個(gè)+
號(hào),表示此文件有設(shè)置facl權(quán)限位
==========
轉(zhuǎn)載請(qǐng)注明出處