linux day 6
用戶、組和權限
1.Linux用戶:Username/UID
管理員:root, 0
普通用戶:1-65535
系統用戶:1-499, 1-999
對守護進程獲取資源進行權限分配;
登錄用戶:500+, 1000+
交互式登錄;
2.Linux組:Groupname/GID
管理員組:root, 0
普通組:
系統組:1-499, 1-999
普通組:500+, 1000+
3.Linux用戶和組之間的關系:
對于用戶而言:
用戶必須有且只有一個主要組(primary group),也叫私有組,組名和用戶名相同
輔助組(secondary group),一個用戶可以有0個或多個輔助組
一個組可以有多個成員,也可以有多個組管理員,組管理員可以改變組密碼,添加或刪除
組成員
4.跟用戶相關的配置文件
/etc/passwd 用戶及其屬性細心
/etc/group 組及其屬性信息
/etc/shadow 用戶密碼及其相關屬性
/etc/gshadow 組密碼及其相關屬性
注意:1):這兩個文件一個是存儲用戶信息,一個是存儲密碼的,早期是放在一起的,可想而知這種做法并不安全,但使用命令也可以將這兩個文件合并:
#pwunconv
將密碼填入/etc/passwd的x位置,并重命名/etc/shadow文件為/etc/shadow-,相關的密碼策略不會顯示在/etc/paaawd中
#pwconv
恢復成兩個文件
2):查看/etc/passwd和/etc/shadow中某個特定用戶的信息:
#getent passwd 用戶名
#getent shadow 用戶名
/etc/passwd 用于存儲用戶的相關信息,此文件以:為分隔符分為7個字段,各個字段的含義如下:
1) login name:登錄用戶名
2) passwd:密碼(x,表示占位符;其內容在/etc/shadow文件中)
3) UID:用戶ID
4) GID:基本組ID
5) Comment:用戶全名或注釋
6) home directory:用戶家目錄
7) shell:用戶的默認shell
/etc/shadow 用于存儲用戶的密碼信息,同樣以:為分隔符分為9個字段,各個字段的含義如下:
1) 用戶名
2) 加密后的用戶密碼;現在一般使用sha512加密
3) 上次修改時間:從1970年1月1日起到最近一次被更改的時間
4) 最小使用時間:密碼過幾天后可以變更(0表示可隨時變更)
5) 最大使用時間:密碼過期時間(99999表示永不過期)
6) 密碼警告時間:密碼過期前幾天系統提示用戶(默認為一周)
7) 密碼失效時間:密碼過期后多少天賬號會被鎖定
8) 賬號過期時間:從1970年1月1日起,多少天后賬號失效
9) 保留字段(reserved field)
密碼加密
md5 128bits
sha1 160bits
sha224 224bits
sha256 256bits
sha384 384bits
sha512 512bits
更改加密算法 authconfig –passalgo=sha256 –update
或者改 cat /etc/login.defs
5.組相關的兩個配置文件
/etc/group和/etc/gshadow
查看/etc/group和/etc/gshadow中某個特定用戶的信息:
#getent group 用戶名
#getent gshadow 用戶名
/etc/group存儲的是組的相關信息,以:為分隔符:
1) 組名
2) 組密碼;通常不需要設定;密碼被記錄在/etc/gshadow
3) GID:組ID
4) 以當前組為附加組(輔助組)的用戶列表(以逗號分隔)
/etc/gshadow 存儲的是組密碼的相關信息
1) 組名
2) 組密碼;和/etc/shadow的密碼構造一樣
3) 組管理員;逗號分隔用戶列表,這些用戶都是組管理員
4) 組成員;逗號分隔用戶列表,這些都是組成員
6.專門來修改/etc/passwd和/etc/group的工具:
修改且帶有語法檢查的:vipw和vigr
只有語法檢查功能:pwck和grpck
7.用戶管理命令
1) 創建用戶
useradd [option] username
-u UID UID的范圍在/etc/login.defs中定義
-u -o 不檢查UID的唯一性
-g GID 指明要加入的基本組,如果不指定則創建一個與用戶名相同的組,并將其作為用戶的基本組
-c "Comment" 用戶的注釋信息
-d HOME_DIR 以指定的路徑為家目錄 此處指定的路徑必須不能是已存在的目錄
-s SHELL 指明用戶的默認shell
-G GP1[GP2,…] 為用戶指明附加組,組必須事先存在
-N 不創建私有組作為,使用users組(Gid=100)作為基本組
-r 創建系統用戶
-M 不創建家目錄
-D 顯示默認配置
-D -s 修改用戶的默認shell信息
2)創建用戶口令
passwd [options] username
-l 鎖定指定用戶 (密碼前加!!)
-u 解鎖指定用戶 (刪除密碼前的!!)
-n mindays: 指定最短使用期限
-x maxdays: 最大使用期限
-w warndays: 提前多少天開始警告
-i inactive-days: 非活動期限
–stdin 從標準輸入接收用戶密碼; eg: echo "123456" | passwd –stdin username
3)批量創建用戶和修改用戶口令
#newusers files 批量創建用戶;file是滿足/etc/passwd格式的文件
#chpasswd 從標準輸出讀入user:passwd的格式的多行文本,以此來批量修改用戶口令
vim batchpasswd
user1:明文口令
user2:明文口令
…
cat batchpasswd | chpasswd
4)用戶屬性修改
#usermod [option] username
-u UID:指定用戶新的UID
-g GID:指明用戶新的基本組
-G GP1[Gp2…] 指明新的附加組,原來的附加組會被覆蓋(若要保留原來的附加組,則要使用-aG)
-G "" 清空附加組
-s SHELL:指明新的默認shell
-c 'COMMENT':新的注釋信息
-d HOME: 新的家目錄,原來的家目錄中的文件不會同時移動至新的家目錄中,若要移動,則要同時使用-m選項
-l login_name: 新用戶名
-L: 鎖定用戶 (在/etc/shadow密碼前加!)
-U: 解鎖用戶
-e yyyy-MM-DD:指明用戶賬號的過期日期
-f INACTIVE:設定非活動期限
-r:刪除用戶家目錄
5)查看用戶的相關信息
#id [options] [user] 查看用戶相關信息;不指明用戶則查看的是當前用戶
-u:UID
-g:GID
-G:group 附加組
-n:顯示id對應的名字,通常和-u和-g一起使用
id -un [user] 或 is -gn [user]
#finger 打印登錄到系統的所有用戶的信息
finger user 查看user相關的一些信息,比如家目錄,shell類型,郵件等
6) 在/etc/passwd中家目錄字段必須不能為空
如果為空,則登錄這個用戶時,鍵入用戶和密碼之后,會不出現提示符,不能輸入任何命令,等待超時之后(提示:/usr/bin/xauth: timeout in locking authority file /.Xauthority),進入/
若su – user完全切換或不完全切換 su user, 則會顯示su: user user does not exist
如果不空,但目錄不存在,則登錄這個用戶時,會直接進入/,
若su – user完全切換 會直接進入/
若不完全切換 su user 會進入執行 su user的目錄
7) 切換用戶或以其它用戶身份執行命令
su [options] [-] [user [args…]]
切換用戶的方式:
su user:非登錄式切換,不會讀取目標用戶的配置文件,不改變當前工作目錄,也稱之為不完全切換
su – user 登錄式切換,會讀取目標用戶的配置文件,切換至其家目錄,也稱之為完全切換
Attention:root執行su至其他用戶無需密碼,非root用戶切換時需要密碼
切換身份執行命令
su [-] user -c 'cmd'
選項 -l –login
su -l user 相當于 su – user
8)修改用戶相關信息的其他命令
chfn 指定個人信息
chsh 指定shell
9)修改用戶密碼策略
chage [option] user
-d last_day 修改最后修改時間 對應于/etc/shadow的第3個字段
-m –mindays Min_days 修改最小使用時間 對應于/etc/shadow的第4個字段 過多少時間可以修改
-M –maxdays Max_days 修改最大使用時間 對應于/etc/shadow的第5個字段
-W –warndays Warn_days 修改警告時間 對應于/etc/shadow的第6個字段
-I –inactive Inactive 修改賬戶失效時間 對應于/etc/shadow的第7個字段
-E –expiredate Expire_Date 修改賬戶過期時間 對應于/etc/shadow的第8個字段
-l 顯示密碼策略
下次登錄強制重設密碼
chage -d 0 tom 等價于 passwd -e tom
e.g. chage -m 0 -M 42 -W 14 -I 7 tom
chage -E 2016-09-10 tom
10)刪除用戶
userdel user 不會刪除用戶家目錄
-r user 才會刪除用戶的同時刪除家目錄
在/etc/login.defs中,有這樣的描述
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
8. 組管理命令
1)創建組
groupadd [option] groupname
-g gid 指明GID 范圍在/etc/login.defs中指定
-r 創建系統組
2)修改組
groupmod [OPTION] group
-n groupname :組的新名字
-g GID :新的GID
3)組刪除
groupdel group
4)更改組密碼
gpasswd [option] group
-a user 將user加入到指定組中
-M user1,user2…指定組成員列表
-d user 從指定組中刪除user
-A user1,user2,… 設置有管理權限的用戶列表,即設置組管理員
newgrp命令:臨時切換基本組
如果用戶不屬于此組,則需要組密碼
Attention:具體參見本文檔/etc/gshadow部分
5)更改組成員
groupmems [options] [action]
options:
-g /–group groupname 更改為指定組(只有root可用)
action:
-a /–add username 指定加入組的用戶
-d / –delete username 指定從組刪除的用戶
-p / –purge 從組中清除所有成員
-l / –list 顯示組中成員
e.g. groupmems -g peng -a wang 將wang用戶加入peng組
groupmems -g peng -l 查看peng組中的所有成員,似乎是查看以peng組為附加組的成員列表
groupmems -g peng -p 清除所有peng組中的成員
6)查看組成員
groups user1 user2 .. usern 列出指定一個或多個用戶的組關系,格式:primary group:secondary group1 secondary group
groups 如果沒有指定用戶,那么打印當前進程的組關系,通常是沒有基本組和附加組的概念
以上是基礎內容:
我是分割線————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
一次創建多個用戶的用法
[root@Centos7 ~]# cat useradd.txt
user1:x:2001:2001::/testdir/user1:/bin/bash
user2:x:2002:2002::/testdir/user2:/bin/bash
user3:x:2003:2003::/testdir/user3:/bin/bash
[root@Centos7 ~]# newusers useradd.txt
[root@Centos7 ~]# cat passwd.txt
user1:redhat
user2:ooppqq
user3:xxyyzz
[root@Centos7 ~]# cat passwd.txt | chpasswd
創建用戶的家目錄內的隱藏文件
[root@Centos7 ~]# cp -r /etc/skel/. /testdir/user1
[root@Centos7 ~]# cp -r /etc/skel/. /testdir/user2
[root@Centos7 ~]# cp -r /etc/skel/. /testdir/user3
echo 112233 | passwd –stdin user2 修改用戶密碼的命令
簡單的用戶管理文件 回憶
/etc/passwd
user1:x:2001:2001::/testdir/user1:/bin/bash
username:x:uid:gid:comment:home:shell
/etc/shadow
user1:$6$…..t1:17015:0:99999:7:::
username:password:password age:min:max:warn:inactive:usernameage:
/etc/group
newgroup:x:3000:user1,user2,user3
groupname:x:gid:groupmember
/etc/gshadow
newgroup:$6$…XI.:user1:user1,user2,user3
groupname:password:groupadmin:groupmember
權限
對目錄的意義
read:查看目錄內容,列表
excute:cd 讀目錄內文件內容
write:能刪和創建文件 配合x
對文件的意義
r:可使用文件查看類工具獲取其內容
w:可修改其內容
x可以把此文件提請內核啟動一個進程
X:加 x 到目錄上,而不給文件 x 權限(必須目錄內的文件沒有x)
chmod who opt per file…
who:u,g,o,a
opt:+,-,=
per:r,w,x,X
chmod 數字 file
數字:3個8進制
r w x
4 2 1 = 7
rw-r—–
420400000
6 0 0
chown 只能root能執行
chgrp root 或者 文件所有者user可將之改為user的所屬組
修改文件的屬主 和 屬組
chown
chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE… file 的主與rfile相同
-R 遞歸
chown user1:group1 file
同時修改 file 的 屬主 屬組
chown :group file
chown user1: file 則 主 與 組 都修改為 user1
以上兩條命令 簡單修改用戶屬性技巧
chgrp group1 filp
-R
–reference=RFILE FILE FILE 與 RFILE相同用戶組
此處再次重復以上回憶
文件權限
文件:
r:可使用文件查看類工具獲得其內容
w:可修改其內容
x:可把文件提請到內核啟動為一個進程
目錄:
r:可ls查看目錄中的文件列表
w:可在此目錄中創建文件,也可刪除此目錄內的文件
x:可使用ls -l查看此目錄中的文件列表,可cd 進入此目錄
X:只給目錄x權限,不給文件x權限(目錄內文件必須沒有x權限)
新建文件和目錄的默認權限
默認權限 = 最大權限 – umask
目錄
文件:發現結果有奇數權限+1, 偶數權限不變
umask值
新建file權限:666 – umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
新建dir 權限:777 – umask
非特權用戶umask是 002
root的 umask 是 022
umask命令:
umask # :直接設定值 如umask 002
umask -S 模式方式顯示
umask -p 輸出可被調用
全局設置: /etc/bashrc 用戶設置:~/.bashrc
linux 文件系統上的特殊權限
SUID SGID Stiky
前提:進程有屬主和屬組;文件有屬主和屬組
1,任何一個可執行程序文件能能啟動為進程:取決于發起者對程序文件是否擁有執行權限
2,啟動為進程之后,其進程的屬主衛發起者;進程的屬組為發起者所屬的組
3,進程訪問文件時的權限,取決于進程的發起者
a 進程的發起者,同文件的屬主:則應用文件屬主權限
b 進程的發起者,屬于文件屬主;則應用文件屬組權限
c 應用文件“其他”權限
可執行文件上SUID權限
任何一個可執行程序文件能不能啟動為進程:取決于發起者對于程序文件是否擁有執行權限
啟動為進程之后,其進程的屬組為原程序文件的屬主
SUID只對二進制可執行程序有效
SUID設置在目錄上無意義
權限設定:
chmod u+s file…
chmod u-s file…
可執行文件上SGID權限
任何一個可執行程序文件能不能啟動為進程:取決于發起者對于程序文件是否擁有執行權限
啟動為進程之后,其進程的屬組為原程序文件的屬組
權限設定:
chmod g+s FILE…
chmod g-s file…
目錄上的SGID權限
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
通常用于創建一個協作目錄
權限設定:
chmod g+s DIR…
chmod g-s DIR…
Sticky位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky位 ,只有文件的所有者或root可以刪除該文件
sticky設置在文件上無意義
權限設定:
chmod o+t DIR…
chmod o-t DIR…
SUID SGID STICKY
4 2 1
chmod 7777 xxx
chmod 4777 xxx
權限位映射
SUID :user,占據屬主的執行權限位
s:屬主擁有x權限
S:屬主沒有x權限
SGID :group,占據屬組的執行權限位
s:group擁有x權限
s:group沒有x權限
Sticky:other,占據other的執行權限位
t:other擁有x權限
T:other沒有x權限
總結
SUID 只能作用在2進制的程序上
Sticky 只能作用在目錄上
sgid 作用在二進制的程序上:用戶運行該程序是,自動繼承該 程序所屬組的權限
chmod g+s file
sgid 作用在目錄上時,該目錄內新建的文件或目錄的所屬組自動繼承該目錄的所屬組
chgrp groupname dir; chmod g+s dir
設定文件特殊屬性
chattr +i file… 給文件設特殊屬性 即使root 也不能刪除、改名、更改內容
chattr -i file…
chattr +a file… 給文件設特殊屬性 即使root…
只能追加內容 不能刪除、改名、更改內容
lsattr file 顯示文件的特殊屬性
訪問控制列表
ACL
除了文件的所有者,所屬組合其他人,可以對更多的用戶設置權限
getfacl file/directory 查看文件或目錄的訪問控制列表
setfacl -m u:user:rwx file
setfacl -m g:user:000 dir
給 特殊user 文件或目錄 添加訪問特殊權限
setfacl -M file.txt file/dir
創建指定文件
文件內容
u:user1:0
g:group1:rwx
u:user2:rw
setfacl -Rm g:group1:rw file/dir
setfacl -m d:u:user1:rx dir
d 默認 該目錄下后創建的都賦予user1特殊權限
setfacl -x u:user1 file/dir
刪除 user1 的特殊訪問權限
setfacl -X file.txt dir
創建文件 file.txt 并刪除文件內的用戶或組的特殊訪問權限
ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
getfacl可看到特殊權限:flags
默認ACL權限給了x,文件也不會繼承x權限。
base ACL 不能刪除
setfacl-k dir 刪除默認ACL權限
setfacl-b file1清除所有ACL權限
getfaclfile1 | setfacl–set-file=-file2 復制file1的acl權限給file2
訪問控制列表
maskmask只影響除所有者和other的之外的人和組的最大權限
[root@Centos7 testdir]# setfacl -m u:user1:rw xxx
[root@Centos7 testdir]# setfacl -m u:user2:r xxx
[root@Centos7 testdir]# setfacl -m u:user3:rwx xxx
[root@Centos7 testdir]# getfacl xxx
# file: xxx
# owner: root
# group: root
user::rw-
user:user1:rw-
user:user2:r–
user:user3:rwx
group::r–
mask::rwx
other::r–
這三個用戶我想都只有rw 權限 可直接用mask來改
[root@Centos7 testdir]# setfacl -m mask::rw xxx
[root@Centos7 testdir]# getfacl xxx
# file: xxx
# owner: root
# group: root
user::rw-
user:user1:rw-
user:user2:r–
user:user3:rwx #effective:rw-
group::r–
mask::rw-
other::r–
練習
在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如alice能對這些新文件有讀寫權限,組g3的成員如tom 只能對新文件有讀權限,其他用戶(不屬于g1,g2,g3)不能訪問這個文件夾
原創文章,作者:Nicolas ZhaoIV,如若轉載,請注明出處:http://www.www58058.com/30455