用戶和組管理
資源分派 安全3A
Authentication:認證
Authorization:授權
Accouting|Audition:審計
令牌token、identity(username/passwd)
linux用戶:Username/UID
管理員:root,0
普通用戶:1-60000自動分配
系統用戶:1-499,1-999
對守護進程獲取資源進行權限分配;
登錄用戶:500+,1000+
交互式登錄:
linux組:Groupname/GID
管理員組:root,0
普通組:
系統組:1-499,1-999
普通組:500+,1000+
linux安全上下文:
運行中的程序:進程(process)
以進程發起者的身份運行:
root:/bin/cat
user1:/bin/cat
進程所能夠訪問的所有資源的權限取決於進程的發起者的身份;
linux組的類別:
用戶的基本組:(主組)
用戶必須屬於一個且只有一個主組
組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組:(額外組):
一個用戶可以屬於零個或多個輔助組
linux用戶和組相關的配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、基本組ID等);
/etc/group:組及其屬性信息;
/etc/shadow:用戶密碼及其相關屬性;
/etc/gshadow:組密碼及其相關屬性;
/etc/passwd:
name:paaword:UID:GID:GECOS:directory:shell
用戶名:密碼:UID:GID:GECOS:主目錄:默認shell
login name:登錄用名(wang)
passwd:密碼 (x)
UID:用戶身份編號 (1000)
GID:登錄默認所在組編號 (1000)
GECOS:用戶全名或註釋
home directory:用戶主目錄 (/home/wang)
shell:用戶默認使用shell (/bin/bash)
/etc/group:
group_name:password:GID:user_list
組名:組密碼:GID:以當前組爲附加組的用戶列表(分隔符爲逗號)
羣組名稱:就是羣組名稱
羣組密碼:通常不需要設定,密碼是被記錄在 /etc/gshadow
GID:就是羣組的 ID
以當前組爲附加組的用戶列表(分隔符爲逗號)
/etc/shadow:
login name:登錄用名
encrypted password:用戶密碼:一般用sha512加密
date of last password change(最後修改口令的時間單位是天):從1970年1月1日起到密碼最近一次被更改的時間
minimum password age(密碼最短有效期):
maximum password age(密碼最長有效期):
password warning period(密碼過期前幾天系統提醒用戶):
password inactivity period(密碼過期幾天後帳號會被鎖定密碼活動週期):
account expiration date(密碼過期時間賬號失效日期):
reserved field(保留字段):
登錄名:加密了的密碼:最近一次更改密碼的日期:密碼的最小使用期限:最大密碼使用期限:密碼警告時間段:密碼禁用期:賬戶過期日期:保留字段
加密機制:
加密:明文<-- -->密文
解密:密文<-- -->明文
單項加密:提取數據指紋(唯一特徵碼)
哈希算法,原文不同,密文必不同
相同算法定長輸出,獲得密文不可逆推出原始數據
雪崩效應:初始條件的微小改變,引起結果的巨大改變
md5:message digest,128bit
sha1:secure hash algorithm,160bits
sha224:224bits
sha256:256bits
sha384:384bits
sha512:512bits
雪崩效應:初始的條件的微小改變,將會引起結果的巨大改變;
定長輸出:
更改加密算法:
authconfig --passalgo=sha256 --update
密碼的複雜性策略:
1、使用數字、大寫字母、小寫字母及特殊字符中至少3種;
2、足夠長:
3、使用隨機密碼:
4、定期更換;不要使用最近曾經使用過的密碼;
/etc/gshadow:
羣組名稱:就是羣的名稱
羣組密碼:
組管理員列表:組管理員的列表,更改組密碼和成員
以當前組爲附加組的用戶列表:多個用戶間用逗號分隔
用戶和組相關的管理命令:
用戶創建:useradd 一些創建用戶的參考:rpm -q --scripts postfix
useradd [options] LOGIN
-u UID:[UID_MIN UID_MAX ],UID_MIN UID_MAX定義在/etc/login.defs文件中;
-o:配合-u 選項,不檢查UID的唯一性
-g UID:指明用戶的所屬基本組,可以爲組名,也可以爲GID;
-c "COMMENT":用戶的註釋信息
-r:創建系統用戶,centos6:ID小於500 centos7:ID小於1000
-d /PATH/TO/HOME_DIR:指明家目錄,一般不要指定爲存在的目錄下,否則會報錯;
-s SHELL:指明用戶的默認shell程序,可用列表在/etc/shells文件中;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:爲用戶指明附加組,組必須事先存在;
-N:不創建私用組做主組,使用users組做主組
-m:創建家目錄,用於系統用戶
-M:不創建家目錄,用於非系統用戶
-D:顯示或 修改默認的設定值
-s SHELL:
-g:
-f:
新增用戶的默認值的設定文件: /etc/default/useradd
[root@localhost ~]# cat /etc/default/useradd
useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel 家目錄的參考模板
CREATE_MAIL_SPOOL=yes
cp -r /home/wang/. /data/wanghome
等同於 cp -r /home/wang/`ls -A` /data/wanghome
注意*號不匹配隱藏文件
新建用戶的相關文件和命令
/etc/default/useradd
/etc/skel/*
/etc/login.defs
newusers passwd格式文件 批量創建用戶
chpasswd 批量修改用戶口令
組創建:groupadd
groupadd [options] group
-g GID:指明GID號,[GID_MIN GID_MAX ],GID_MIN GID_MAX定義在/etc/login.defs文件中;
-r:創建系統組,centos6:ID小於500 centos7:ID小於1000
新建用戶和組的一些默認配置文件:cat /etc/login.defs
id:查看用戶的相關ID信息
id [OPTION]... [USERNAME]
-u:顯示UID
-g:顯示GID
-G:顯示GROUPS,顯示用戶所屬的組的ID
-n:name,顯示名稱,需配合ugG使用 -u -n -g -n
id -u root
su:切換用戶或以其他用戶身份執行命令
su [options...] [-] [user [args...]]
- 用戶:注意-前後都有空格字符
注意使用-和不使用的區別:
切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件;不改變當前工作目錄
su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換;
注意:root su至其他用戶無需密碼,非root用戶切換時需要密碼;
換個身份執行命令:
su [-] UserName -c 'COMMAND'
選項:-l --login
su -l UserName 相當於 su - UserName
-l:和-用法相同
usermod:修改用戶信息,用戶屬性修改
usermod [options] LOGIN
-u UID:新UID
-g GID:新基本組
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append;
usermod -G "" wang 或者usermod -G "wang" wang 此命令用於清空附加組
-s SHELL:新的默認SHELL
-c 'COMMENT':新的註釋信息
-d HOME: 新家目錄不會自動創建(原有家目錄中的文件不會同時移動至新的家目錄);
若要創建新家目錄並移動原家數據,同時使用-m選項
-l login_name: 新的名字
-L: lock指定用戶,在/etc/shadow 密碼欄的增加 !
-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
-e YYYY-MM-DD:指明用戶賬號過期日期;
-f INACTIVE:設定非活動期限;
給用戶添加密碼:passwd
passwd [OPTIONS] UserName: 修改指定用戶的密碼
passwd UserName:修改指定用戶的密碼;僅root用戶權限
passwd:修改自己的密碼;
常用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-f:強制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告用戶修改密碼
-i inactive-days:非活動期限,密碼過期後多少天允許登錄使用
--stdin:從標準輸入接受用戶密碼;
ehco "PASSWORD" | passwd --stdin USERNAME
注意:/dev/null,bit buckets
/dev/zero,
生成隨機口令:openssl rand -base64 12
cat /dev/urandom |tr -dc 'a-zA-Z0-9'|head -c12
批量修改密碼操作方法:
newusers passwd格式文件 批量創建用戶
chpasswd 批量修改用戶口令
newusers:update and create new users in batch
chpasswd:update passwords in batch mode 批量修改用戶密碼
windowns查看密碼信息
C:\Users\bin>net accounts
強制用戶在時間到期之後多久必須註銷?: 從不
密碼最短使用期限(天): 0
密碼最長使用期限(天): 42
密碼長度最小值: 0
保持的密碼歷史記錄長度: None
鎖定閾值: 從不
鎖定持續時間(分): 30
鎖定觀測窗口(分): 30
計算機角色: WORKSTATION
命令成功完成。
userdel:刪除用戶 userdel [options] LOGIN
-r:刪除用戶家目錄和郵件;
groupmod:組屬性修改
groupmod [options] GROUP
-n groupname:指定新名稱
-g GID:指定新的GID
組刪除:groupdel 用戶的主組不能刪除
groupdel [options] GROUP
groupdel GROUP
組密碼更改:gpasswd
gpasswd [option] group
-a user:將user添加至指定組中;
-d user:從指定組中移除用戶user,刪除用戶user的以當前組爲組名的附加組;
-A user1,user2,... :設置有管理權限的用戶列表;
newgrp命令:臨時切換基本組
如果用戶本不屬於此組,則需要組密碼;
groupmems:更改和查看組成員(只有root可以執行)
groupmems [options] [action]
options:
-g, --group groupname 更改爲指定組 (只有root)
Actions:
-a, --add username 指定用戶加入組
-d, --delete username 從組中刪除用戶
-p, --purge 從組中清除所有成員
-l, --list 顯示組成員列表
groups [OPTION].[USERNAME]... 查看用戶所屬組列表
修改用戶屬性:chage
chage [options] LOGIN
-d, --lastday LAST_DAY
-E, --expiredate EXPIRE_DATE
-I, --inactive INACTIVE
-m, --mindays MIN_DAYS
-M, --maxdays MAX_DAYS
-W, --warndays WARN_DAYS
-l 顯示密碼策略
其它命令:cgfn、finger、chsh
chfn:提供使用者更改個人信息,change finger information,
chfn 指令可用來更改執行 finger 指令時所顯示的信息,這些信息都存放在/etc 目錄裏
finger:user information lookup program
用來查找並顯示用戶信息,系統管理員通過使用該命令可以知道某個時候到底有多少用戶在使用這臺Linux主機
chsh:修改用戶的登錄shell
-s:指定用戶的登錄shell
-l:顯示/etv/shells中的shell列表,然後退出
getent:用來察看系統的數據庫中的相關記錄
getent passwd|group|shadow|gshadow
pwconv:命令用於開啓用戶的投影密碼
即將用戶的密碼在/etc/passwd的第二部分用x代替顯示
pwunconv:關閉用戶的投影密碼
即將用戶的密碼在/etc/paawd文件中顯示
文件操作:
vipw vi=nano /etc/passwd
vigr vi=nano /etc/gpasswd
pwck命令:檢查密碼相關信息
pwck:verify integrity of password files
grpck:verify integrity of group files
權限管理:
文件的權限主要針對三類對象進行定義:
owner:屬主,u
group:屬組,g
other:其它,o
每個文件針對每類訪問者都定義了三種權限:
r:Readable
w:Writeadble
x:Excutable
文件:
r:可使用文件查看類工具獲取其內容;
w:可修改其內容;
x:可以把此文件提請內核啓動爲一個進程;
目錄:
r:可以使用ls查看此目錄中文件列表;
w:可在此目錄中創建文件、也可刪除此目錄中的文件;
x:可以ls -l查看此目錄中文件列表元數據(須配合r),可以cd進入此目錄;
X 只給目錄x權限,不給文件x權限
修改文件權限:
chmod
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
1、chmod 640 文件或目錄
2、修改一類用戶的權限:
chmod u=rwx 文件或目錄883
chmod u=rwx,g=r-x 文件或目錄
chmod ug=rw- 文件或目錄
chmod a-x 文件或目錄
chmod +x 文件或目錄
3、chmod [OPTION]... --reference=RFILE FILE...
參考RFILE文件的權限,將FILE的修改爲同RFILE
選項:
-R:遞歸修改權限
-
a+X:其中X的含義:X 只給目錄x權限,不給文件x權限
修改文件的屬主和屬組:僅root可用
修改文件的屬主:chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
選項:
OWNER
OWNER:GROUP
:GROUP,冒號也可用 . 替換
-R: 遞歸修改文件的屬組:chgrp chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... -R 遞歸
文件或目錄重建時的遮罩碼:umask
文件的默認權限:666-umask
注意:如果某類的用戶的權限減得的結果中存在x權限,則將其權限+1
(所得結果某位存在執行(奇數)權限,則將其權限+1)
目錄的默認權限:777-umaskumask:查看 umask #:設定 示例:umask 002 umask u=rw,g=r,o= umask –S 模式方式顯示
-
umask –p 輸出可被調用
root用戶的默認值爲0022
非特權用戶umask是 002
文件默認權限爲644
目錄默認權限爲755
新建的文件默認權限爲 666-022=644
新建的目錄默認權限爲 777-022=755
文件: 666-umask 結果爲偶數位的不變,奇數位的加1 列如666-125=541=642
目錄: 777-umask全局設置: /etc/bashrc 用戶設置:~/.bashrc /etc/bashrc中包含默認的umask值的設置 誤刪除git用戶的家目錄後,恢復家目錄的方法 mkdir /home/gir;cp -a /etc/skel/.[^.]* /home/git;chown -R git:git /home/git;chmod 700 /home/git cp /etc/skel /home/git;chown -R git:git /home/git;chmod 700 /home/git
linux文件系統上的特殊權限
SUID, SGID, Sticky
三種常用權限:r, w, x user, group, other
安全上下文
前提:進程有屬主和屬組,文件有屬主和屬組
(1)任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限;
(2)啓動爲進程之後,其進程的屬主爲發起者,屬組爲發起者所屬的組;
(3)進程訪問文件時的權限,取決於進程的發起者:
(a)進程的發起者,同文件的屬主,則應用文件屬主權限;
(b)進程的發起者,屬於文件的屬組,則應用文件屬組權限;
(c)應用文件“其它”權限;
SUID 可執行文件上SUID權限
(1)任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限;
(2)啓動爲進程之後,其進程的屬主爲原程序文件的屬主;ls -l `which passwd`
(3)只適合二進制的可執行程序文件
(4)SUID設置在目錄上無意義
權限設定:suid=4
chmod u+s file... 或者chmod 4XYZ file.. 其中XYZ表示原來文件的數字權限
chmod u-s file... 或者chmod XYZ file.. 其中XYZ表示原來文件的數字權限
需要注意的是因爲權限的所有者位置權限顯示爲s或者S,s表示包含x權限,S表示不包含x權限
SGID
可執行文件上SGID權限
任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限
啓動爲進程之後,其進程的屬組爲原程序文件的屬組
權限設定:
chmod g+s FILE...
chmod g-s FILE...
目錄上的SGID權限
默認情況下,用戶創建文件時,其屬組爲此用戶所屬的基本組。
一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組爲此目錄的屬組;
通常用於創建一個協作目錄
權限設定
chmod g+s DIR... 或者chmod 2XYZ file.. 其中XYZ表示原來文件的數字權限
chmod g-s DIR... 或者chmod XYZ file.. 其中XYZ表示原來文件的數字權限
Sticky 粘滯位 針對目錄設置有意義,針對文件沒有實際價值
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
對於一個多人可寫的目錄,如果設置了sticky,則每個用戶僅能刪除自己的文件;
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
權限設定:
chmod o+t DIR... 或者chmod 1XYZ file.. 其中XYZ表示原來文件的數字權限
chmod o-t DIR... 或者chmod XYZ file.. 其中XYZ表示原來文件的數字權限
ls -ald /tmp
ls -ald /var/tmp
SUID SGID STICKY
000
111
幾個權限位映射:
SUID:user佔據屬主的執行權限位:
s:屬主擁有x權限
S:屬主沒有x權限
SGID:group佔據屬組的執行權限位:
s:屬組擁有x權限
S:屬組沒有x權限
Sticky:other佔據other的執行權限位:
s:other擁有x權限
S:other沒有x權限
文件和目錄權限的注意點:
文件的刪除權限是由所在的目錄的權限決定的,
進入目錄的權限由目錄的x權限控制
suid:繼承二進制程序所有者的權限 功能:執行此文件的用戶將臨時繼承此文件所有者的權限 su
sgid:繼承二進制程序所有組的權限;功能:執行此文件的用戶將臨時繼承此文件所屬組的權限
*作用於目錄,此目錄新建的文件繼承目錄的所屬組
sticky:*作用於目錄,此目錄的文件只能被所有者和root刪除 /tmp目錄
設定文件特定屬性
chattr +i 不能刪除,改名,更改
chattr +a 只能追加內容
lsattr 顯示特定屬性
chattr +A 鎖定atime
訪問控制列表
ACL:Access Control List,實現靈活的權限管理
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
CentOS7 默認創建的xfs和ext4文件系統具有ACL功能
CentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
-
ACL生效順序:所有者,自定義用戶,自定義組,其他人
ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限 getfacl 可看到特殊權限:flags 通過ACL賦予目錄默認x權限,目錄內文件也不會繼承x權限 base ACL 不能刪除 setfacl -k dir 刪除默認ACL權限 setfacl –b file1清除所有ACL權限 getfacl file1 | setfacl --set-file=- file2 複製file1的acl權限給file2 mask隻影響除所有者和other的之外的人和組的最大權限 Mask需要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission) 用戶或組的設置必須存在於mask權限設定範圍內纔會生效 setfacl -m mask::rx file --set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以 示例: setfacl --set u::rw,u:wang:rw,g::r,o::- file1 備份和恢復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/dir1setfacl - set file access control lists -m:--modify=acl modify the current ACL(s) of file(s) setfacl -m u:wangbin:rw f1 setfacl -m mask::r f1 -M, --modify-file=file read ACL entries to modify from file -X, --remove-file=file read ACL entries to remove from file -x:--remove=acl remove entries from the ACL(s) of file(s) -b:-remove-all remove all extended ACL entries 清空所有setfacl設置的權限 全部清除acl權限使用-b,清空部分acl權限使用-x -d, --default operations apply to the default ACL getfacl file:查看file文件的setfacl設置的權限信息 爲多用戶或者組的文件和目錄賦予訪問權限rwx mount -o acl /directory getfacl file |directory setfacl -m u:wang:rwx file|directory setfacl -Rm g:sales:rwX directory setfacl -M file.acl file|directory setfacl -m g:salesgroup:rw file| directory setfacl -m 7 setfacl -x u:wang file |directory setfacl -X file.acl directory [root@localhost data]# setfacl -m u:wangbin:rw ens33 [root@localhost data]# setfacl -m mask:r ens33 [root@localhost data]# getfacl ens33 # file: ens33 # owner: root # group: root user::rw- user:wangbin:rw- #effective:r-- group::r-- mask::r-- other::r-- [root@localhost data]# setfacl -m u:wangbin:rw ens33 [root@localhost data]# getfacl ens33 # file: ens33 # owner: root # group: root user::rw- user:wangbin:rw- group::r-- mask::rw- other::r-- 備份/testdir/dir裏所有文件的ACL權限到/root/acl.txt中,清除/testdir/dir中所有ACL權限,最後還原ACL權限
-
getfacl對目錄操作時,不能使用絕對路徑;
[root@Magedu ~]# tar -cvf dir.tar /testdir/dir
[root@Magedu ~]# getfacl -R testdir/dir > /root/acl.txt
清除/testdir/dir中所有ACL權限
[root@Magedu ~]# setfacl -b testdir/dir
還原ACL權限
[root@Magedu ~]# tar -xvf dir.tar -C /var/tmp
[root@Magedu ~]# cp ac1.txt /var/tmp
[root@Magedu ~]# cd /root
setfacl --restore ac1.txttar -cvf dir.tar /testdir/dir getfacl -R testdir/dir > /root/acl.txt setfacl -b testdir/dir tar -xvf dir.tar -C /var/tmp cp acl.txt /var/tmp cd /root setfacl --restort acl.txt