05-用户和组以及权限
用戶和組簡介
當我們使用Linux時,需要以一個用戶的身份登入,一個進程也需要以一個用戶身份運行,用戶限制使用者或進程可以使用或不可以使用哪些資源。
組用來方便組織管理用戶。
用戶分為以下三種
? -root用戶 (ID為0的用戶為root,即高級系統管理員,擁有所有權限)
??-系統用戶? (1-499)
? -普通用戶? (500以上)
?
系統中的文件都有一個所屬用戶及所屬組
- 每個用戶擁有一個UID,操作系統實際使用的是UID,而非用戶名
- 每個用戶屬于一個主組,屬于一個或多個附屬組(一個用戶最多有31個附屬組)
- 每個組擁有一個GID
- 每個可登陸用戶擁有一個指定的shell環境
- 每個進程以一個用戶身份運行,并受該用戶可訪問的資源限制
使用id命令可以顯示當前用戶的信息
[root@localhost ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023使用passwd命令可以修改當前用戶密碼
#為指定用戶zzz更換密碼 1 [root@localhost ~]# passwd zzz 2 Changing password for user zzz. 3 New password: #非交互式為zzz更改密碼一: 1 [root@localhost ~]# echo "123456789" | passwd --stdin zzz 2 Changing password for user zzz. 3 passwd: all authentication tokens updated successfully. #非交互式為zzz更改密碼二: 1 [root@localhost ~]# echo "zzz:123456789" | chpasswd #非交互式為zzz更改密碼三: 1 [root@localhost ~]# echo "123456" > pass.txt2 [root@localhost ~]# cat pass.txt | passwd --stdin zzz 3 Changing password for user zzz. 4 passwd: all authentication tokens updated successfully. #非交互式為zzz更改密碼四: 1 [root@localhost ~]# echo "zzz:123456" > pass.txt 2 [root@localhost ~]# cat pass.txt | chpasswd?
用戶及組相關操作
相關文件:
- /etc/passwd????? - 保存用戶信息
- /etc/shadow???? - 保存用戶密碼(以加密形式保存)
- /etc/group - 保存組信息
- /etc/login.defs
- /etc/default/useradd?
新建一個用戶:useradd ?zzz1
這個命令會執行以下操作
1. 在/etc/passwd中添加用戶信息
2. 如果使用passwd命令創建密碼,則將密碼加密保存在/etc/shadow中
3. 為用戶建立一個新的家目錄/home/zzz1
4. 將/etc/skel中的文件復制到用戶的家目錄中
5. 建立一個與用戶名相同的組,新建用戶默認屬于這個同名組
?
命令useradd支持以下參數:
-d 指定家目錄
-s 登陸shell
-u 指定UID
-g 主組
-G 附屬組(最多31個,用“ , ”分割)
也可通過直接修改/etc/passwd方式實現,但是不建議
修改用戶信息:usermod
用法:usermod 參數 username
?
命令usermod支持以下參數
-l 新用戶名
-u 新UID
-d 用戶家目錄位置
-g 用戶所屬主組
-G 用戶所屬附屬組
-L 鎖定用戶使其不能登陸
-U 解除鎖定
?
刪除用戶:userdel
用法:userdel 用戶名
userdel zzz1? (保留用戶的家目錄)
userdel –r zzz1 (同時刪除用戶的家目錄)
組的管理:
?通過組,我們可以更加方便的歸類、管理用戶,一般來講,我們會使用部門、職能或地理區域的分類方式來創建使用組。
- 每個組有一個組ID
- 組信息保存在/etc/group中
- 每個用戶擁有一個主組,同時還可以擁有31個附屬組
創建、修改、刪除組
創建組:groupadd
groupadd zzz2
修改組:groupmod
groupmod –n newname oldname 修改組名
groupmod –g newGid oldGid? 修改組ID
刪除組:groupdel
groupdel zzz2
?
權限
- 權限是OS用來限制對資源訪問的機制,權限一般分為讀、寫、執行。
- 系統中每個文件都擁有特定的權限、所屬用戶及所屬組,通過這樣的機制來限制哪些用戶或用戶組可以對特定文件進行怎樣的操作。
- 每個進程都是以某個用戶身份運行,所以進程的權限與該用戶的權限一樣,所以用戶的權限越大,該進程擁有的權限就大。
文件權限:
Linux中,每個文件擁有三種權限詳情見下面:
| 權限 | 對文件的影響 | 對目錄的影響 |
| r(讀取) | 可讀取文件內容 | 可列出目錄內容 |
| w(寫入) | 可修改文件內容 | 可在目錄中創建刪除內容 |
| x(執行) | 可作為命令執行 | 可訪問目錄內容 |
| 目錄必須擁有x權限,否則無法查看其內容 | ||
Linux權限基于UGO模型進行控制:
- U代表User,G代表Group,O代表Other
- 每一個文件的權限基于UGO進行設置
- 權限三個一組(rwx),對應UGO分別設置
- 每一個文件擁有一個所屬用戶和所屬組,對應UGO,不屬于該文件所屬用戶或所屬組使用O權限
?命令ls –l可以查看當前目錄下文件的詳細信息:
1 [root@localhost ~]# ls -l 2 total 12 3 -rw-------. 1 root root 1854 Aug 10 20:10 anaconda-ks.cfg 4 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Desktop 5 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Documents 6 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Downloads 7 -rw-r--r--. 1 root root 1902 Aug 10 20:11 initial-setup-ks.cfg 8 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Music 9 -rw-r--r--. 1 root root 11 Aug 10 21:56 pass.txt 10 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Pictures 11 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Public 12 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Templates 13 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Videos drwxr-xr-x. 2 root root 6 Aug 10 21:47 Documents rwxr-xr-x代表了UGO權限每3位一組 rwx:U r-x:G r-x:O
修改文件所屬主、組:chown
用法:
chown 用戶:用戶組?文件名
或者
chown 用戶.用戶組?文件名
:和 . 左邊或右邊可為空,即只改所屬主或所屬組
-R 參數遞歸的修改目錄下的所有文件所屬用戶
改變文件的所屬組:chgrp
chgrp 組名 文件名
-R 參數遞歸的修改目錄下的所有文件的所屬組
修改權限:chmod
?
chmod 模式? 文件
- 模式為如下格式:
?u、g、o分別代表用戶、組和其他
a可以代指ugo
?+、-、=代表加入、刪除和等于對應權限
示例:
1 chmod u+w file 2 chmod u-x file 3 chmod ugo+x file == chmod a+x file 4 chmod go+r flie5 chmod u=rwx file?
命令chmod也支持以數字方式修改權限,三個權限分別由三個數字表示:
r = 4??
w = 2?
x = 1?
?
使用數字表示權限時,每組權限分別對應數字之和:
rw-? ?=??? 4 + 2 = 6
r-x? ? =? ?4 + 1 = 5
rwx? ?=? 4 + 2 + 1 = 7
?
所以,使用數字表示guo權限使用如下方式
chmod 660 file ????? == chmod rw-rw---- flie
chmod 755 file == chmod rwxr-xr-x file
特殊權限及權限掩碼
默認權限:
- 每一個終端都擁有一個umask屬性,來確定新建文件、目錄的默認權限
- umask使用數字權限方式表示,如:022
- 目錄的默認權限是:777-umask
- 文件的默認權限是:666-umask
- 一般,普通用戶的默認umask是002,root用戶的默認umask是022
也就是說對于普通用戶來說
? 新建文件的權限是:666-002 = 664
?新建目錄的權限是:777-002 = 775
查看設置umask值:umask
注:umask屬于環境變量,保存在/etc/profile或/etc/bashrc文件中。
umask值的計算:
umask值的每一位為偶數時:
文件的權限計算方法:666減去umask值
目錄的權限計算方法:777減去umask值
umask值有奇數時:
文件的權限計算方法:666減去umask值,然后在結果的基礎上,在umask的奇數位上+1
目錄的權限計算方法:777減去umask值,目錄不影響
?
所以當umask=031時
計算方法:
文件:666-031=635 然后在奇數位上+1
即
635
+ 11
=646
所以文件的是646
而目錄不影響:777-031=746
?
?
?
?
特殊權限:
? 除了普通權限外,還有三個特殊權限:
| 權限 | 對文件的影響 | 對目錄的影響 |
| Suid | 以文件的所屬用戶身份執行,而非執行文件的用戶 | 無 |
| ? sgid ? | 以文件所屬組身份去執行 | 在該目錄中創建任意新文件的所屬組與該目錄的所屬組相同 |
| ? sticky ? | 無 | 對目錄擁有寫入權限的用戶僅可以刪除其擁有的文件,無法刪除其他用戶所擁有的文件 |
?設置特殊權限
設置suid:
chmod u+s file
設置sgid
chmod g+s file
設置sticky
chmod o+t file
與設置普通權限一樣,特殊權限也可以使用數字方式表示
SUID = 4
SGID = 2
Sticky =1
所以,我們可以通過以下命令設置:
chmod 4755 file
?
文件訪問控制列表
也可以看出上面所有的操作都是針對一類用戶來設置的,那么如果想要某個文件對應某個用戶進行特定的設置就需要用到文件的訪問控制列表(ACL)了。
簡單來說:ACL會更加細分對某個用戶的權限指定
例子:
[root@localhost ~]# su - zzz Last login: Sat Aug 10 20:24:05 CST 2019 on :0 [zzz@localhost ~]$ cd /root -bash: cd: /root: Permission denied用acl來設置:
1 [root@localhost ~]# ls -ld /root 2 dr-xr-x---. 14 root root 4096 Aug 10 21:55 /root 1 [root@localhost ~]# ls -ld /root 2 dr-xr-x---. 14 root root 4096 Aug 10 21:55 /root 3 [root@localhost ~]# setfacl -R u:zzz:rwx /root 4 Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... 5 Try `setfacl --help' for more information. 6 [root@localhost ~]# setfacl -Rm u:zzz:rwx /root1 [root@localhost ~]# su - zzz 2 Last login: Sat Aug 10 20:24:05 CST 2019 on :0 3 [zzz@localhost ~]$ cd /root 4 -bash: cd: /root: Permission denied 5 [zzz@localhost ~]$ cd /root 6 [zzz@localhost root]$
怎么去查看文件是否有ACL呢?
常用的ls命令是看不到ACL表信息的,但是卻可以看到文件的權限最后一個點(.)變成了加號(+),這就意味著該文件已經設置了ACL了
[root@localhost ~]# ls -ld /root dr-xrwx---+ 14 root root 4096 Aug 10 21:55 /root#查看具體acl [root@localhost ~]# getfacl /root getfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x user:zzz:rwx group::r-x mask::rwx other::---
?
轉載于:https://www.cnblogs.com/zzzhbr/p/11331553.html
總結
以上是生活随笔為你收集整理的05-用户和组以及权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员修炼内功
- 下一篇: loam源码解析5 : laserOdo