本章內容
解釋Linux的安全模型
解釋用戶帳號和組群帳號的目的
用戶和組管理命令
理解并設置文件權限
默認權限
特殊權限
ACL
安全3A
資源分派:
Authentication:認證
Authorization:授權
Accouting|Audition:審計
用戶user
令牌token,identity
Linux用戶:Username/UID
管理員:root, 0
普通用戶:1-65535
系統用戶:1-499, 1-999 (CentOS7)
對守護進程獲取資源進行權限分配
登錄用戶:500+, 1000+(CentOS7)
交互式登錄
用戶一登錄,系統就會發一個令牌token,
Linux中建一個帳號,會自動建一個同名的組,稱為私有組
組group
Linux組:Groupname/GID
管理員組:root, 0
普通組:
系統組:1-499, 1-999(CENTOS7)
普通組:500+, 1000+(CENTOS7)
組的類別
Linux組的類別
用戶的主要組(primary group)
用戶必須屬于一個且只有一個主組
組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組(supplementary group)
一個用戶可以屬于零個或多個輔助組
qjy g1 read g2 wrie g3 read 累加權限 read write
qjy,mage g1
Linux用戶和組的主要配置文件
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性
pwunconv???? 將口令從/etc/shadow轉換回/etc/passwd里顯示,不太安全,因誰都能看
修改passwd文件,可更改用戶的UID,把root的UID改成1000,qjy改成0,則qjy是#,root是$
第1項:login name:登錄用名(qjy)
第2項:passwd:密碼(X)
第3項:UID:用戶身份編號(1000)
第4項:GID:登錄默認所在組編號(1000)
第5項:GECOS:用戶全名或注釋
例如qjy用戶,chfn qjy可修改
finger qjy能看得更直觀一些
第6項:home directory:用戶主目錄(/home/qjy)
若修改后家目錄不存在,則登錄后會自動進入/目錄
但用戶的家目錄里有一些配置文件,修改后需拷到新目錄里
新建帳號的時候,系統會自動從ls /etc/skel -a目錄復制新配置文件到家目錄
cp -r /etc/skel/.[^.]* /data/qjy/
第7項:shell:用戶默認使用shell(/bin/bash)
默認shell可通過chsh -s /bin/csh qjy來修改
cat /etc/shells
注意有一個shell叫/sbin/nologin,可使一個帳號無法登陸、切換,很多服務都用的是/sbin/nologin,以防黑客利用,在創建帳號的時候即可直接指定
/etc/shadow
record:行? field:列
RHEL 5:$1指md5
Centos6和7:$6 sha512
$6$ Qb/LXy1YnfBRf59T:第二個$號是鹽salt
加密算法可以自己指定
shadow文件格式
登錄用名
用戶密碼:一般用sha512加密
從1970年1月1日起到密碼最近一次被更改的時間
密碼再過幾天可以被變更(0表示隨時可被變更)
密碼再過幾天必須被變更(99999表示永不過期)
密碼過期前幾天系統提醒用戶(默認為一周)
密碼過期幾天后帳號會被鎖定
從1970年1月1日算起,多少天后帳號失效
雙(單)!是鎖定的意思
加鎖和解鎖命令
usermod -L qjy??? 加鎖
usermod -U qjy?? 解鎖,解一個!,CentOS 6之后就不允許解鎖后空口令了,必需要加一個密碼
passwd -e qjy????? 使qjy帳號的密碼立即過期,需立即改口令
chage -d 0 qjy???? 同樣效果
chage -l qjy? 查看用戶的密碼情況
chage qjy???????????? 更改用戶密碼各有效期
cat /etc/login.defs
更改密碼的各默認有效期,郵件目錄,UID、GID的起止數(500/1000,60000),默認的加密算法等
cat /etc/default/useradd? 可修改創建帳號時的默認參數
Windows:net accounts命令
密碼加密
加密機制:
加密:明文–> 密文
解密:密文–> 明文
單向加密:哈希算法,原文不同,密文必不同
相同算法定長輸出,獲得密文不可逆推出原始數據
雪崩效應:初始條件的微小改變,引起結果的巨大改變
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
更改加密算法 authconfig –passalgo=sha256 –update
實際改的是這個文件:/etc/login.defs
密碼的復雜性策略
openssl rand -base64 12 輸出12位隨機字符,可用隨機字符做密碼
useradd -N qjy???? 創建新帳號默認屬于users組(GID=100)
cat /etc/group
group文件格式
組名:就是群組名稱
組口令:用戶可以自己把自己加入某個組里,前提是知道組的密碼
組GID:就是群組的 ID
組成員:以當前組為附加組的用戶列表(分隔符為逗號)
/etc/gshdow文件格式
群組名稱:就是群組名稱
群組密碼:
組管理員列表:組管理員的列表,更改組密碼和成員
以當前組為附加組的用戶列表 (分隔符為逗號),gshadow和group的附加組用戶列表應一致
給組加口令:gpasswd
newgrp 臨時改變用戶主組
vipw?????? 相當于vi /etc/passwd,有語法檢查功能
vigr??????? 相當于vi /etc/group,有語法檢查功能
pwck????? 對/etc/passwd進行語法檢查
grpck???? 對/etc/group進行語法檢查
getent passwd|shadow|group|gshadow [qjy]??? 快捷查看這幾個文件(里的某用戶)的信息
用戶和組管理命令
用戶管理命令
useradd
usermod
userdel
組帳號維護命令
groupadd
groupmod
groupdel
用戶創建:useradd
useradd [options] LOGIN
-u UID
-o 配合-u 選項,不檢查UID的唯一性
-g GID:指明用戶所屬基本組,可為組名,也可以GID
-c “COMMENT”:用戶的注釋信息
-d HOME_DIR: 以指定的路徑(不存在)為家目錄
-s SHELL: 指明用戶的默認shell程序
可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,…]:為用戶指明附加組,組須事先存在
-N 不創建私用組做主組,使用users組做主組
-r: 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
-m 創建家目錄,用于系統用戶
-M 不創建家目錄,用于非系統用戶
useradd -s /sbin/nologin -r -m openstack
以下命令查看了httpd服務的rpm安裝包中的腳本,生產中手工創建用戶基本也是這么寫的
[root@centos7 Packages]#rpm -qp –scripts /run/media/root/CentOS\ 7\ x86_64/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm
……
/usr/sbin/groupadd -g 48 -r apache 2> /dev/null || :
/usr/sbin/useradd -c “Apache” -u 48 -g apache \
-s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || :
……
默認值設定:/etc/default/useradd文件中
顯示或更改默認設置:
useradd -D
useradd -D -s SHELL
useradd -D -b BASE_DIR
useradd -D -g GROUP
新建用戶的相關文件和命令
/etc/default/useradd
/etc/skel/*
/etc/login.defs
newusers passwd格式文件 批量創建用戶
chpasswd 批量修改用戶口令
pass.txt
app1 redhat
app2:centos
app3:centos
useradd usermod userdel
-u
-r
-s
-d
-c
-g
-G
切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄
su – UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換
root su至其他用戶無須密碼;非root用戶切換時需要密碼
換個身份執行命令:
su [-] UserName -c ‘COMMAND’
選項:-l –login
su -l UserName 相當于 su – UserName
設置密碼
passwd [OPTIONS] UserName: 修改指定用戶的密碼
常用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-f:強制操作
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限
–stdin:從標準輸入接收用戶密碼
echo “PASSWORD” | passwd –stdin USERNAME
創建組
groupadd [OPTION]… group_name
-g GID: 指明GID號;[GID_MIN, GID_MAX]
-r: 創建系統組
CentOS 6: ID<500
CentOS 7: ID<1000
創建GID和UID相同的用戶:
groupadd -g 1234 nginx
useradd -g nginx -u 1234 nginx
修改和刪除組
組屬性修改:groupmod
groupmod [OPTION]… group
-n group_name: 新名字
-g GID: 新的GID
組刪除:groupdel
groupdel GROUP
注意:主組刪不掉,要把以此組為主組的用戶刪掉或移出
更改組密碼
組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,… 設置有管理權限的用戶列表
newgrp命令:臨時切換主組
如果用戶本不屬于此組,則需要組密碼
更改和查看組成員
groupmems [options] [action]
options:
-g, –group groupname 更改為指定組 (只有root)
Actions:
-a, –add username 指定用戶加入組
-d, –delete username 從組中刪除用戶
-p, –purge 從組中清除所有成員
-l, –list 顯示組成員列表
groups [OPTION].[USERNAME]… 查看用戶所屬組列表
[root@centos7 ~]#groupmems -l -g webs
varnish? nginx? qjy
[root@centos7 ~]#groupmems -g webs -a root
[root@centos7 ~]#groupmems -g webs -l
nginx? qjy? varnish? root
文件權限
1、對普通用戶來說,讀寫執行權限是嚴格的
2、普通用戶不能修改文件的所有者
3、普通用戶要修改文件的所屬組,一是文件要是他的,二是他要在改后的那個組里
修改文件的屬主和屬組
修改文件的屬主:chown
chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER
OWNER:GROUP
:GROUP
命令中的冒號可用.替換
-R: 遞歸
chown [OPTION]… –reference=RFILE FILE…
修改文件的屬組:chgrp
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
-R 遞歸
文件權限
文件的權限主要針對三類對象進行定義
owner: 屬主, u
group: 屬組, g
other: 其他, o
每個文件針對每類訪問者都定義了三種權限
r: Readable
w: Writable
x: eXcutable
文件:
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容
x: 可以把此文件提請內核啟動為一個進程
目錄:
r: 可以使用ls查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件
x: 可以cd進入此目錄,查看此目錄中文件的詳細屬性,也可以訪問此目錄中的文件
X: 只給目錄x權限,不給文件x權限
chomod change mode
chmod
方法1:mode法
chmod who opt per file
who:u g o a(all)
opt:+ – =
per:r w x X
chomod u+x,g-w,o=? file
刪除文件的權限,并不是由文件決定的,而是由目錄的權限決定的,目錄有w權限才能刪、新建
對讀寫權限來說,root帳戶是不受控制的,但執行權限對root帳戶有效
二進制的讀權限不是必須的,沒有讀權限也能執行,但用file命令無法判斷文件的類型了
對目錄來講,如果沒有讀權限,意味著不能查看目錄的文件列表
對目錄來講,如果沒有執行權限,意味著不能進到目錄里,不能查看目錄里文件的詳細屬性,也不能訪問目錄里的文件
所以對目錄來說,讀和執行是基本權限
權限的生效順序,是按所有者->所屬組->其他人來順序生效,一個生效了的話,后邊的就不看了,即使后邊的權限更大
vfat(fat32)是不支持這種讀寫執行權限的
chmod –reference=f1 f2 f3???? 參考f1來設置f2和f3的讀寫執行權限
方法2:數字法
rwx rw- r–
111 110 100
chmod 764 file
r:4
w:2
x:1
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
file:6rw,4r,0,1x
dir:7rwx,5r-x,0
chmod -R a+x dir1???? -R??? 遞歸
chmod -R +X dir1????????????? +X?? 針對目錄加執行權限,如果是已經有執行權限的文件也會加,沒有執行權限的文件不會加
目錄里的文件要執行,需要目錄至少有執行權限
危險命令:
chmod -R 777 qjy /*
chown -R qjy data /*
帶-R的都很危險!
生產中做操作一般都要先在測試環境試做!
umask
type umask 內部命令
umask+default=666/777
對文件,使用666計算,對文件夾,使用777計算
對文件,如果所得結果某位存在執行(奇數)權限,則將其權限+1
umask 026??? 可直接修改umask值
umask mask:掩碼
功能:取消對應的權限
666
125 umask
6? 6? 6
110110110
001010101 為1的取消
110100010
6? 4? 2
對于目錄
default權限=777-umask
對于文件
default權限=666-umask:對結果觀察,如有奇數位+1,偶數不變
改umask也只是改內存,要想存住的話,可加到.bashrc里
umask -p >> bashrc
root的umask默認為022
普通帳號的umask默認為002
默認umask實際存在/etc/bashrc里,但不建議改
SUID,SGID,Sticky
suid :繼承二進制程序所有者的權限
普通用戶能用passwd命令修改密碼,而/etc/passwd的權限是這樣的
[qjy@centos7 ~]$ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10? 2014 /usr/bin/passwd
chmod u+s file
chmod 4755 file
suid權限也很危險,只適合于應用在二進制的可執行程序上
sgid:
1)繼承二進制程序所有組的權限
2)作用于目錄,此目錄新建的文件繼承目錄的所屬組
chmod g+s file
chmod 2755 file
suid4 sgid2 sticky1
sticky又稱粘滯位
sticky:作用于目錄,此目錄的文件只能被所有者刪除
chmod o+t dir1
chmod 1777 dir1
Sticky 位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義
權限設定:
chmod o+t DIR…
chmod o-t DIR…
例如:
ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
suid :繼承二進制程序所有者的權限
sgid:
1)繼承二進制程序所有組的權限
2)作用于目錄,此目錄新建的文件繼承目錄的所屬組 -> 用得多點
sticky:作用于目錄,此目錄的文件只能被所有者刪除 -> 用得多點
root權限太大,為防止root誤操作,可設定文件特定屬性
設定文件特定屬性
chattr +i 不能刪除,改名,更改
chattr +a 只能追加內容
lsattr 顯示特定屬性
chattr +A 鎖定文件的讀時間
訪問控制列表
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?? 看自定義組的情況下可并列生效
為多用戶或者組的文件和目錄賦予訪問權限rwx
- mount -o acl /directory
- getfacl file |directory
- setfacl -m u:qjy:rwx file|directory
- setfacl -Rm g:sales:rwX directory -R遞歸
- setfacl -M file.acl file|directory -M是引用file.acl文件,可手寫file.acl權限表
- setfacl -m g:salesgroup:rw file| directory
- setfacl -m d:u:qjy:rx directory d:默認acl權限
- setfacl -x u:qjy file |directory
- setfacl -X file.acl directory -X是引用file.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:qjy: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/dir1
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95002