關于文件的安全我們要從3A驗證 說起
1 Authentication:認證
2 Authorization:授權
3 Accouting|Audition:審計
由于系統文件的用戶太多為了便于管理 我們便把系統的用戶 進行分類 賦予權限 合理地分配資源 所以今天介紹的是 系統用戶 用戶組 的一些權限的 分配 修改 和文件的 權限修改 和賦權 以及一些特殊權限的用法
用戶的分類
管理員:root 0 ?
普通用戶:1-65535
系統用戶:1-499(CENTOS6) 1-999 對守護進程獲取資源進行權限分配
登錄用戶:500(CENTOS6)+ 1000+
交互式登錄
用戶組的分類
Linux組:Groupname/GID ?
管理員組:root 0 ?
普通組有 系統組:1-499 1-999 和普通組:500+ 1000+
linux的安全上下文
運行中的程序:進程 (process) 以進程發起者的身份運行: root: /bin/cat mage: /bin/cat 進程所能夠訪問資源的權限取決于進程的運行者的身份所以我們會針對不同的用戶 和用戶組 分配不同的權限以便更好地進行系統的運行
Linux用戶和組的類別
用戶的主要組(主組): 用戶必須屬于一個且只有一個主組 組名同用戶名 且僅包含一個用戶:私有組 用戶的附加組(輔助組): 一個用戶可以屬于零個或多個輔助組
用戶和組的配置文件
Linux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性
文件的格式
passwd 文件格式
login name:登錄用名(wang) ?
passwd:密碼 (x) ?
UID:用戶身份編號 (1000) ?
GID:登錄默認所在組編號 (1000) ?
GECOS:用戶全名或注釋 ?
home directory:用戶主目錄 (/home/wang) ?
shell:用戶默認使用shell (/bin/bash)
passwd 和gpasswd的用法
passwd [OPTIONS] UserName: 修改指定用戶的密碼,僅 root用戶權限 ?
passwd: 修改自己的密碼; ? 常用選項:
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限;
–stdin:從標準輸入接收用戶密碼;
echo "PASSWORD" | passwd –stdin USERNAME
組密碼:gpasswd ?gpasswd [OPTION] GROUP
-a user: 將user添加至指定組中;
-d user: 從指定組中移除用戶user
-A user1,user2,…: 設置有管理權限的用戶列表 ?
newgrp命令:臨時切換基本組; 如果用戶本不屬于此組,則需要組密碼
密碼的加密機制
加密:明文–> 密文 解密:密文–> 明文 ?
單向加密:哈希算法,原文不同,密文必不同 相同算法定長輸出,獲得密文不可逆推出原始數據 雪崩效應:初始條件的微小改變,引起結果的巨大改變
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits s
ha256: 256bits
sha384: 384bits
sha512: 512bits ?
更改加密算法 authconfig –passalgo=sha256 –update
shadow文件格式
登錄用名 ?
用戶密碼:一般用sha512加密 ?
從1970年1月1日起到密碼最近一次被更改的時間 ?
密碼再過幾天可以被變更(0表示隨時可被變更) ?
密碼再過幾天必須被變更(99999表示永不過期) ?
密碼過期前幾天系統提醒用戶(默認為一周) ?
密碼過期幾天后帳號會被鎖定 ?
從1970年1月1日算起,多少天后帳號失效
group文件格式
群組名稱:就是群組名稱 ?
群組密碼:通常不需要設定,密碼是被記錄在 /etc/gshadow ?
GID:就是群組的 ID ? 以當前組為附加組的用戶列表(分隔符為逗號)
gshdow文件格式
群組名稱:就是群組名稱 ? 群組密碼: ? 組管理員列表:組管理員的列表,更改組密碼和成員 ? 以當前組為附加組的用戶列表:(分隔符為逗號)
用戶和組管理命令以及 用戶創建 創建用戶 用戶屬性修改 和刪除用戶
第一 創建用戶
默認值設定:/etc/default/useradd文件中 ?
顯示或更改默認設置: useradd -D useradd –D -s SHELL
第二用戶創建
useradd [options] LOGIN
-u UID: [UID_MIN, UID_MAX]定義在/etc/login.defs -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
第三用戶屬性修改
usermod [OPTION] login
-u UID: 新UID
-g GID: 新基本組
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加組,原來的附加 組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append;
-s SHELL:新的默認SHELL;
-c 'COMMENT':新的注釋信息;
-d HOME: 新家目錄不會自動創建,原家目錄中的文件不會同時移 動至新的家目錄;若要創建新家目錄并移動原家數據,同時使用-m選項
-l login_name: 新的名字;
-L: lock指定用戶,在/etc/shadow 密碼欄的增加 !
-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
-f INACTIVE: 設定非活動期限;
第四刪除用戶
userdel [OPTION]… login -r: 刪除用戶家目錄
接下來介紹一下如何批量創建用戶 以及修改命令口令
1 /etc/default/useradd ?
2 /etc/skel/* ?
3 /etc/login.defs ?
newusers passwd格式文件 批量創建用戶 ?
chpasswd 批量修改用戶口令
當你創建完用戶時你可以查看查看用戶相關的ID信息
id [OPTION]… [USER]
-u: UID
-g: GID
-G: Groups
-n: Name
如何切換用戶或以其他用戶身份執行命令
su [options…] [-] [user [args…]] ?
切換用戶的方式: su UserName:
非登錄式切換,即不會讀取目標用戶的 配置文件,不改變當前工作目錄
su – UserName:登錄式切換,會讀取目標用戶的配置 文件,切換至家目錄,
完全切換 ?root su至其他用戶無須密碼;非root用戶切換時需要密碼 ? 換個身份執行命令:
su [-] UserName -c 'COMMAND'
選項:-l –login:
su -l UserName 相當于 su – UserName
用戶組的創建修改和刪除 以及密碼的修改
第一創建組
groupadd [OPTION]… group_name
-g GID: 指明GID號;[GID_MIN, GID_MAX]
-r: 創建系統組; CentOS 6: ID<500 CentOS 7: ID<1000
第二修改和刪除組
組屬性修改: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]… 查看用戶所屬組列表
文件的 三類用戶權限 和三種特殊權限 以及 ACL:Access Control List,實現靈活的權限管理
文件的權限主要針對三類對象進行定義:
owner: 屬主, u group: 屬組, g other: 其他, o ?
每個文件針對每類訪問者都定義了三種權限: r: Readable w: Writable x: eXcutable
文件:
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容
x: 可以把此文件提請內核啟動為一個進程 ?
目錄:
r: 可以使用ls查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件
x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此
目錄 X:只給目錄x權限,不給文件x權限【前提是子目錄中的文件 沒有執行權限】
權限的計算
— 000 0 ?
–x 001 1 ?
-w- 010 2 ?
-wx 011 3 ?
r– 100 4 ?
r-x 101 5 ?
rw- 110 6 ?
rwx 111 7 ?
例如: 640: rw-r—-r
wxr-xr-x: 755
修改文件權限
chmod [OPTION]… OCTAL-MODE FILE…
-R: 遞歸修改權限 ?
chmod [OPTION]… MODE[,MODE]… FILE… MODE: 修改一類用戶的所有權限: u= g= o= ug= a= u=,g= 修改一類用戶某位或某些位權限 u+ u- g+ g- o+ o- a+ a- + ?
chmod [OPTION]… –reference=RFILE FILE… 參考RFILE文件的權限,將FILE的修改為同RFILE;
權限設置
chgrp sales testfile ?
chown root:admins testfile ?
chmod u+wx,g-r,o=rx file ?
chmod -R g+rwX /testdir ?
chmod 600 file ?
chown mage testfile
三種文件系統中的特殊權限 ?SUID, SGID, Sticky 簡稱權限的繼承
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… ?
例如: ? ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
特殊權限數字法
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7 ?
chmod 4777 /tmp/a.txt
通過此公式可算出特殊權限的值
因為上面所見到的權限具有局限性 只能服務于三類用戶所以就有了后來的ACL權限設置法如下
ACL:Access Control List,實現靈活的權限管理 ? 除了文件的所有者,所屬組和其它人,可以對更多的用戶設 置權限 ?CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。 ?CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL 功能。需手動增加: tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1 /mnt ?ACL生效順序:所有者,自定義用戶,自定義組,其他人
以及為多用戶或者組的文件和目錄賦予訪問權限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 d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory
課后作業
在/data/testdir里創建的新文件自動屬于yun1組,組yun2的成員如:alice能對這些新文件有讀寫權限,組yun3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于yun1,yun2,yun3)不能訪問這個文件夾。
[root@localhost ~]# groupadd yun1
[root@localhost ~]# groupadd yun2
[root@localhost ~]# groupadd yun3
[root@localhost ~]# mkdir -p /data/testdir
[root@localhost ~]# chown -R :yun1 /data/testdir
[root@localhost ~]# ll -d /data/testdir
[root@localhost ~]# chmod 770 /data/testdir
[root@localhost ~]# ll -d /data/testdir
[root@localhost ~]# useradd -G yun2 alice
[root@localhost ~]# useradd -G yun3 tom
[root@localhost ~]# setfacl -m g:yun2:rw /data/testdir
[root@localhost ~]# setfacl -m g:yun3:r /data/testdir
[root@localhost ~]# getfacl /data/testdir
[root@localhost ~]# ll -d /data/testdir/
電腦演示
[root@localhost Desktop]# groupadd yun1
[root@localhost Desktop]# groupass yun2
bash: groupass: command not found
[root@localhost Desktop]# groupadd yun2
[root@localhost Desktop]# groupadd yun3
[root@localhost Desktop]# mkdir -p /data/testdir
[root@localhost Desktop]# chown -R :yun1 /data/testdir
[root@localhost Desktop]# ll -d /data/testdir
drw-r–r–. 2 root yun1 4096 Aug 3 08:41 /data/testdir
[root@localhost Desktop]# chmod u+rwX/data/testdir
chmod: missing operand after `u+rwX/data/testdir'
Try `chmod –help' for more information.
[root@localhost Desktop]# chmod 770 /data/testdir
[root@localhost Desktop]# ll -d /data/testdir
drwxrwx—. 2 root yun1 4096 Aug 3 08:41 /data/testdir
[root@localhost Desktop]# useradd -G g2 alice
useradd: group 'g2' does not exist
[root@localhost Desktop]# useradd -G yun2 alice
[root@localhost Desktop]# useradd -G yun3 tom
[root@localhost Desktop]# setfacl -m g:yun2:rw /data/testdir
[root@localhost Desktop]# setfacl -m g:yun3:r /data/testdir
[root@localhost Desktop]# getfacl /data/testdir
getfacl: Removing leading '/' from absolute path names
# file: data/testdir
# owner: root
# group: yun1
user::rwx
group::rwx
group:yun2:rw-
group:yun3:r–
mask::rwx
other::—
[root@localhost Desktop]# ll -d /data/testdir/
drwxrwx—+ 2 root yun1 4096 Aug 3 08:41 /data/testdir/
[root@localhost Desktop]#
創建組sales,gid 3000,passwd:centos,sales admins:dada2
將用戶dada1,dada2,dada3加入到sales輔助組
希望dada1 創建新文件 默認的所屬組為sales
dada2將用戶dada3從sales組移除
刪除sales,dada1,dada2
[root@localhost ~]# groupadd -g 3000 sales
[root@localhost ~]# gpasswd sales
[root@localhost ~]# useradd -G sales dada2
[root@localhost ~]# gpasswd -A dada2 sales
[root@localhost ~]# useradd -G sales dada1
[root@localhost ~]# useradd -G sales dada3
[root@localhost ~]# usermod -g sales dada1
[root@localhost ~]# su – dada1
[user1@localhost ~]$ touch f1.txt
[user1@localhost ~]$ ll f1.txt
[user1@localhost ~]$ exit
[root@localhost ~]# su – dada2
[user2@localhost ~]$ gpasswd -d dada3 sales
[user2@localhost ~]$ exit
[root@localhost ~]# userdel -r dada1
[root@localhost ~]# userdel -r dada2
[root@localhost ~]# groupdel sales
電腦演示
[root@localhost Desktop]# groupadd -g 3000 sales
groupadd: group 'sales' already exists
[root@localhost Desktop]# gpasswd sales
Changing the password for group sales
New Password:
Re-enter new password:
[root@localhost Desktop]# useradd -G sales dada2
[root@localhost Desktop]# gpasswd -A dada2 sales
[root@localhost Desktop]# useradd -G sales dada1
[root@localhost Desktop]# useradd -G sales dada3
[root@localhost Desktop]# usermod -g sales dada1
[root@localhost Desktop]# su – dada1
[dada1@localhost ~]$ touch tiantain.txt
[dada1@localhost ~]$ ll tiantian.txt
ls: cannot access tiantian.txt: No such file or directory
[dada1@localhost ~]$ touch f1.txt
[dada1@localhost ~]$ ll f1.txt
-rw-r–r–. 1 dada1 sales 0 Aug 3 09:22 f1.txt
[dada1@localhost ~]$ exit
logout
[root@localhost Desktop]# su – dada2
[dada2@localhost ~]$ gpasswd -d dada3 sales
Removing user dada3 from group sales
[dada2@localhost ~]$ exit
logout
[root@localhost Desktop]# userdel -r dada1
userdel: group dada1 not removed because it is not the primary group of user dada1.
[root@localhost Desktop]# userdel -r dada2
[root@localhost Desktop]# groupdel sales
[root@localhost Desktop]#
原創文章,作者:a1215276209,如若轉載,請注明出處:http://www.www58058.com/27726