RHCE-Day05-使用者及檔案管理
技術標籤:RHCE
RHCE-Day05-使用者及檔案管理
1.使用者管理
管理員UID為0:系統的管理員使用者。
系統使用者UID為1~999: Linux系統為了避免因某個服務程式出現漏洞而被黑客提權至整臺伺服器,預設服務程式會有獨立的系統使用者負責執行,進而有效控制被破壞範圍。
普通使用者UID從1000開始:是由管理員建立的用於日常工作的使用者。
useradd命令
useradd命令用於建立新的使用者,格式為“useradd [選項] 使用者名稱”。
引數 | 作用 |
---|---|
-d | 指定使用者的家目錄(預設為/home/username) |
-e | 賬戶的到期時間,格式為YYYY-MM-DD. |
-u | 指定該使用者的預設UID |
-g | 指定一個初始的使用者基本組(必須已存在) |
-G | 指定一個或多個擴充套件使用者組 |
-N | 不建立與使用者同名的基本使用者組 |
-s | 指定該使用者的預設Shell直譯器 |
請注意/sbin/nologin,它是終端直譯器中的一員,與Bash直譯器有著天壤之別。一旦使用者的直譯器被設定為nologin,則代表該使用者不能登入到系統中。
groupadd命令
groupadd命令用於建立使用者組,格式為“groupadd [選項] 群組名”。
usermod命令
usermod命令用於修改使用者的屬性,格式為“usermod [選項] 使用者名稱”。
引數 | 作用 |
---|---|
-c | 填寫使用者賬戶的備註資訊 |
-d -m | 引數-m與引數-d連用,可重新指定使用者的家目錄並自動把舊的資料轉移過去 |
-e | 賬戶的到期時間,格式為YYYY-MM-DD |
-g | 變更所屬使用者組 |
-G | 變更擴充套件使用者組 |
-L | 鎖定使用者禁止其登入系統 |
-U | 解鎖使用者,允許其登入系統 |
-s | 變更預設終端 |
-u | 修改使用者的UID |
passwd命令
passwd命令用於修改使用者密碼、過期時間、認證資訊等,格式為“passwd [選項] [使用者名稱]”。
引數 | 作用 |
---|---|
-l | 鎖定使用者,禁止其登入 |
-u | 解除鎖定,允許使用者登入 |
–stdin | 允許通過標準輸入修改使用者密碼,如echo “NewPassWord” | passwd --stdin Username |
-d | 使該使用者可用空密碼登入系統 |
-e | 強制使用者在下次登入時修改密碼 |
-S | 顯示使用者的密碼是否被鎖定,以及密碼所採用的加密演算法名稱 |
userdel命令
userdel命令用於刪除使用者,格式為“userdel [選項] 使用者名稱”。
引數 | 作用 |
---|---|
-f | 強制刪除使用者 |
-r | 同時刪除使用者及使用者家目錄 |
2.檔案許可權與歸屬
-:普通檔案。
d:目錄檔案。
l:連結檔案。
b:塊裝置檔案。
c:字元裝置檔案。
p:管道檔案。
檔案許可權的字元與數字表示
通過ls命令檢視到的檔案屬性資訊
3.檔案的特殊許可權
SUID
SUID是一種對二進位制程式進行設定的特殊許可權,可以讓二進位制程式的執行者臨時擁有屬主的許可權。
chmod u+s
所有者的許可權由rwx變成了rws,其中x改變成s就意味著該檔案被賦予了SUID許可權。如果原本的許可權是rw-,原先許可權位上沒有x執行許可權,那麼被賦予特殊許可權後將變成大寫的S。
SGID
SGID主要實現如下兩種功能:
讓執行者臨時擁有屬組的許可權(對擁有執行許可權的二進位制程式進行設定);
在某個目錄中建立的檔案自動繼承該目錄的使用者組(只可以對目錄進行設定)。
chmod g+s
chmod和chown
chmod命令是一個非常實用的命令,能夠用來設定檔案或目錄的許可權,格式為“chmod [引數] 許可權 檔案或目錄名稱”。
chown,其格式為“chown [引數] 所有者:所屬組 檔案或目錄名稱”。
針對目錄進行操作時需要加上大寫引數-R來表示遞迴操作
SBIT
SBIT特殊許可權位可確保使用者只能刪除自己的檔案,而不能刪除其他使用者的檔案
chmod o+t
檔案的其他人許可權部分的x執行許可權就會被替換成t或者T,原本有x執行許可權則會寫成t,原本沒有x執行許可權則會被寫成T
4.檔案的隱藏屬性
chattr命令
chattr命令用於設定檔案的隱藏許可權,格式為“chattr [引數] 檔案”
引數 | 作用 |
---|---|
i | 無法對檔案進行修改;若對目錄設定了該引數,則僅能修改其中的子檔案內容而不能新建或刪除檔案 |
a | 僅允許補充(追加)內容,無法覆蓋/刪除內容(Append Only) |
S | 檔案內容在變更後立即同步到硬碟(sync) |
s | 徹底從硬碟中刪除,不可恢復(用0填充原檔案所在硬碟區域) |
A | 不再修改這個檔案或目錄的最後訪問時間(atime) |
b | 不再修改檔案或目錄的存取時間 |
D | 檢查壓縮檔案中的錯誤 |
d | 使用dump命令備份時忽略本檔案/目錄 |
c | 預設將檔案或目錄進行壓縮 |
u | 當刪除該檔案後依然保留其在硬碟中的資料,方便日後恢復 |
t | 讓檔案系統支援尾部合併(tail-merging) |
x | 可以直接訪問壓縮檔案中的內容 |
lsattr命令
lsattr命令用於顯示檔案的隱藏許可權,格式為“lsattr [引數] 檔案”。在Linux系統中,檔案的隱藏許可權必須使用lsattr命令來檢視,平時使用的ls之類的命令則看不出端倪。
5.檔案訪問控制
基於普通檔案或目錄設定ACL其實就是針對指定的使用者或使用者組設定檔案或目錄的操作許可權。另外,如果針對某個目錄設定了ACL,則目錄中的檔案會繼承其ACL;若針對檔案設定了ACL,則檔案不再繼承其所在目錄的ACL。
setfacl命令
setfacl命令用於管理檔案的ACL規則,格式為“setfacl [引數] 檔名稱”。檔案的ACL提供的是在所有者、所屬組、其他人的讀/寫/執行許可權之外的特殊許可權控制,使用setfacl命令可以針對單一使用者或使用者組、單一檔案或目錄來進行讀/寫/執行許可權的控制。其中,針對目錄檔案需要使用-R遞迴引數;針對普通檔案則使用-m引數;如果想要刪除某個檔案的ACL,則可以使用-b引數。
[[email protected] ~]# setfacl -Rm u:linuxprobe:rwx /root
常用的ls命令是看不到ACL表資訊的,但是卻可以看到檔案的許可權最後一個點(.)變成了加號(+),這就意味著該檔案已經設定了ACL了。
[[email protected] ~]# ls -ld /root
dr-xrwx---+ 14 root root 4096 May 4 2017 /root
getfacl命令
getfacl命令用於顯示檔案上設定的ACL資訊,格式為“getfacl 檔名稱”。檢視ACL,則用的是getfacl命令。
[[email protected] ~]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:linuxprobe:rwx
group::r-x
mask::rwx
other::---
6.su vs sudo
su命令與使用者名稱之間有一個減號(-),意味著完全切換到新的使用者,即把環境變數資訊也變更為新使用者的相應資訊,而不是保留原始的資訊。強烈建議在切換使用者身份時新增這個減號(-)。
sudo命令用於給普通使用者提供額外的許可權來完成原本root管理員才能完成的任務,格式為“sudo [引數] 命令名稱”。
引數 | 作用 |
---|---|
-h | 列出幫助資訊 |
-l | 列出當前使用者可執行的命令 |
-u 使用者名稱或UID值 | 以指定的使用者身份執行命令 |
-k | 清空密碼的有效時間,下次執行sudo時需要再次進行密碼驗證 |
-b | 在後臺執行指定的命令 |
-p | 更改詢問密碼的提示語 |
總結來說,sudo命令具有如下功能:
限制使用者執行指定的命令:
記錄使用者執行的每一條命令;
配置檔案(/etc/sudoers)提供集中的使用者管理、許可權與主機等引數;
驗證密碼的後5分鐘內(預設值)無須再讓使用者再次驗證密碼。
可以使用sudo命令提供的visudo命令來配置使用者許可權。這條命令在配置使用者許可權時將禁止多個使用者同時修改sudoers配置檔案,還可以對配置檔案內的引數進行語法檢查,並在發現引數錯誤時進行報錯。
只有root管理員才可以使用visudo命令編輯sudo服務的配置檔案。
在sudo命令的配置檔案中,按照下面的格式將第99行(大約)填寫上指定的資訊:
誰可以使用 允許使用的主機=(以誰的身份) 可執行命令的列表
如果需要讓某個使用者只能使用root管理員的身份執行指定的命令,切記一定要給出該命令的絕對路徑,否則系統會識別不出來。
[[email protected] ~]# visudo
96 ##
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99 linuxprobe ALL=(ALL) ALL
這時可以新增NOPASSWD引數**(8版本不適用)**使得使用者執行sudo命令時不再需要密碼驗證:
[[email protected] ~]$ exit
logout
[[email protected] ~]# whereis poweroff
poweroff: /usr/sbin/poweroff /usr/share/man/man8/poweroff.8.gz
[[email protected] ~]# visudo
96 ##
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99 linuxprobe ALL=NOPASSWD: /usr/sbin/poweroff