用戶、組和許可權管理基礎 前言: 開始系統的學習linux已經有三周時間,最近學習了用戶、組和許可權管理的相關基礎知識。我所學的大綱將這三部分內容划到一個章節來學習,因為剛開始學linux所以接觸到的都是一些基礎性的東西。可是雖說是基礎知識,但是這三部分和在一起講內容還是蠻多的,老師上課用的PPT就有洋 ...
用戶、組和許可權管理基礎
前言:
開始系統的學習linux已經有三周時間,最近學習了用戶、組和許可權管理的相關基礎知識。我所學的大綱將這三部分內容划到一個章節來學習,因為剛開始學linux所以接觸到的都是一些基礎性的東西。可是雖說是基礎知識,但是這三部分和在一起講內容還是蠻多的,老師上課用的PPT就有洋洋灑灑接近六十頁,對於初學者來說一時間接收這麼多知識還是有點難以消化的。聽了老師的課以後,課下我又對這部分內容歸納整理了一下,發現這部分內容雖然多但是很多知識都是成塊的,只要合理的去總結歸納其實學起來比不難。
我把這部分內容主要歸納成以下幾個模塊:
- 相關定義
- 配置文件模塊:初步學慣用戶和組的相關知識,其實主要就是學慣用戶和用戶組相關的配置文件,瞭解掌握了這些配置文件內容和作用基本上也就掌握了用戶和用戶組的知識。
- 命令模塊:管理許可權要用命令來下達,關於許可權管理的主要命令我總結了14個,掌握了這些命令,許可權管理對你來說就會比較容易理解了。
- 許可權管理
- 預設許可權
- 特殊許可權
ACL
這樣將知識拆開歸納學習就會讓學習輕鬆很多,接下來就開看看我是怎麼歸納的吧!一、相關定義
安全3A:linux的安全模型:
Authentication:確認當前用戶身份(通過用戶名配合密碼)
Authozation:授予許可權
Accouting|Audition:審計,記錄監控用戶:
管理員:root , UID =0
普通用戶的UID=1-65535
系統用戶:1-499,1-999(CENTOS7)
登錄用戶:500+,1000+(CENTOS7)組
建立用戶的意義在於便於分配許可權。
- 管理員組:root,GID=0
普通組:
系統組:1-499,1-999(CENTOS7)
普通組:500+,1000+(CENTOS7)二、配置文件
關於用戶的配置文件:
1./etc/passwd:
用戶及屬性信息(名稱、UID、主的ID)
username: x :uid:gid:comment : homedir:shell
用戶名:密碼X:UID:GID :用戶全名或註釋:用戶家目錄(/home/wang):預設shell(/bin/bash)2./etc/shadow:
用戶密碼及相關屬性
username :password : passwordtime: min : warning : incative: account- 用戶名
- 用戶密碼:一般用sha512加密
- 從1970年一月一日起到密碼最近一次被更改的時間
- 密碼再過幾天可以被更改(0表示隨時可更改)
- 密碼有效期
- 密碼過期提示時間
- 密碼過期幾天後會被鎖定
用戶有效期
3./etc/default/useradd
[root@CentOS7 ~]#cat /etc/default/useradd # useradd defaults file 創建新用戶預設配置文件 GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
關於組的配置文件:
1./etc/group:
組以及屬性信息
組名:組口令:GID:以當前組為附加組的用戶列表2./etc/gshadow:
組名:組口令:組管理員列表:以當前組為附加組的用戶列表
3./etc/skel/*
[root@CentOS7 ~]#ls -a /etc/skel/ . .. .bash_logout .bash_profile .bashrc .mozilla
創建新建用戶的家目錄的模版文件夾(新建用戶的家目錄里的文件是從這個文件夾中複製過來)
其中沒有可見文件,全是隱藏文件
恢復用戶家目錄原始文件:
手工創建家目錄文件夾 cp -r /etc/skl/.[ ^.]* /home/test1
自動生成家目錄文件夾 cp -r /etc/skl/ /home/test1三、命令
管理用戶的命令:
1.useradd:
創建用戶
語法:useradd [選項] 用戶名
-u: 指定UID在 /etc/login.defs文件中,加 -o 不檢查重覆id
-g :設定主組(指定的主組必須存在),預設創建並加入一個與用戶名相同的組,同時指明GID
-c :描述用戶的註釋信息
-d :以指定的路徑(不存在的目錄)為家目錄
-s :制定用戶預設shell類型
-G :指明用戶的附加組,組必須事先存在
-N :不創建預設主組,以users作為該用戶主組
-r : 創建系統用戶
-D :顯示或更改預設設置, 也就是這個文件下的信息/etc/default/useradd 創建新用戶時的預設項目文件
-D -s :更改預設shell類型
-D -b:BASE_DIR
-D -g:GROUP2.usermod
修改用戶屬性
語法:usermod [OPTION] login
-u : 新的UID
-g:新基本組
-G:新的附加組,原來的附加組將會被覆蓋;若保留原有附加組,則要同時使用-a選項,表示append添加。
-s:新的預設SHELL類型
-c:新的註釋信息
-d:新的家目錄不會自動創建,原家目錄中的文件不會同時移動至新的家目錄;若要創建新的家目錄並移動原家數據同時使用-m選項
-l:新的名字
-L:鎖定指定用戶,在/etc/shadow密碼欄加!
-U:解鎖指定用戶,將/etc/shadow密碼欄的!拿掉
-e yyyy-MM-DD:指明用戶帳號過期時間
-f:INACTICE設定非活動期限3. userdel
刪除用戶
語法:userdel [OPTION] login
-r:刪除用戶家目錄4.id
查看用戶相關的ID信息
-u:顯示UID
-g:顯示GID
-G:顯示用戶所屬組的ID
-n:顯示名稱需配合ugG使用5.su
切換用戶
語法: su UserName:不完全切換,不讀取目標用戶的配置文件,不改變當前用戶工作目錄
su - UserName:完全切換,讀取用戶的配置文件,切換至家目錄
換個用戶執行命令:su [-] UserName -c 'COMMAND'6.passwd
語法:passwd [OPTIONS] UserName 修改指定用戶密碼,僅root用戶許可權
passwd:修改自己的密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-n:mindays 指定最短使用期限
-x:maxdays指定最大使用期限
-w:warndays提前多少天開始警告
-i:inactivedays非活動期限
--stdin:從標準輸入接受用戶密碼[root@CentOS7 ~]#echo '199310' |passwd --stdin gentoo Changing password for user gentoo. passwd: all authentication tokens updated successfully.
7.chage:
修改用戶密碼策略
語法:chage [OPTION] LOGIN[root@CentOS7 ~]#chage gentoo Changing the aging information for gentoo Enter the new value, or press ENTER for the default Minimum Password Age [0]: Maximum Password Age [99999]: Last Password Change (YYYY-MM-DD) [2017-07-24]: Password Expiration Warning [7]: Password Inactive [-1]: Account Expiration Date (YYYY-MM-DD) [-1]:
管理組的命令:
8.groupadd
創建組
語法:groupadd [OPTION] GROUPNAME
-g :GID指明GID號
-r:創建系統組9.groupmod
groupmod [OPTION] group
-n:新名字
-g:新GID10.groupdel
跟組名,刪除組
11.gpasswd
gpasswd [OPTIN] GROUP
-a user :將user添加至指定組中
-d user:從制定組中移除用戶user
-A user1,user2,...:設置有管理許可權的用戶列表12.newgrp
臨時切換主組
切換主組以後新建立的文件的所屬組改變13.groupmems
更改和查看組成員
語法:groupmems [OPTION]或[action]
options:
-g groupname :預設是當前用戶的所屬組,-g更改為指定組[root@CentOS7 ~]#groupmems -l -g admins harry natasha
Actions:
-a :指定用戶加入組
-d:從組中刪除用戶
-p:從組中清除所有成員
-l:顯示組成員列表14.groups
跟用戶名,查看用戶所屬組列表
批量創建用戶:
newuser.txt 格式和/etc/passwd相同
批量修改口令:
cat pass.txt | chpasswd pass.txt格式是username : password
四、許可權管理
文件許可權:
- r 讀許可權:查看內容 文件類型
- w 寫許可權:可以修改文件內容,寫文件與刪除文件沒關係
刪除文件既是對該目錄的修改。
目錄中的文件能不能刪除,與目錄中的文件許可權無關,與目錄的許可權有關. - x 執行許可權:是否可以運行,對root也有限效。
X執行許可權:+X若是目錄那麼既+x許可權,若文件原本有人有x許可權那麼+x許可權若沒人有x許可權則不+任何許可權
目錄許可權:
r讀許可權:可以ls查看目錄內的文件列表
w寫許可權:可以創建或者刪除目中的文件,但是要有x許可權
x執行許可權:可以cd進入目錄,可以看ls -l目錄內文件元數據chown:
修改文件的所屬主
語法:chown [option]...[OWNER] 或:[group] FILE
OPTION : -R 遞歸
OWNER
OWNER:GROUP 改變文件的所有者和所屬組
:GROUP
命令中的冒號可以用.代替
chown username filechgrp
修改文件的所屬組
語法: chgrp [OPTION] groupname file
選項:-R 遞歸chomd :
修改文件的許可權
用法:模式法:chmod+ who+ opt+per+file
chmod 命令
who對誰操作: u g o a=all
opt 什麼操作: + - =
per許可權:r w x
```shell
[root@CentOS7 ~]#ll
-rw-r--r--. 1 root root 0 Jul 24 16:23 f1
[root@CentOS7 ~]#chmod o+w f1
[root@CentOS7 ~]#ll
-rw-r--rw-. 1 root root 0 Jul 24 16:23 f1
[root@CentOS7 ~]#ll f1
-rw-r--rw-. 1 root root 0 Jul 24 16:23 f1
[root@CentOS7 ~]#chmod u=rw,g=r,o= f1
[root@CentOS7 ~]#ll f1
-rw-r-----. 1 root root 0 Jul 24 16:23 f1
用cp命令複製若覆蓋了源文件那麼只覆蓋文件內容,保留文件的元屬性 chmod --reference=RFILE FILE 參考RFILE文件的許可權,將FILE修改為RFILE的許可權模式
shell
[root@CentOS7 ~]#ll f1
-rw-r-----. 1 root root 0 Jul 24 16:23 f1
[root@CentOS7 ~]#chmod --reference=/etc/shadow f1
[root@CentOS7 ~]#ll /etc/shadow
----------. 1 root root 1748 Jul 25 10:54 /etc/shadow
[root@CentOS7 ~]#ll f1
----------. 1 root root 0 Jul 24 16:23 f1
2. 數字法: chmod 數字 filename
shell
[root@CentOS7 ~]#ll f1
----------. 1 root root 0 Jul 24 16:23 f1
0 0 0
[root@CentOS7 ~]#chmod 751 f1
[root@CentOS7 ~]#ll f1
-rwxr-x--x. 1 root root 0 Jul 24 16:23 f1
7 5 1
```
五、預設許可權
umask
新建文件和文件夾的預設許可權
umask:查看
umask 跟數字:設定
root的umask是002
非特權用戶的umask是022
數字演算法:
umask +文件設定許可權=666文件預設許可權/777目錄預設許可權
演算法當中對於目錄來講:不存在執行許可權不安全所以用777直接減umask就得到了目錄許可權。
對於文件來講:666-umask
觀察結果:有奇數那麼對應奇數位置各加1,偶數不變
真實作用:從對應位中將Umask指定許可權去除
文件預設許可權 666 110 110 110
umask設置許可權 057 000 101 111
新建文件許可權 110 010 000 得620
[root@CentOS7 ~]#umask
0022
[root@CentOS7 ~]#>f2
[root@CentOS7 ~]#ll f2
-rw-r--r--. 1 root root 0 Jul 25 16:02 f2
[root@CentOS7 ~]#umask 057
[root@CentOS7 ~]#umask
0057
[root@CentOS7 ~]#>f3
[root@CentOS7 ~]#ll f3
-rw--w----. 1 root root 0 Jul 25 16:03 f3
模式法:
[root@CentOS7 ~]#umask
0022
[root@CentOS7 ~]#umask u=rw,g=r,o=
[root@CentOS7 ~]#umask
0137
[root@CentOS7 ~]#>f6
[root@CentOS7 ~]#ll f6
-rw-r-----. 1 root root 0 Jul 25 16:11 f6
umask -p :
輸出可被調用,/etc/bashrc是全局設置,~/.bashrc用戶設置
[root@CentOS7 ~]#umask -p
umask 0137
[root@CentOS7 ~]#umask -p >> .bashrc
[root@CentOS7 ~]#cat .bashrc
# .bashrc
...
umask 0137
umask -S 模式方式顯示:
[root@CentOS7 ~]#umask -S
u=rw,g=r,o=
六、特殊許可權
前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程式文件能不能啟動為進程,取決發起者 對程式文件是否擁有執行許可權
(2) 啟動為進程之後,其進程的屬主為發起者,進程的屬組為 發起者所屬的組
(3) 進程訪問文件時的許可權,取決於進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主許可權
(b) 進程的發起者,屬於文件屬組;則應用文件屬組許可權
(c) 應用文件“其它”許可權
SUID 4
作用在文件所有者上
作用:作用在可執行的二進位程式上,將當前運行者身份切換成該程式所有者的身份,繼承該文件所有者對該文件所具有的許可權。
作用在目錄上,用戶進入該目錄集成該目錄所屬組所具有的許可權。
SGID 2
作用在文件所屬組上
作用在目錄上,目錄中創建的新文件將自動集成目錄的所屬組。
以上兩個許可權都只能提高許可權
STICKY 1
作用在文件other位
- 粘滯位
- 具有寫許可權的目錄通常用戶可以刪除該目錄的任何文件,無論文件的許可權或用友權
- 在目錄設置Sticky,只有文件的所有者有或者root可以刪除該文件
sticky設置在文件上無意義
許可權設定:
chmod o+t DIR
chmod o-t DIR防止誤操作:
chattr +i 文件名 禁止該文件被刪除、更改、改名
-i 解除鎖定
+a:只能追加內容,不能更改刪減
lsattr 文件名 顯示特定屬性七、ACL:特殊許可權
linux系統中只對文件設置了三種角色所有者、所屬組和other所以指定許可權的靈活性有限。複雜環境中對於文件來說設置的角色就不止三個了。ACL就能對文件設置更多的角色從而設置複雜的許可權控制。
ACL需要文件系統的支持,CentOS7版本之前預設手工創建的ext4文件系統無ACL功 能,需手動增加。
CentOS7 預設創建的xfs和ext4文件系統具有ACL功能 。setfacl
語法:setfacl -m u/g : user/group :許可權 文件名/目錄
選項:
-m:設置ACL許可權
-Rm:遞歸設定目錄的ACL許可權
-X:刪除指定用戶
-b:刪除所有
-k:刪除指定目錄的ACL許可權
-d :default 作用於目錄新建文件預設許可權
getfacl file1 | setfacl --set-file=- file2 複製file1 的acl許可權給file2
ACL生效順序:所有者,自定義用戶,自定義組,其他人getacl
跟文件,查看該文件的ACL相關許可權。
mask:
mask通俗來說就是自定義用戶或者自定義所屬組許可權的高壓線,至作用於acl自定義的用戶或者組。
一旦設置ACL許可權,那麼文件顯示的所屬組許可權既是mask限定的許可權
設定mask許可權限定以後,如果更改用戶的許可權 mask許可權限定會發生改變。
備份和恢復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