使用者及檔案權限
1.使用者了解
使用者就是系統使用者的身份,一般有超級使用者和普通使用者
在系統中使用者存儲為若幹串字元和若幹個系統配置檔案
使用者資訊涉及到的系統配置檔案:
/etc/passwd ###使用者資訊
比如:kiosk使用者
kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash
使用者為kiosk:密碼x(隐藏起來了):uid為1000:gid為1000:說明文字“kiosk”:家目錄/home/kiosk:使用者使用的shell為/bin/bash
/etc/shadow ###使用者認證資訊
比如kiosk使用者的認證資訊
kiosk:$6$lYEMED5q$ydTHZAWDoggDEcS13WQO26vzofATD2UcMSagP8qPBl3PcRJujxI10lAbz25l9IuWIL8QMtrUZulzTSzcQCTJm0:17524:0:999999:3:2::
使用者為kiosk:密碼為綠色區域:最後一次密碼修改該時間-預設1970年1月1号:最短有效期0天:最長有效期999999天:警告期3天:非活躍期2天:帳号到期日-未設定
/etc/group ###組資訊
比如root組資訊 root:x:0:
組名稱為root:組密碼x(隐藏起來了):組id為0:附加組成員無
/etc/gshadow ###組認證資訊
/home/username ###使用者家目錄
/etc/skel/.* ###使用者骨架檔案
當不小心删除了/etc/passwd 可以執行指令 cp /etc/passwd- /etc/passwd ,相應的/etc/group也有相應的備份檔案/etc/group-
2.使用者管理
(1).使用者建立(僅超級使用者,普通使用者建立新使用者需要相關權限,後邊再說)
useradd 參數 使用者名字
-u ##指定使用者uid
-g ##指定使用者初始組資訊,這個組必須已經存在
-G ##指定附加組,這個組必須存在
-c ##使用者說明
-d ##使用者家目錄
-s ##使用者所使用的shell,/etc/shells記錄了使用者能使用shell的名字
(2)使用者删除
userdel -r 使用者名稱 ## -r 表示删除使用者資訊及使用者的系統配置
(3)組的建立
groupadd -g 組名 ##建立組
groupdel 組名字 ##删除組
對以上指令進行實驗,執行以下指令進行實驗的監控
回車後,打開監控内容,建立一個shell
建立westos新使用者,初始uid為1003,監控内容可以看出相應的組建立了gid為1003,家目錄為/home/westos
指令: useradd -u 1003 westos
再次實驗useradd -g westos(實驗前執行userdel -r westos 删除westos使用者的配置資訊)gid初始為1004,2222,很明顯無法建立,因為gid為1004,2222的組不存在,試 試21,成功了
指令 :userdel -r westos useradd -g 21 westos
删除westos配置資訊,指定westos使用者附加組cpdump,組id為72
指令: userdel -r westos useradd -G 72 westos
添加說明westos是進行使用者建立實驗的使用者,第一次未執行userdel -r westos指令westos已經存在,故無法建立,系統預設westos uid gid為1001。
指令:userdel -r westos useradd -c “使用者建立的實驗” westos
删除westos使用者資訊,建立westos指定家目錄為/mnt/w-home
指令:userdel -r westos useradd -d /mnt/w-home westos
删除使用者westos使用者資訊,指定所使用shell為/bin/tcsh
指令: userdel -r westos useradd -s /bin/tcsh westos
建立組group1 ,gid為1234
指令: groupadd -g 1234 group1
删除很簡單了直接執行指令: groupdel group1
(4)使用者id資訊的檢視
id 參數 使用者
-u ##使用者uid
-g ##使用者初始組id
-G ##使用者所有所在組id
-n ##顯示名稱而不是id數字
-a ##顯示所有資訊
id檢視westos使用者資訊;id -u westos檢視westos uid顯示1001,其他同此。需要說明的是,id -a westos和id westos顯示結果相同。
(5)使用者資訊更改
usermod 參數 使用者名
-l ##更改使用者名稱
-u ##更改uid
-g ##更改gid
-G ##更改附加組
-aG ##添加附加組
-c ##更改說明
-d ##更改家目錄
-md ##更改家目錄指定及家目錄名稱
-s ##更改shell
-L ##當機帳号
-U ##解鎖
實驗
将使用者名westos改成redhat
執行指令 usermod -l redhat westos 監控資訊中名稱變成redhat ;usermod -l【欲修改使用者新名稱】 【原名稱】
将westos使用者的uid改為1005,輸入指令usermod -u 1005 westos 後回車顯示改變了。Gid的修改需要組id已經存在,否則無法修改,不再實驗
将westos添加到附加組slocate中
執行指令: usermod -G 21 westos
将westos 添加到group1中
指令 usermod -G group1 westos
可以發現usermod -G 組名稱/組id使用者 都是可以将其添加到附加組内的
再把westos添加到group1附加組的基礎上,還要把westos添加到slocate組中
執行指令: uesrmod -aG 21 westos 意思是在westos已經屬于group1組的基礎上在将其添加到slocate中
更改westos使用者家目錄并且指定到/mnt/test下
執行指令: usermod -md /mnt/test/ westos
鎖定及解鎖westos使用者,usermod -L westos鎖定使用者密碼,usermod -U westos解鎖密碼,用cat /etc/shadow | tail -n 1檢視westos使用者密碼狀态,注意密碼位前的!字 符哦。帶!表示鎖定狀态。
(6).使用者權力下放
. 在系統中超級使用者可以下放普通使用者不能執行的操作給普通使用者
**下放權力配置檔案:/etc/sudoers
**下放權力的方法
超級使用者執行visudo進入編輯/etc/sudoers模式
格式:
【獲得權限使用者 主機名稱=(獲得到的使用者身份) 指令】
Eg:student foundation10=(root) /usr/sbin/useradd
student使用者能在主機為 foundation10上以超級使用者身份執行/usr/sbin/useradd
**執行下放權限指令
【sudo 指令】 ##如果第一次執行sudo需要輸入目前使用者密碼
在/etc/sudoers中如果設定如下:
student foundation10=(root) NOPASSWD: /usr/sbin/useradd
表示使用者調用sudo指令的時候不需要自己密碼
實驗:
普通使用者student不具備建立使用者權限,也就是無法執行/usr/sbin/useradd指令
新開shell切換root使用者執行visudo(visudo = vim /etc/sudoers)前者指令形式如果改錯會有提示,安全一些,建議使用前者指令
hostname查詢主機名稱,在104-105行寫入說明和指令,注意說明以##開頭。
儲存退出提示錯誤,按e進入檢查修改,NOPASSWD後少:字元
修改完成後儲存退出,以student身份建立使用者lee,并用id lee檢視使用者資訊。
注意:授權第一次建立使用者是需要密碼的,第二次就不需要了。
執行指令前加上sudo, 即sudo useradd lee
(7)使用者認證資訊的控制(root使用者)
passwd [-參數] 使用者名稱
-l ##鎖定帳号
-u ##解鎖帳号
-n ##設定密碼最短有效期
-x ##設定密碼最長有效期
-w ##設定修改警告期
-i ##設定非活躍天數
-S ##檢視使用者密碼狀态
-e ##登陸界面強制要求使用者修改密碼
chage 參數 使用者名稱
-d ##上一次更改日期,如果設定成0,使用者登陸系統後 必須修改自己的密碼
-m ##設定密碼最短有效期
-M ##設定密碼最長有效期
-W ##設定密碼修改警告期限
-I ##設定非活躍天數
-E <YYYYMMRDD> ##帳号失效期
實驗
執行指令 watch -n 1 | tail -n 3 /etc/shadow進入westos密碼資訊監控模式
westos密碼位後依次是密碼上次修改日期:密碼最短有效期:密碼最長有效期:密碼修改警告期:非活躍天數:密碼過期日期
利用passwd修改westos密碼最短有效期10天,最長有效期8888天,警告期30天,非活躍天數15天
登陸強制改密碼
執行指令passwd -e westos 顯示成功,監控資訊顯示上次修改日期位0,logout退出後登陸需要更改密碼,就不實驗了。
利用chage設定student使用者密碼最短有效期5天,最長有效期1234天,警告期10天,非活躍天數2天,密碼過期日2019-12-31
上圖中顯示并不是2019-12-31日反而是18261,其實從1971年1月1日算起的。了解就可以了。
3. 檔案權限
(1)檔案屬性的檢視 ls -l filename
(以下**1-8對應上圖中1-8相應的位置)
**1."-":檔案類型
- ##普通檔案
d ##目錄
c ##字元裝置
s ##套接字
p ##管道
b ##快裝置
l ##連接配接
**2."rw-r--r--":檔案讀寫權限
* 所有人的權限
$ 所有組的權限
@ 其他人的權限
**3."1":
對檔案:檔案内容被系統記錄的次數
對目錄:目錄中檔案屬性的位元組數
**4."root":檔案所有人
**5."root":檔案所有組
**6."0":檔案内容的大小
**7."Jan 1 05:10":檔案最後一次被修改的時間
**8."file":檔案名字
監控指令
watch -n 1 ls -lR /mnt
4.檔案普通權限
u:檔案所有人對檔案可以讀寫
g:檔案組成員對檔案可讀
o:其他人對檔案可讀
u優先比對,g次優先,o當u,g不比對時比對
r 權限(read讀的意思)
對檔案:可以檢視檔案中的字元
對目錄:可以檢視目錄中檔案的資訊
w權限(write寫的意思)
對檔案:可以更改檔案内字元
對目錄:可以在目錄中添加删除檔案
x權限(execute執行的意思)
對檔案:可以運作檔案内記錄的程式動作
對目錄:可以進入目錄中
5.字元方式修改該檔案權限
指令:chmod [-R] <u|g|o><+|-|=><r|w|x> file|dir
chmod u-x file1 ##file1擁有者去掉x權限
chmod g+w file1 ##file1擁有組添加w權限
chmod u-x,g+w file1 ##file1擁有者去掉x權,file1擁有組添加w權限
chmod ugo-r file2 ##file2的使用者組其他人去掉r權限
chmod ug+x,o-r file3 ##file3使用者群組添加x權限,其他人去掉r權限
實驗:在/tmp下建立檔案file和目錄westos,在wetsos下建立linux1,linux2,linux3三個檔案,并對其進行監控
給與/tmp下file檔案其他人可寫的權力,以及file檔案所有組可執行的權限
執行指令:chmod g+x,o+w /tmp/file
給/tmp/westos/linux3任何人可執行權限
指令:chmod ugo+x /tmp/westoslinux3
6.數字方式修改該檔案權限
在linux中
r=4
w=2
x=1
檔案權限數字表示方式
u=rw-=4+2+0=6
g=r--=4+0+0=4
o=r--=4+0+0=4
是以檔案權限表示為644
chmod 修改後權限值 file
chmod 777 file
7=rwx
6=rw-
5=r-x
4=r--
3=-wx
2=-w-
1=--x
0=---
實驗:将linux3中所有人所有組其他人的x權限去除,linux3所有人權限為755,去除所有人x權限即755-111=644
執行指令:chmod 644 /tmp/westos/linux3
7.系統預設權限的設定
從系統存在角度來說,開放權力越大,系統存在意義越高
從系統安全角度來說,開放權力越少,系統安全性越高
是以系統設定建立檔案或目錄會去掉一些權限 umask拿掉預設的022,對于檔案666-022,對于目錄777-022,是以root建立出來的檔案權限為644,目錄為755
設定方式
umask ##檢視系統保留權限預設為022
umask 077 ##修改該系統保留權限為077,此設定為臨時設定,隻目前shell中生效
永久設定方式:
vim /etc/bashrc ##shell 其中002為普通使用者umask 022超級使用者umask
**修改成功:wq儲存退出
vim /etc/profile ##系統 002普通使用者umask 077超級使用者umask
以上兩個檔案umask設定值必須保持一緻
執行指令:source /etc/bashrc
source /etc/profile
讓設定立即生效
重新打開shell查詢umask,改過來了
建立一個檔案檢視權限,666-077=600
建立一個目錄檢視權限,777-077=700
沒錯吧
8.檔案所有人所有組的管理
chown username file|dir ##更改檔案的所有人
chown username.groupname file|dir ##更改所有人所有組
chown -R username dir ##更改目錄本身及裡面所有内容的所有人
chgrp -R groupname dir ##更改目錄本身及裡面所有内容的所有組
(chown = chage owner 改變擁有者,chgrp = chage group 更改組别)
實驗:改變/tmp/file 所有人為lee ,所有組為tom
執行指令:chown lee.tom /tmp/file (注意所有者與所有組之間是點不是逗号)
把westos的所有人改成tom
将westos以及其目錄下的linux2的所有組改為student
将/tmp所有檔案以及目錄(含目錄裡的所有檔案)所有組改為student
9.特殊權限
suid ##冒險位
隻針對二進制可執行檔案,
檔案内記錄的程式産生的程序的所有人為檔案所有人
和程序發起人身份無關
設定方式:
chmod u+s file
suid=4
或
chmod 4xxx file
實驗:以/bin/touch為例
對于二進制檔案/bin/touch,所有人添加s權限,使用者lee使用/bin/touch建立file所有人為root,root使用者下取消所有人s權限,使用者lee再次使用/bin/touch建立檔案file1,所有人為lee
注意圖中紅線畫出内容
sgid ##強制位
對檔案:隻針對二進制可執行檔案,
任何人運作二進制檔案
程式時程式産生的程序的所有組都是檔案的所有組
和程式發起人組的身份無關
對目錄:當目錄有sgid權限後,目錄中建立的所有檔案的所有組
都自動歸屬到目錄的所有組之中,和檔案建立者所在的組無關
設定方式:
chmod g+s file|dir
sgid=2
或
chmod 2xxx file|dir
實驗
對檔案
給/bin/touch使用者組添加s權限,建立檔案file2,檢視屬性,file2所有組為root,切換使用者lee,同樣,lee使用/bin/touch檔案建立檔案file2,lee所建立檔案所有者為lee,但所有組卻為root,root使用者下取消/bin/touch檔案所有的組的s權限,lee使用者使用/bin/touch建立檔案file3,所有者,所有人都為lee
對目錄:
超級使用者身份下在/tmp下建立目錄test,給與其他人twx權限,使用者組給與s權限,此時目錄test所有組為root,切換student使用者,student使用者在/tmp/test目錄中建立檔案file,檢視屬性,法ile所有人為student,所有組依舊為root
sticky ##粘制位
t權限:
隻針對與目錄,當一個目錄上有t權限,那麼目錄中的檔案隻能被檔案的擁有者删除
設定方式:
chmod o+t direcotry
t=1
或
chmod 1777 direcotry
實驗
student使用者在/tmp下建立目錄westos,檢視屬性,其他人無w權限,給與其他人t權限和w權限,打開新shell切換使用者lee,lee在/tmp/westos下建立檔案le,切換tom使用者,tom使用者在/tmp/westos下建立檔案to,當使用者tom想删除lee在此目錄内建立的檔案le時,被拒絕,但使用者tom删除自己所建立檔案to時成功了。
10.設定acl清單
設定格式
setfacl -m <u|g>:<username|groupname>:權限 檔案|目錄
-m #設定
u #使用者
g #組
getfacl filename|dirname 檢視acl清單内容
getfacl /westos/
# file: westos/ ##檔案名稱
# owner: root ##檔案所有人
# group: root ##檔案所有組
user::rwx ##擁有者權限
user:student:rwx ##特殊使用者權限
group::--- ##組權限
mask::rwx ##權限掩碼
other::--- ##其他人權限
注意:當檔案上有權限清單時,ls -l 能看到的權限是假的
實驗:
Root在/tmp下建立檔案file,并進行編輯兩行内容“westos,redhat”設定權限660,檢視檔案權限。實驗如下
切換student使用者,student使用者作為其他人身份無權限檢視/tmp/file檔案
root使用者設定student使用者對/tmp/file檔案擁有rw權限
再次切換student使用者,可以檢視/tmpfile檔案内容
對于所有組而言,所有組擁有對/tmp/file檔案的rw權限,那麼此所有組内的成員都會擁有/tmp/file檔案的rw權限。
Root使用者建立組lee,建立使用者test,将test’使用者添加到lee組内,id檢視test資訊,同時通過acl設定lee組擁有/tmp/file檔案的rw權限,切換使用者test,因為使用者test’在lee組内,lee組擁有/tmp/file檔案的rw權限,是以test使用者也擁有此檔案的rw權限。
删除清單中的使用者或者組
setfacl -x <u|g>:<username|groupname> 檔案|目錄
取消student對/tmp/file檔案的權限
删除組lee對/tmp/file檔案的權限,test在組lee内,是以test無法檢視/tmp/file檔案内容
關閉清單,setfacl -b 檔案|目錄
ls -l 檢視/tmp/file屬性在第九位權限後有一個+号,通過setfacl -b /tmp/file 關閉acl清單
(1)acl mask值
**mask 權限掩碼
mask用來标實能夠賦予使用者最大權限
當用chmod改變檔案普通權限時可能會被破壞
修複
setfacl -m m:rwx 檔案名稱
實驗:root使用者在/tmp下建立檔案file,設定使用者test對此檔案擁有rwx權限,改變/tmp/file檔案權限為700,檢視acl清單資訊,發現user和group後出現#effective,建立shell以test使用者身份檢視/tmp/file檔案,發現無法檢視。當出現#effective時,表示檔案被損壞。
通過指令:setfacl -m m:rwx /tmp/file 來修複,可以看出#effective消失,test使用者可以檢視/tmp/file,當然沒内容顯示了,root使用者剛建立file檔案的時候,就是一個空檔案
(2) acl 預設權限
當我們需求某個目錄對于student可寫,并且目錄中建立的子目錄對student也可寫
就要設定預設預設權限
注意: 預設權限隻對目錄中建立立的檔案或者目錄生效,對已經建立的檔案無效,
對于目錄本身也無效
setfacl -m d:u:student:rwx -R /dir
實驗:
(1)root使用者在/tmp下建立目錄westos,在westos下建立檔案linux1,linux2;
檢視linux1,linux2,westos的權限,對目錄westos進行acl權限設定
(2)root使用者在westos下建立目錄test,以及test下建立檔案file,切換student使用者,發現student使用者對test以及test下的file檔案具備rwx權限。