05-用户和组以及权限
用戶和組簡介
當(dāng)我們使用Linux時,需要以一個用戶的身份登入,一個進(jìn)程也需要以一個用戶身份運(yùn)行,用戶限制使用者或進(jìn)程可以使用或不可以使用哪些資源。
組用來方便組織管理用戶。
用戶分為以下三種
? -root用戶 (ID為0的用戶為root,即高級系統(tǒng)管理員,擁有所有權(quán)限)
??-系統(tǒng)用戶? (1-499)
? -普通用戶? (500以上)
?
系統(tǒng)中的文件都有一個所屬用戶及所屬組
- 每個用戶擁有一個UID,操作系統(tǒng)實際使用的是UID,而非用戶名
- 每個用戶屬于一個主組,屬于一個或多個附屬組(一個用戶最多有31個附屬組)
- 每個組擁有一個GID
- 每個可登陸用戶擁有一個指定的shell環(huán)境
- 每個進(jìn)程以一個用戶身份運(yùn)行,并受該用戶可訪問的資源限制
使用id命令可以顯示當(dāng)前用戶的信息
[root@localhost ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023使用passwd命令可以修改當(dāng)前用戶密碼
#為指定用戶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?
用戶及組相關(guān)操作
相關(guān)文件:
- /etc/passwd????? - 保存用戶信息
- /etc/shadow???? - 保存用戶密碼(以加密形式保存)
- /etc/group - 保存組信息
- /etc/login.defs
- /etc/default/useradd?
新建一個用戶:useradd ?zzz1
這個命令會執(zhí)行以下操作
1. 在/etc/passwd中添加用戶信息
2. 如果使用passwd命令創(chuàng)建密碼,則將密碼加密保存在/etc/shadow中
3. 為用戶建立一個新的家目錄/home/zzz1
4. 將/etc/skel中的文件復(fù)制到用戶的家目錄中
5. 建立一個與用戶名相同的組,新建用戶默認(rèn)屬于這個同名組
?
命令useradd支持以下參數(shù):
-d 指定家目錄
-s 登陸shell
-u 指定UID
-g 主組
-G 附屬組(最多31個,用“ , ”分割)
也可通過直接修改/etc/passwd方式實現(xiàn),但是不建議
修改用戶信息:usermod
用法:usermod 參數(shù) username
?
命令usermod支持以下參數(shù)
-l 新用戶名
-u 新UID
-d 用戶家目錄位置
-g 用戶所屬主組
-G 用戶所屬附屬組
-L 鎖定用戶使其不能登陸
-U 解除鎖定
?
刪除用戶:userdel
用法:userdel 用戶名
userdel zzz1? (保留用戶的家目錄)
userdel –r zzz1 (同時刪除用戶的家目錄)
組的管理:
?通過組,我們可以更加方便的歸類、管理用戶,一般來講,我們會使用部門、職能或地理區(qū)域的分類方式來創(chuàng)建使用組。
- 每個組有一個組ID
- 組信息保存在/etc/group中
- 每個用戶擁有一個主組,同時還可以擁有31個附屬組
創(chuàng)建、修改、刪除組
創(chuàng)建組:groupadd
groupadd zzz2
修改組:groupmod
groupmod –n newname oldname 修改組名
groupmod –g newGid oldGid? 修改組ID
刪除組:groupdel
groupdel zzz2
?
權(quán)限
- 權(quán)限是OS用來限制對資源訪問的機(jī)制,權(quán)限一般分為讀、寫、執(zhí)行。
- 系統(tǒng)中每個文件都擁有特定的權(quán)限、所屬用戶及所屬組,通過這樣的機(jī)制來限制哪些用戶或用戶組可以對特定文件進(jìn)行怎樣的操作。
- 每個進(jìn)程都是以某個用戶身份運(yùn)行,所以進(jìn)程的權(quán)限與該用戶的權(quán)限一樣,所以用戶的權(quán)限越大,該進(jìn)程擁有的權(quán)限就大。
文件權(quán)限:
Linux中,每個文件擁有三種權(quán)限詳情見下面:
| 權(quán)限 | 對文件的影響 | 對目錄的影響 |
| r(讀取) | 可讀取文件內(nèi)容 | 可列出目錄內(nèi)容 |
| w(寫入) | 可修改文件內(nèi)容 | 可在目錄中創(chuàng)建刪除內(nèi)容 |
| x(執(zhí)行) | 可作為命令執(zhí)行 | 可訪問目錄內(nèi)容 |
| 目錄必須擁有x權(quán)限,否則無法查看其內(nèi)容 | ||
Linux權(quán)限基于UGO模型進(jìn)行控制:
- U代表User,G代表Group,O代表Other
- 每一個文件的權(quán)限基于UGO進(jìn)行設(shè)置
- 權(quán)限三個一組(rwx),對應(yīng)UGO分別設(shè)置
- 每一個文件擁有一個所屬用戶和所屬組,對應(yīng)UGO,不屬于該文件所屬用戶或所屬組使用O權(quán)限
?命令ls –l可以查看當(dāng)前目錄下文件的詳細(xì)信息:
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權(quán)限每3位一組 rwx:U r-x:G r-x:O
修改文件所屬主、組:chown
用法:
chown 用戶:用戶組?文件名
或者
chown 用戶.用戶組?文件名
:和 . 左邊或右邊可為空,即只改所屬主或所屬組
-R 參數(shù)遞歸的修改目錄下的所有文件所屬用戶
改變文件的所屬組:chgrp
chgrp 組名 文件名
-R 參數(shù)遞歸的修改目錄下的所有文件的所屬組
修改權(quán)限:chmod
?
chmod 模式? 文件
- 模式為如下格式:
?u、g、o分別代表用戶、組和其他
a可以代指ugo
?+、-、=代表加入、刪除和等于對應(yīng)權(quán)限
示例:
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也支持以數(shù)字方式修改權(quán)限,三個權(quán)限分別由三個數(shù)字表示:
r = 4??
w = 2?
x = 1?
?
使用數(shù)字表示權(quán)限時,每組權(quán)限分別對應(yīng)數(shù)字之和:
rw-? ?=??? 4 + 2 = 6
r-x? ? =? ?4 + 1 = 5
rwx? ?=? 4 + 2 + 1 = 7
?
所以,使用數(shù)字表示guo權(quán)限使用如下方式
chmod 660 file ????? == chmod rw-rw---- flie
chmod 755 file == chmod rwxr-xr-x file
特殊權(quán)限及權(quán)限掩碼
默認(rèn)權(quán)限:
- 每一個終端都擁有一個umask屬性,來確定新建文件、目錄的默認(rèn)權(quán)限
- umask使用數(shù)字權(quán)限方式表示,如:022
- 目錄的默認(rèn)權(quán)限是:777-umask
- 文件的默認(rèn)權(quán)限是:666-umask
- 一般,普通用戶的默認(rèn)umask是002,root用戶的默認(rèn)umask是022
也就是說對于普通用戶來說
? 新建文件的權(quán)限是:666-002 = 664
?新建目錄的權(quán)限是:777-002 = 775
查看設(shè)置umask值:umask
注:umask屬于環(huán)境變量,保存在/etc/profile或/etc/bashrc文件中。
umask值的計算:
umask值的每一位為偶數(shù)時:
文件的權(quán)限計算方法:666減去umask值
目錄的權(quán)限計算方法:777減去umask值
umask值有奇數(shù)時:
文件的權(quán)限計算方法:666減去umask值,然后在結(jié)果的基礎(chǔ)上,在umask的奇數(shù)位上+1
目錄的權(quán)限計算方法:777減去umask值,目錄不影響
?
所以當(dāng)umask=031時
計算方法:
文件:666-031=635 然后在奇數(shù)位上+1
即
635
+ 11
=646
所以文件的是646
而目錄不影響:777-031=746
?
?
?
?
特殊權(quán)限:
? 除了普通權(quán)限外,還有三個特殊權(quán)限:
| 權(quán)限 | 對文件的影響 | 對目錄的影響 |
| Suid | 以文件的所屬用戶身份執(zhí)行,而非執(zhí)行文件的用戶 | 無 |
| ? sgid ? | 以文件所屬組身份去執(zhí)行 | 在該目錄中創(chuàng)建任意新文件的所屬組與該目錄的所屬組相同 |
| ? sticky ? | 無 | 對目錄擁有寫入權(quán)限的用戶僅可以刪除其擁有的文件,無法刪除其他用戶所擁有的文件 |
?設(shè)置特殊權(quán)限
設(shè)置suid:
chmod u+s file
設(shè)置sgid
chmod g+s file
設(shè)置sticky
chmod o+t file
與設(shè)置普通權(quán)限一樣,特殊權(quán)限也可以使用數(shù)字方式表示
SUID = 4
SGID = 2
Sticky =1
所以,我們可以通過以下命令設(shè)置:
chmod 4755 file
?
文件訪問控制列表
也可以看出上面所有的操作都是針對一類用戶來設(shè)置的,那么如果想要某個文件對應(yīng)某個用戶進(jìn)行特定的設(shè)置就需要用到文件的訪問控制列表(ACL)了。
簡單來說:ACL會更加細(xì)分對某個用戶的權(quán)限指定
例子:
[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來設(shè)置:
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表信息的,但是卻可以看到文件的權(quán)限最后一個點(.)變成了加號(+),這就意味著該文件已經(jīng)設(shè)置了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::---
?
轉(zhuǎn)載于:https://www.cnblogs.com/zzzhbr/p/11331553.html
總結(jié)
以上是生活随笔為你收集整理的05-用户和组以及权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员修炼内功
- 下一篇: loam源码解析5 : laserOdo