文章目錄
- 使用者身份和能力
- 檔案權限與歸屬
- 檔案特殊權限
- 檔案隐藏屬性
- su指令與sudo服務
-
- su指令
- sudo指令
- 檔案通路控制清單
使用者身份和能力
root使用者擁有極高的權限,能夠管理各項功能,如:添加/删除使用者、啟動/關閉程序等。
其實root 隻是個名字,真正讓他成為超級使用者的是他的UID值。
UID(USER ID):每個使用者都有對應的DUI值,就像身份證号碼。
超級使用者UID0的使用者,預設是root 使用者
系統使用者UID1-999:系統中系統服務由不同的使用者運作,更加安全,預設被限制登入西戎
普通使用者UID1000~ :由管理者建立的用于日常工作而不能管理系統的普通使用者
賬号名稱和UID儲存在/etc/passwd 檔案中,而賬戶密碼則儲存在 /etc/shadow 檔案中
GID(GROUP ID):可以将多個使用者歸到一個組中,友善指派熱恩物或工作。使用者組名稱與GID儲存在 /etc/group中
檔案權限與歸屬
linux 中一些都是檔案,檔案和目錄的歸屬和權限 分别規定檔案的所有者、所有人、其餘人的讀、寫、執行權限。
如下示例中 表示 index.html 是一個檔案 所有者權限:讀寫 所屬組權限:隻讀 其他使用者權限:隻讀
第一位意義:-: 普通檔案 d:目錄檔案 l:連結檔案 b:塊裝置檔案 c:字元裝置檔案 p:管道檔案
普通檔案的執行權限是說檔案可以被執行,目錄檔案的執行權限表示使用者可以進入到目錄中
-rw-r--r-- 1 root root 2381 Oct 19 10:29 index.html
檔案特殊權限
SUID:讓執行者臨時擁有屬主的權限(僅對擁有執行權限的二進制程式有效)
SGID: 1)讓執行者臨時擁有屬組的權限(隻對可執行檔案生效)
2)在該目錄中建立的檔案自動內建此目錄的使用者組(隻對目錄檔案生效)
chmod 指令用于修改檔案或目錄的權限 格式: chmod [參數] 權限 檔案或目錄名
chown 指令用于修改檔案或目錄所屬的使用者和分組 格式:chown [參數] 所屬使用者:所屬組 檔案或目錄名
示例
用root使用者建立目錄 ttdir, 增加執行權限(隻有有執行權限的檔案或目錄才可以 添加 ssui 和 sgid權限)
然後再添加 sgid 權限 後 切換到hadoop 使用者可以正常通路編輯該目錄。即使用者hadoop臨時擁有了 所屬組的權限
[[email protected] tmpdir]# mkdir ttdir
[[email protected] tmpdir]# ls -ald ttdir
drwxr-xr-x 2 root root 6 Oct 27 04:40 ttdir
[[email protected] tmpdir]# ls -ald ttdir
drwxrwxrwx 2 root root 6 Oct 27 04:40 ttdir
[[email protected] tmpdir]# chmod -rf g+s ttdir
chmod: invalid mode: ‘-rf’
Try 'chmod --help' for more information.
[[email protected] tmpdir]# chmod -R g+s ttdir
[[email protected] tmpdir]# ls -ald ttdir
drwxrwsrwx 2 root root 6 Oct 27 04:40 ttdir
[[email protected] tmpdir]# su hadoop
[[email protected] tmpdir]$ cd ttdir
[[email protected] ttdir]$ ll
total 0
[[email protected] ttdir]$ echo “hello ” > test
[[email protected] ttdir]$ ll
total 4
-rw-r--r-- 1 hadoop root 13 Oct 27 04:54 test
SBIT(Stick bit) :隻可管理自己資料而不能删除他人檔案(僅對目錄有效)
示例,root使用者進入/tmp 目錄 ,權限中最後一位 t 表示 該目錄設定了SBIT權限(粘滞位),建立 檔案test.txt 并對所有使用者開發讀寫權限,然後切換 普通使用者hadoop ,去删除該檔案,提示删除失敗。(雖然有權限單不允許删除别人的檔案)
[[email protected] tmp]# ls -adl /tmp
drwxrwxrwt. 12 root root 4096 Oct 27 03:41 /tmp
[[email protected] tmp]# echo 123>test.txt
[[email protected] tmp]# ll
-rw-r--r-- 1 root root 0 Oct 27 05:06 test.txt
[[email protected] tmp]# chmod 777 test.txt
[[email protected] tmp]# su hadoop
[[email protected] tmp]$ ll
-rwxrwxrwx 1 root root 0 Oct 27 05:06 test.txt
[[email protected] tmp]$ rm test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
檔案隐藏屬性
檔案權限除了讀寫執行和SUID、SGID、SBIT 之外還有隐藏權限。例如隻能為某個檔案追加内容不能減少内容。
chattr指令
用于設定檔案的隐藏權限 格式:chattr [參數] 檔案
參數:
i 無法對檔案進行修改,若對目錄設定後則隻能修改子檔案不能建立或删除檔案
a 僅允許補充内容,無法删除 覆寫
...
lsattr指令
用于顯示檔案的隐藏權限,格式:lsattr[參數] 檔案
參數:
a 顯示所有檔案和目錄
l 顯示隐藏屬性的全稱
R 遞歸處理
d 如果目标檔案為目錄 則需要加此參數
示例
建立 檔案555.txt 沒有增加特殊權限之前可以成功删除。
重新建立 檔案 555.txt 增加 特殊權限a 後,隻能追加檔案内容,無法覆寫和删除檔案
[[email protected] ~]# echo '555'>555.txt
[[email protected] ~]# rm 555.txt
rm: remove regular file ‘555.txt’? y
[[email protected] ~]# echo '555' >555.txt
[[email protected] ~]# chattr +a 555.txt
[[email protected] ~]# echo '5555'>>555.txt
[[email protected] ~]# echo '5555'>555.txt
-bash: 555.txt: Operation not permitted
[[email protected] ~]# rm 555.txt
rm: remove regular file ‘555.txt’? y
rm: cannot remove ‘555.txt’: Operation not permitted
su指令與sudo服務
su指令
用于變更使用者的身份(切換登入使用者) 格式:su [-] 使用者名 加參數 - 可以同時切換環境變量,不加僅切換使用者
root使用者切換到其他使用者時無需輸入密碼
通過示例發現 如果加了 參數- 那麼會自動切換到 使用者的 根目錄 下,環境變量也會同時切換,否則 目錄和環境變量不會切換。同時 加了參數 執行exit退出時 提示 logout 否則 隻提示 exit.
[[email protected] ~]# su hadoop
[[email protected] root]$ su root
Password:
[[email protected] ~]# su - hadoop
Last login: Tue Oct 27 07:51:53 EDT 2020 on pts/1
[[email protected] ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/apps/jdk/bin:/home/hadoop/.local/bin:/home/hadoop/bin
[[email protected] ~]$ su root
Password:
[[email protected] hadoop]# su hadoop
[[email protected] ~]$ su - root
Password:
Last login: Tue Oct 27 07:53:30 EDT 2020 on pts/1
[[email protected] ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/apps/jdk/bin:/root/bin
[[email protected] ~]# su hadoop
[[email protected] root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/apps/jdk/bin:/root/bin
[[email protected] root]$
[[email protected] ~]# su hadoop
[[email protected] root]$ exit
exit
[[email protected] ~]# su - hadoop
Last login: Tue Oct 27 07:59:17 EDT 2020 on pts/1
[[email protected] ~]$ exit
logout
sudo指令
用于給普通使用者提供額外權限完成原本超級使用者才能外城的任務,格式為:sudo [參數] 指令名稱
su指令可以将登陸使用者切換成root,這樣會增加隐患。使用sudo 可以隻将檔案執行的權限給普通使用者,增加安全性。在保證普通使用者完成工作的前提下盡可能的減少權限。
sudo 具體功能:
1、限制使用者執行指定的指令
2、記錄使用者執行的每一條指令
3、配置檔案(/etc/sudoers)中提供集中管理使用者、權限、主機等參數
4、驗證過密碼後5分鐘(預設)内無需再次驗證密碼,更加友善
參數
-h 列出幫助資訊
-l 列出前使用者可執行指令
-u 使用者性或uid 以指定的使用者身份執行指令
-k 清空安全時間,下次執行sudo時 必須要再次驗證密碼
-b 在背景執行指定的指令
-p 更改詢問密碼提示語
visudo指令
隻有超級使用者才可以使用visudo指令編輯 /etc/sudoers檔案,該指令可以避免多人同時修改,同時會對檔案内容進行文法檢查,如果檢查不通過無法儲存。
示例
允許hadoop使用者通過sudo執行所有指令
通過visudo 指令編輯編輯檔案,99行後增加 hadoop權限配置如下
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
切換到hadoop使用者可以檢視 通過sudo 可以執行的指令。直接 通路 /root 目錄無法通路,通過sudo可以正常通路。
[[email protected] ~]# su - hadoop
Last login: Tue Oct 27 08:20:08 EDT 2020 on pts/1
[[email protected] ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for hadoop:
Sorry, try again.
[sudo] password for hadoop:
Matching Defaults entries for hadoop on bogon:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User hadoop may run the following commands on bogon:
(ALL) ALL
[[email protected] ~]$ ls /root
ls: cannot open directory /root: Permission denied
[[email protected] ~]$ sudo ls /root
555.txt date.txt res.txt test testdd.txt tmpdir tmpfile ttt.txt
anaconda-ks.cfg index.html root.tar.gz test2.txt test.txt tmpdir.tar.gz tstd
同理可以配置
hadoop ALL=(ALL) ALL //表示 hadoop 使用者可以以所有使用者的身份執行所有指令
hadoop ALL=(root) /bin/cat //表示 hadoop 使用者可以以root使用者的身份執行/bin/cat指令
hadoop ALL=NOPASSWD:ALL //表示hadoop 使用者可以以任意身份執行指令 且不需要密碼驗證
檔案通路控制清單
上述rwx權限控制都是對某一類人的權限控制,如果需要對指定使用者進行權限控制,需要使用檔案的通路控制清單來實作。
可以基于檔案或目錄設定ACL(指定使用者或使用者組的通路權限),如果對某個目錄設定了控制政策,那麼他的子檔案,預設繼承該通路政策(除非進行特殊設定)
setfacl 指令
用于增加或者修改acl規則,格式:setfacl [參數] 檔案
-r 遞歸(對目錄使用)
-m 設定檔案的acl規則
-b 删除acl規則
getfacl 指令
用于顯示檔案的acl規則,格式:getfacl 檔案
示例
root 目錄正常 hadoop 使用者無法通路,這裡為hadoop 增加 root 目錄通路權限,然後切換到hadoop使用者,可以通路該目錄
[[email protected] ~]# setfacl -rm u:hadoop:rwx /root
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
Try `setfacl --help' for more information.
[[email protected] ~]# setfacl -Rm u:hadoop:rwx /root
setfacl: /root/ttt.txt: Operation not permitted
setfacl: /root/555.txt: Operation not permitted
[[email protected] ~]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:hadoop:rwx
group::r-x
mask::rwx
other::---
[[email protected] ~]# su - hadoop
Last login: Tue Oct 27 08:23:45 EDT 2020 on pts/1
[[email protected] ~]$ cd /root
[[email protected] root]$ ll
total 52
-rw-r--r-- 1 root root 9 Oct 27 07:43 555.txt
-rw-rwx---+ 1 root root 1260 Jun 10 05:26 anaconda-ks.cfg
-rw-rwxr--+ 1 root root 1595 Oct 26 04:59 date.txt
-rw-rwxr--+ 1 root root 2381 Oct 19 10:29 index.html
-rw-rwxr--+ 1 root root 767 Oct 19 09:51 res.txt