背景與目的
Linux權(quán)限體系是運維工作的基礎(chǔ)中的基礎(chǔ)。無論你管理的是單機還是集群,權(quán)限問題導(dǎo)致的故障占總故障量的相當(dāng)比例。本文從一線運維視角出發(fā),系統(tǒng)講解Linux權(quán)限模型的核心概念、常見場景、排障方法以及安全最佳實踐。閱讀本文后,你應(yīng)該能夠獨立處理90%以上的權(quán)限相關(guān)問題。
前置知識:本文假設(shè)你已經(jīng)掌握Linux基本操作,包括文件導(dǎo)航、查看目錄內(nèi)容等基礎(chǔ)命令。
環(huán)境說明:本文所有示例基于Rocky Linux 9.4(等同于RHEL 9.4),內(nèi)核版本6.8.5,GNU Coreutils 9.1。不同發(fā)行版細(xì)節(jié)可能略有差異,但核心原理一致。
1. Linux權(quán)限體系概述
1.1 為什么運維必須掌握權(quán)限
權(quán)限問題是Linux系統(tǒng)中最常見的故障來源之一。根據(jù)實際運維統(tǒng)計,約30%的文件訪問故障、20%的服務(wù)啟動失敗、15%的安全事件都與權(quán)限配置不當(dāng)有直接關(guān)系。權(quán)限管理不當(dāng)會導(dǎo)致以下典型問題:
服務(wù)無法啟動:Web服務(wù)(如Nginx、Apache)通常以特定用戶(如www-data、nginx)運行,如果網(wǎng)站文件權(quán)限不允許該用戶讀取,服務(wù)啟動后會返回403錯誤。
日志無法寫入:應(yīng)用程序的日志文件需要由運行該程序的用戶寫入,如果目錄權(quán)限不足,日志會寫入失敗或產(chǎn)生大量錯誤。
備份腳本失效:自動化備份腳本通常以root權(quán)限運行,但備份的目標(biāo)目錄如果權(quán)限配置異常,可能導(dǎo)致備份不完整。
安全漏洞:權(quán)限配置過于寬松(如文件設(shè)為777)會被安全掃描工具標(biāo)記為高危漏洞,嚴(yán)重情況下可能導(dǎo)致服務(wù)器被入侵。
1.2 Linux權(quán)限模型的基本組成
Linux采用UGO(User/Group/Others)三元組的權(quán)限控制模型。每個文件(目錄也是文件)都有三組權(quán)限位:
Owner(所有者):文件所屬的用戶,U位控制
Group(所屬組):文件所屬的用戶組,G位控制
Others(其他人):既不是所有者也不屬于所屬組的其他用戶,O位控制
每組權(quán)限包含三種基本權(quán)限:
r(Read):讀取權(quán)限,數(shù)值4
w(Write):寫入權(quán)限,數(shù)值2
x(Execute):執(zhí)行權(quán)限,數(shù)值1
這種設(shè)計簡潔高效,三位二進(jìn)制正好對應(yīng)rwx三種狀態(tài)。例如,rwx用數(shù)字表示就是4+2+1=7,rw-就是4+2=6,r--就是4。
2. 基本權(quán)限模型詳解
2.1 查看文件權(quán)限
使用ls -l命令可以查看文件的詳細(xì)權(quán)限信息:
$ ls -l /etc/passwd -rw-r--r-- 1 root root 4096 Apr 3 10:00 /etc/passwd $ ls -ld /tmp drwxrwxrwt 15 root root 4096 Apr 3 10:00 /tmp
第一列是權(quán)限字符串,共10位:
- rw- r-- r-- | | | | | | | +-- Others權(quán)限 | | +------ Group權(quán)限 | +---------- Owner權(quán)限 +-------------文件類型(-為普通文件,d為目錄,l為符號鏈接)
權(quán)限字符串后是硬鏈接數(shù),然后是所有者、所屬組、文件大小、最后修改時間、文件名。
2.2 權(quán)限位數(shù)字表示法
每組權(quán)限可以用三位八進(jìn)制數(shù)字表示,這是最常用的權(quán)限設(shè)置方式:
| 權(quán)限字符串 | 數(shù)字表示 | 計算方式 |
|---|---|---|
| rwx | 7 | 4+2+1 |
| rw- | 6 | 4+2+0 |
| r-x | 5 | 4+0+1 |
| r-- | 4 | 4+0+0 |
| -wx | 3 | 0+2+1 |
| -w- | 2 | 0+2+0 |
| --x | 1 | 0+0+1 |
| --- | 0 | 0+0+0 |
完整的三位權(quán)限表示法示例:
# rwxrw-r-- 用數(shù)字表示就是 764 # 第1位7:所有者權(quán)限為rwx # 第2位6:所屬組權(quán)限為rw- # 第3位4:其他人權(quán)限為r-- chmod 764 /path/to/file
2.3 chmod命令詳解
chmod是修改文件權(quán)限的核心命令,支持兩種語法風(fēng)格:
符號模式:使用u/g/o/a(user/group/others/all)和+/-/=操作符
# 給所有者添加執(zhí)行權(quán)限 chmod u+x script.sh # 移除所屬組和其他人的寫權(quán)限 chmod go-w file.txt # 設(shè)置所有者為rwx,所屬組為rx,其他人無權(quán)限 chmod u=rwx,g=rx,o= file.conf # 給所有人添加讀權(quán)限 chmod a+r document.txt # 同時設(shè)置多組權(quán)限 chmod u+rwx,g+rx,o+r file
數(shù)字模式:使用八進(jìn)制數(shù)字直接指定權(quán)限
# 設(shè)置為755(rwxr-xr-x) chmod 755 /usr/local/bin/app # 設(shè)置為644(rw-r--r--) chmod 644 /etc/config.conf # 設(shè)置為600(rw-------) chmod 600 /root/.ssh/id_rsa # 遞歸設(shè)置目錄內(nèi)所有文件 chmod -R 644 /var/www/html/
注意:使用-R遞歸時,默認(rèn)只修改文件本身,不修改目錄結(jié)構(gòu)。如果需要同時修改目錄和文件的權(quán)限,使用:
# 目錄設(shè)為755,文件設(shè)為644
find /var/www -typed -execchmod 755 {} ;
find /var/www -typef -execchmod 644 {} ;
# 或使用GNU find的+速記
find /var/www -typed -print0 | xargs -0 chmod 755
find /var/www -typef -print0 | xargs -0 chmod 644
2.4 chown和chgrp命令
chown用于更改文件的所有者:
# 更改文件所有者 chown nginx /var/www/html/index.html # 同時更改所有者和所屬組 chown nginx:nginx /var/www/html/index.html # 只更改所屬組(使用:前綴) chown :www-data /var/www/html/index.html # 遞歸更改 chown -R nginx:nginx /var/www/html/ # 保持用戶組不變,只改用戶 chown nginx /var/www/html/index.html
chgrp用于只更改所屬組:
# 更改文件所屬組 chgrp www-data /var/www/html/index.html # 遞歸更改 chgrp -R www-data /var/www/html/
2.5 默認(rèn)權(quán)限與umask
新建文件或目錄時,系統(tǒng)會根據(jù)umask值計算出默認(rèn)權(quán)限。普通文件的默認(rèn)權(quán)限是666(rw-rw-rw-),目錄的默認(rèn)權(quán)限是777(rwxrwxrwx)。umask值會從默認(rèn)權(quán)限中扣除。
# 查看當(dāng)前umask $umask 0022 # 計算默認(rèn)權(quán)限: # 文件:666 - 022 = 644 (rw-r--r--) # 目錄:777 - 022 = 755 (rwxr-xr-x)
常見umask場景:
root用戶默認(rèn)umask為0022,普通文件權(quán)限644,目錄755
普通用戶默認(rèn)umask為0002,組內(nèi)成員可寫,適合協(xié)作場景
# 修改umask(臨時,只影響當(dāng)前shell) umask0027 # 永久修改需要編輯~/.bashrc或/etc/profile echo"umask 0027">> ~/.bashrc source~/.bashrc
3. 特殊權(quán)限詳解
除了基本的rwx權(quán)限,Linux還提供了三種特殊權(quán)限:SUID、SGID和Sticky Bit。它們在安全和服務(wù)配置中有重要應(yīng)用。
3.1 SUID(Set User ID)
SUID位允許可執(zhí)行文件在運行時使用文件所有者的權(quán)限執(zhí)行,而不是調(diào)用者的權(quán)限。這在需要臨時提升權(quán)限的場景中很有用,但也是常見的安全風(fēng)險點。
設(shè)置SUID:
# 設(shè)置SUID chmod u+s /usr/bin/passwd # 數(shù)字方式設(shè)置(4表示SUID) chmod 4755 /usr/bin/passwd # 查看已設(shè)置SUID的文件 find /usr -perm +4000 -ls 2>/dev/null
典型應(yīng)用:passwd命令
$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 Jan 31 2026 /usr/bin/passwd # ^ # 注意這個s替代了x,表示SUID已設(shè)置
普通用戶修改自己的密碼需要寫入/etc/shadow,但普通用戶沒有寫權(quán)限。passwd命令設(shè)置了SUID后,普通用戶執(zhí)行時會以root權(quán)限運行,從而能夠修改shadow文件。
安全風(fēng)險警示:
SUID是Linux中最危險的安全機制之一。錯誤地給Shell腳本設(shè)置SUID會導(dǎo)致嚴(yán)重漏洞,因為攻擊者可能通過腳本獲得root shell。
# 高危操作示例 - 絕對不要這樣做
chmod 4777 /bin/bash # 危險!
# 查找系統(tǒng)中所有SUID文件用于安全審計
find / -perm +4000 -typef -execls -la {} ; 2>/dev/null
3.2 SGID(Set Group ID)
SGID與SUID類似,但作用于所屬組。有兩種用途:
在文件上設(shè)置SGID:執(zhí)行時使用文件所屬組的權(quán)限
在目錄上設(shè)置SGID:目錄下新建的文件繼承該目錄的所屬組
# 在目錄上設(shè)置SGID chmod g+s /shared/project # 查看目錄SGID設(shè)置 $ ls -ld /shared/project drwxrwsr-x 2 root developers shared 4096 Apr 3 10:00 /shared/project # 驗證:新建文件繼承組 $ touch /shared/project/test.txt $ ls -l /shared/project/test.txt -rw-r--r-- 1 user1 developers 0 Apr 3 10:01 /shared/project/test.txt # ^^^^^^^^ # 繼承了目錄的所屬組
數(shù)字方式設(shè)置SGID:
# 2表示SGID chmod 2775 /shared/project
3.3 Sticky Bit(粘滯位)
Sticky Bit主要用于共享目錄,確保目錄內(nèi)的文件只能被其所有者刪除,即使其他人有該目錄的寫權(quán)限。
# 設(shè)置Sticky Bit chmod +t /tmp # 或者數(shù)字方式(1表示Sticky Bit) chmod 1777 /tmp # 查看 $ ls -ld /tmp drwxrwxrwt 17 root root 4096 Apr 3 10:00 /tmp # ^ # 注意最后的t,t表示同時有x權(quán)限,T表示沒有x權(quán)限
/tmp目錄的典型權(quán)限:
# 1777 = rwx rwx rwx + t # 任何用戶都可以在/tmp中創(chuàng)建文件 # 但只能刪除自己的文件
實際驗證:
# 用戶A創(chuàng)建文件 $ su - userA $ touch /tmp/file_a.txt # 用戶B嘗試刪除用戶A的文件 $ su - userB $ rm /tmp/file_a.txt rm: cannot remove'/tmp/file_a.txt': Operation not permitted # 成功保護!
3.4 特殊權(quán)限組合示例
# 完整權(quán)限示例:rwsr-sr-x (SUID + SGID) # 數(shù)字表示:6755 chmod 6755 /some/executable # /tmp格式的目錄:drwxrwxrwt # 數(shù)字表示:1777 chmod 1777 /my/temp/dir
4. ACL訪問控制列表
傳統(tǒng)的UGO權(quán)限模型在復(fù)雜場景下不夠靈活。例如,需要讓多個特定用戶或組對同一文件有不同的權(quán)限時,UGO模型就無法滿足。ACL(Access Control List)提供了細(xì)粒度的權(quán)限控制。
4.1 ACL查看:getfacl
# 查看文件的ACL $ getfacl /data/reports/sales.csv # file: sales.csv # owner: root # group: finance user::rw- userrw- group::r-- groupr-- mask::rw- other::r--
輸出解釋:
user::rw-:文件所有者權(quán)限
userrw-:特定用戶manager的權(quán)限
group::r--:文件所屬組權(quán)限
groupr--:特定組analytics的權(quán)限
mask::rw-:ACL有效權(quán)限掩碼(后面詳解)
other::r--:其他用戶權(quán)限
4.2 ACL設(shè)置:setfacl
添加用戶ACL:
# 給特定用戶添加讀權(quán)限 setfacl -m ur /path/to/file # 給特定用戶添加讀寫執(zhí)行權(quán)限 setfacl -m urwx /path/to/file # 設(shè)置用戶的有效權(quán)限(不超過mask限制) setfacl -m urw /path/to/file
添加組ACL:
# 給特定組添加讀權(quán)限 setfacl -m gr /path/to/file # 給特定組添加讀寫權(quán)限 setfacl -m grw /path/to/file
設(shè)置默認(rèn)ACL(目錄):
# 設(shè)置目錄默認(rèn)ACL,該目錄下新建文件自動繼承 setfacl -m dusername:rw /shared/folder/ # 查看默認(rèn)ACL getfacl /shared/folder/
刪除ACL:
# 刪除特定用戶的ACL setfacl -x u:username /path/to/file # 刪除特定組的ACL setfacl -x g:groupname /path/to/file # 刪除所有擴展ACL(恢復(fù)傳統(tǒng)權(quán)限) setfacl -b /path/to/file
4.3 ACL掩碼
ACL掩碼(mask)限制了所有ACL條目的最大權(quán)限。mask中設(shè)置的權(quán)限決定了一切非所有者ACL條目的有效上限。
# 查看mask getfacl file | grep mask # 設(shè)置mask(所有ACL條目受此限制) setfacl -m m::rw /path/to/file
mask的作用:
# 如果mask是r--,即使設(shè)置urwx,實際生效也只有r-- # 這確保了ACL不會意外提升權(quán)限 $ setfacl -m urwx /shared.txt $ setfacl -m m::r-- /shared.txt $ getfacl /shared.txt userrwx #-effective:r-- # alice的有效權(quán)限被mask限制為r--
4.4 ACL權(quán)限繼承
目錄的默認(rèn)ACL可以實現(xiàn)權(quán)限繼承:
# 創(chuàng)建項目目錄 mkdir -p /projects/webapp # 設(shè)置目錄默認(rèn)ACL(子目錄和文件繼承) setfacl -R -m ddeveloper:rwX /projects/webapp/ # 設(shè)置組的默認(rèn)ACL setfacl -R -m ddevteam:rwX /projects/webapp/ # 驗證繼承效果 cd/projects/webapp touch test.txt mkdir subdir ls -la # 應(yīng)該看到+號表示有ACL getfacl test.txt
4.5 ACL實用腳本
批量設(shè)置目錄ACL:
#!/bin/bash
# script: batch_setfacl.sh
# 用途:批量為項目目錄設(shè)置ACL權(quán)限
PROJECT_DIR="/projects"
DEVELOPER="developer"
DEVTEAM="devteam"
# 設(shè)置目錄基礎(chǔ)權(quán)限
chown -R${DEVELOPER}:${DEVTEAM}${PROJECT_DIR}
# 設(shè)置目錄ACL繼承
fordirin${PROJECT_DIR}/*/;do
echo"Setting ACL for:${dir}"
setfacl -R -m u:${DEVELOPER}:rwX"${dir}"
setfacl -R -m g:${DEVTEAM}:rwX"${dir}"
setfacl -R -m d${DEVELOPER}:rwX"${dir}"
setfacl -R -m d${DEVTEAM}:rwX"${dir}"
done
echo"ACL setup completed"
備份ACL權(quán)限:
#!/bin/bash
# script: backup_acl.sh
# 用途:備份指定目錄的ACL權(quán)限到文件
BACKUP_DIR="/var/backup/acl"
TARGET_DIR="/home"
mkdir -p"${BACKUP_DIR}"
# 使用getfacl -R備份,-p選項去掉注釋行
getfacl -R"${TARGET_DIR}"2>/dev/null >"${BACKUP_DIR}/acl_backup_$(date +%Y%m%d).txt"
echo"ACL backed up to${BACKUP_DIR}"
恢復(fù)ACL權(quán)限:
#!/bin/bash
# script: restore_acl.sh
# 用途:從備份恢復(fù)ACL權(quán)限
BACKUP_FILE="/var/backup/acl/acl_backup_20260403.txt"
if[ ! -f"${BACKUP_FILE}"];then
echo"Backup file not found!"
exit1
fi
# 使用setfacl --restore恢復(fù)
setfacl --restore="${BACKUP_FILE}"
echo"ACL restored successfully"
5. 文件屬性
除了權(quán)限位,Linux還提供了文件屬性(Attributes)機制,用于控制文件的其他行為。文件屬性使用chattr和lsattr命令管理。
5.1 查看文件屬性
# 使用lsattr查看 $ lsattr /etc/passwd -------------e-- /etc/passwd # 常用屬性位說明: # e = extent format(擴展格式,ext4默認(rèn)) # i = immutable(不可修改) # a = append only(只能追加) # d = no dump(dump備份時忽略) # s = secure deletion(安全刪除)
5.2 設(shè)置不可修改屬性
chattr +i:最常用的安全屬性,設(shè)置后文件不能被刪除、修改、重命名,連root也無法操作(除非先移除屬性)。
# 保護重要配置文件 chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/group chattr +i /etc/gshadow # 驗證保護效果 rm /etc/passwd rm: cannot remove'/etc/passwd': Operation not permitted # 取消保護 chattr -i /etc/passwd
典型應(yīng)用場景:
#!/bin/bash
# script: protect_system_files.sh
# 用途:保護關(guān)鍵系統(tǒng)文件不被誤刪或篡改
PROTECTED_FILES=(
"/etc/passwd"
"/etc/shadow"
"/etc/group"
"/etc/gshadow"
"/etc/inittab"
"/etc/fstab"
)
forfilein"${PROTECTED_FILES[@]}";do
if[ -f"$file"];then
chattr +i"$file"2>/dev/null &&echo"Protected:$file"
fi
done
echo"System files protection completed"
5.3 設(shè)置追加屬性
chattr +a:文件只能追加數(shù)據(jù),不能刪除或覆蓋。適合日志文件和某些配置文件。
# 保護日志文件 chattr +a /var/log/messages chattr +a /var/log/secure # 添加日志內(nèi)容 echo"new log entry">> /var/log/messages # 嘗試覆蓋(會失?。?echo"overwrite"> /var/log/messages -bash: /var/log/messages: Operation not permitted # 取消追加屬性 chattr -a /var/log/messages
5.4 組合使用屬性
# 同時設(shè)置不可修改和追加屬性 chattr +i /var/log/audit.log chattr +a /var/log/audit.log # 目錄的屬性設(shè)置 # +i對目錄設(shè)置后,目錄下不能新建或刪除文件 mkdir /secure_dir chattr +i /secure_dir touch /secure_dir/test.txt touch: cannot touch'/secure_dir/test.txt': Permission denied
5.5 安全增強屬性腳本
#!/bin/bash
# script: audit_file_attributes.sh
# 用途:審計文件屬性變更,檢測潛在安全事件
LOG_FILE="/var/log/attribute_audit.log"
MONITOR_DIRS=("/etc""/bin""/sbin""/usr/bin""/usr/sbin")
log_message() {
echo"[$(date '+%Y-%m-%d %H:%M:%S')]$1">>"${LOG_FILE}"
}
check_attributes() {
localdir="$1"
localflag_file="/tmp/attr_baseline_${dir////_}.txt"
# 如果沒有基準(zhǔn)文件,創(chuàng)建基準(zhǔn)
if[ ! -f"${flag_file}"];then
lsattr -R"${dir}"2>/dev/null | grep'^[a-zA-Z-]*i'>"${flag_file}"
log_message"Created baseline for${dir}"
return
fi
# 檢查變更
localcurrent_file="/tmp/attr_current_${dir////_}.txt"
lsattr -R"${dir}"2>/dev/null | grep'^[a-zA-Z-]*i'>"${current_file}"
if! diff -q"${flag_file}""${current_file}"> /dev/null 2>&1;then
log_message"ALERT: Immutable attribute changed in${dir}"
diff"${flag_file}""${current_file}">>"${LOG_FILE}"
fi
}
# 主循環(huán)
fordirin"${MONITOR_DIRS[@]}";do
if[ -d"$dir"];then
check_attributes"$dir"
fi
done
echo"Attribute audit completed"
6. 權(quán)限相關(guān)命令實戰(zhàn)
6.1 權(quán)限檢查腳本集合
檢查可疑權(quán)限:
#!/bin/bash # script: check_suspicious_perms.sh # 用途:檢查系統(tǒng)中權(quán)限配置異常的文件 REPORT="/tmp/permission_report_$(date +%Y%m%d).txt" echo"=== Permission Check Report ===">"${REPORT}" echo"Generated:$(date)">>"${REPORT}" echo"">>"${REPORT}" # 1. 檢查777權(quán)限的文件 echo"=== Files with 777 permission ===">>"${REPORT}" find / -typef -perm 777 2>/dev/null >>"${REPORT}" echo"">>"${REPORT}" # 2. 檢查SUID文件 echo"=== SUID Files ===">>"${REPORT}" find / -typef -perm +4000 2>/dev/null >>"${REPORT}" echo"">>"${REPORT}" # 3. 檢查SGID文件 echo"=== SGID Files ===">>"${REPORT}" find / -typef -perm +2000 2>/dev/null >>"${REPORT}" echo"">>"${REPORT}" # 4. 檢查無主文件(無有效所有者的文件) echo"=== Unowned Files ===">>"${REPORT}" find / -nouser -o -nogroup 2>/dev/null >>"${REPORT}" echo"">>"${REPORT}" # 5. 檢查world-writable目錄 echo"=== World-Writable Directories ===">>"${REPORT}" find / -typed -perm -002 2>/dev/null | grep -v'/proc'| grep -v'/sys'>>"${REPORT}" cat"${REPORT}" echo"" echo"Report saved to:${REPORT}"
修正常見權(quán)限問題:
#!/bin/bash
# script: fix_common_perms.sh
# 用途:修正常見的權(quán)限配置問題
set-e
echo"Starting permission fixes..."
# 1. 修正用戶home目錄權(quán)限
echo"Fixing home directory permissions..."
foruserin$(ls /home/);do
if[ -d"/home/$user"];then
chmod 700"/home/$user"
chown"$user:$user""/home/$user"
echo" Fixed: /home/$user"
fi
done
# 2. 修正SSH密鑰權(quán)限
echo"Fixing SSH key permissions..."
if[ -d"/root/.ssh"];then
chmod 700 /root/.ssh
chmod 600 /root/.ssh/id_rsa
chmod 644 /root/.ssh/id_rsa.pub
chmod 600 /root/.ssh/authorized_keys
echo" Fixed: /root/.ssh"
fi
# 3. 修正系統(tǒng)日志目錄權(quán)限
echo"Fixing log directory permissions..."
chmod 755 /var/log
chmod 755 /var/log/httpd 2>/dev/null ||true
chmod 755 /var/log/nginx 2>/dev/null ||true
# 4. 修正配置文件權(quán)限(保留讀取權(quán)限但移除組和其他寫權(quán)限)
echo"Fixing config file permissions..."
find /etc -typef -name"*.conf"-execchmod 644 {} ; 2>/dev/null
find /etc -typef -name"*.cfg"-execchmod 644 {} ; 2>/dev/null
echo"Permission fixes completed!"
6.2 Web服務(wù)權(quán)限配置
Nginx權(quán)限配置:
#!/bin/bash
# script: setup_nginx_perms.sh
# 用途:配置Web目錄的標(biāo)準(zhǔn)權(quán)限
WEB_ROOT="/var/www/html"
NGINX_USER="nginx"
NGINX_GROUP="nginx"
echo"Setting up Nginx permissions..."
# 設(shè)置目錄基礎(chǔ)權(quán)限
chown -R${NGINX_USER}:${NGINX_GROUP}"${WEB_ROOT}"
# 目錄設(shè)為755
find"${WEB_ROOT}"-typed -execchmod 755 {} ;
# 文件設(shè)為644
find"${WEB_ROOT}"-typef -execchmod 644 {} ;
# 上傳目錄單獨處理
if[ -d"${WEB_ROOT}/uploads"];then
chown -R${NGINX_USER}:${NGINX_GROUP}"${WEB_ROOT}/uploads"
chmod 755"${WEB_ROOT}/uploads"
# 上傳目錄不放執(zhí)行權(quán)限
find"${WEB_ROOT}/uploads"-typef -execchmod 644 {} ;
echo" Special handling for uploads directory"
fi
# 配置文件權(quán)限
chown root:root /etc/nginx/nginx.conf
chmod 644 /etc/nginx/nginx.conf
echo"Nginx permissions configured successfully"
PHP-FPM權(quán)限配置:
#!/bin/bash
# script: setup_phpfpm_perms.sh
# 用途:配置PHP-FPM與Web服務(wù)的協(xié)同權(quán)限
WEB_ROOT="/var/www/html"
PHP_USER="php-fpm"
PHP_GROUP="php-fpm"
NGINX_USER="nginx"
echo"Configuring PHP-FPM permissions..."
# PHP-FPM運行用戶(/etc/php-fpm.d/www.conf)
# 確保Pool配置正確
sed -i"s/^user = .*/user =${PHP_USER}/"/etc/php-fpm.d/www.conf
sed -i"s/^group = .*/group =${PHP_GROUP}/"/etc/php-fpm.d/www.conf
# 設(shè)置Socket權(quán)限
SOCKET_FILE="/var/run/php-fpm/php-fpm.sock"
if[ -S"${SOCKET_FILE}"];then
chown${PHP_USER}:${NGINX_USER}"${SOCKET_FILE}"
chmod 660"${SOCKET_FILE}"
echo" Socket permissions configured"
fi
# Web目錄權(quán)限
chown -R${PHP_USER}:${NGINX_USER}"${WEB_ROOT}"
find"${WEB_ROOT}"-typed -execchmod 755 {} ;
find"${WEB_ROOT}"-typef -execchmod 644 {} ;
# 緩存目錄(PHP需要寫權(quán)限)
fordirin"${WEB_ROOT}"/{cache,tmp,uploads};do
if[ -d"$dir"];then
chown -R${PHP_USER}:${NGINX_USER}"$dir"
chmod 755"$dir"
fi
done
echo"PHP-FPM permissions configured"
6.3 數(shù)據(jù)庫權(quán)限配置
MySQL數(shù)據(jù)目錄權(quán)限:
#!/bin/bash
# script: setup_mysql_perms.sh
# 用途:配置MySQL標(biāo)準(zhǔn)權(quán)限
MYSQL_USER="mysql"
MYSQL_GROUP="mysql"
MYSQL_DATA="/var/lib/mysql"
MYSQL_LOG="/var/log/mysql"
MYSQL_RUN="/var/run/mysql"
echo"Setting MySQL permissions..."
# 數(shù)據(jù)目錄
chown -R${MYSQL_USER}:${MYSQL_GROUP}"${MYSQL_DATA}"
chmod 700"${MYSQL_DATA}"
# 日志目錄
if[ -d"${MYSQL_LOG}"];then
chown -R${MYSQL_USER}:${MYSQL_GROUP}"${MYSQL_LOG}"
chmod 750"${MYSQL_LOG}"
fi
# Socket目錄
if[ -d"${MYSQL_RUN}"];then
chown -R${MYSQL_USER}:${MYSQL_GROUP}"${MYSQL_RUN}"
chmod 755"${MYSQL_RUN}"
fi
# 配置文件
chown root:root /etc/my.cnf
chmod 644 /etc/my.cnf
echo"MySQL permissions configured"
PostgreSQL權(quán)限配置:
#!/bin/bash
# script: setup_postgres_perms.sh
# 用途:配置PostgreSQL標(biāo)準(zhǔn)權(quán)限
PSQL_USER="postgres"
PSQL_GROUP="postgres"
PSQL_DATA="/var/lib/pgsql/data"
PSQL_LOG="/var/log/postgresql"
echo"Setting PostgreSQL permissions..."
# 數(shù)據(jù)目錄
chown -R${PSQL_USER}:${PSQL_GROUP}"${PSQL_DATA}"
chmod 700"${PSQL_DATA}"
# 只允許postgres用戶訪問
chmod 700"${PSQL_DATA}"
# HBA配置文件(認(rèn)證配置)
chown${PSQL_USER}:${PSQL_GROUP}/var/lib/pgsql/data/pg_hba.conf
chmod 600 /var/lib/pgsql/data/pg_hba.conf
echo"PostgreSQL permissions configured"
6.4 備份權(quán)限處理
#!/bin/bash
# script: backup_with_perms.sh
# 用途:完整備份文件和目錄及其權(quán)限
SOURCE_DIR="/data/app"
BACKUP_DIR="/backup/$(date +%Y%m%d_%H%M%S)"
TAR_FILE="${BACKUP_DIR}/backup.tar.gz"
echo"Starting backup with permissions..."
mkdir -p"${BACKUP_DIR}"
# 使用tar保留權(quán)限屬性
tar -czpf"${TAR_FILE}"
--acls
--xattrs
--selinux
-C"$(dirname "${SOURCE_DIR}")""$(basename "${SOURCE_DIR}")"
# 創(chuàng)建權(quán)限信息文件
getfacl -R"${SOURCE_DIR}">"${BACKUP_DIR}/permissions.acl"
# 創(chuàng)建校驗和
sha256sum"${TAR_FILE}">"${BACKUP_DIR}/checksum.sha256"
echo"Backup completed:${TAR_FILE}"
echo"ACL backup:${BACKUP_DIR}/permissions.acl"
恢復(fù)備份并校驗權(quán)限:
#!/bin/bash
# script: restore_with_perms.sh
# 用途:從備份恢復(fù)文件及完整權(quán)限
BACKUP_FILE="/backup/20260403/backup.tar.gz"
ACL_FILE="/backup/20260403/permissions.acl"
TARGET_DIR="/data/app"
VERIFY_FILE="/tmp/restore_verify.txt"
echo"Starting restore with permissions..."
# 驗證備份完整性
if[ -f"${BACKUP_FILE}.sha256"];then
echo"Verifying backup integrity..."
cd"$(dirname "${BACKUP_FILE}")"
if! sha256sum -c checksum.sha256;then
echo"ERROR: Backup checksum mismatch!"
exit1
fi
echo" Checksum verified"
fi
# 備份當(dāng)前權(quán)限(以防萬一)
getfacl -R"${TARGET_DIR}">"/tmp/pre_restore_acl.txt"2>/dev/null ||true
# 提取備份
tar -xzpf"${BACKUP_FILE}"-C"$(dirname "${TARGET_DIR}")"
# 恢復(fù)ACL
if[ -f"${ACL_FILE}"];then
echo"Restoring ACLs..."
setfacl --restore="${ACL_FILE}"
fi
# 驗證恢復(fù)結(jié)果
getfacl -R"${TARGET_DIR}">"${VERIFY_FILE}"
echo"Restore completed. Verification saved to:${VERIFY_FILE}"
7. 常見權(quán)限問題排障
7.1 排障思路框架
權(quán)限問題排查遵循以下思路:
1. 確認(rèn)問題現(xiàn)象 - 服務(wù)返回什么錯誤? - 是讀取失敗還是寫入失??? - 哪些操作受影響? 2. 定位相關(guān)文件和目錄 - 哪些文件被訪問? - 文件的owner和group是什么? - 運行服務(wù)的用戶是誰? 3. 檢查權(quán)限鏈路 - 文件本身的權(quán)限是否正確? - 目錄路徑上所有父目錄的權(quán)限? - ACL是否有額外限制? - 文件屬性是否限制了操作? 4. 驗證和修復(fù) - 修復(fù)后測試 - 檢查SELinux/AppArmor狀態(tài)
7.2 典型故障:服務(wù)無法訪問文件
故障現(xiàn)象:Nginx返回403 Forbidden,但文件存在。
排查腳本:
#!/bin/bash # script: troubleshoot_403.sh # 用途:排查Nginx 403錯誤 echo"=== Nginx 403 Troubleshooting ===" echo"" # 檢查Nginx運行用戶 echo"1. Nginx worker process user:" ps aux | grep"nginx: worker"| head -1 echo"" # 檢查文件所有者 echo"2. Target file owner:" ls -la /var/www/html/index.html echo"" # 檢查文件所在目錄的權(quán)限鏈 echo"3. Permission chain:" TARGET="/var/www/html/index.html" while["$TARGET"!="/"];do ls -ld"$TARGET" TARGET=$(dirname"$TARGET") done echo"" # 檢查SELinux上下文 echo"4. SELinux context:" ls -Z /var/www/html/index.html echo"" # 檢查ACL echo"5. ACL settings:" getfacl /var/www/html/index.html 2>/dev/null ||echo"No ACL" echo"" # 檢查nginx配置 echo"6. Nginx config user directive:" grep -r"^user"/etc/nginx/nginx.conf echo"" # 嘗試用nginx用戶讀取 echo"7. Test read as nginx user:" su -s /bin/bash nginx -c"cat /var/www/html/index.html"2>&1 ||echo"Cannot read as nginx user"
常見原因及修復(fù):
# 原因1:文件所有者不對 chown nginx:nginx /var/www/html/index.html # 原因2:目錄權(quán)限不足 chmod 755 /var/www/html # 原因3:上級目錄權(quán)限問題 chmod 755 /var/www # 原因4:SELinux問題 chcon -t httpd_sys_content_t /var/www/html/index.html restorecon -R /var/www/html # 原因5:ACL阻止訪問 setfacl -b /var/www/html/index.html
7.3 典型故障:無法寫入文件
故障現(xiàn)象:應(yīng)用程序無法寫入日志文件或數(shù)據(jù)文件。
排查腳本:
#!/bin/bash # script: troubleshoot_write.sh # 用途:排查寫入權(quán)限問題 TARGET_PATH="$1" APP_USER="$2" if[ -z"$TARGET_PATH"] || [ -z"$APP_USER"];then echo"Usage:$0" exit1 fi echo"=== Write Permission Troubleshooting ===" echo"Target:${TARGET_PATH}" echo"App User:${APP_USER}" echo"" # 1. 檢查路徑上所有目錄的寫權(quán)限 echo"1. Write permission check (directory chain):" TARGET="$TARGET_PATH" while["$TARGET"!="/"];do PARENT=$(dirname"$TARGET") if[ -d"$TARGET"];then PERMS=$(stat-c"%a""$TARGET") OWNER=$(stat-c"%U:%G""$TARGET") echo" $TARGET:$PERMS($OWNER)" # 檢查是否有寫權(quán)限 if[ -w"$TARGET"];then echo" -> Current user CAN write" else echo" -> Current user CANNOT write" fi fi TARGET="$PARENT" done echo"" # 2. 檢查目標(biāo)文件的寫權(quán)限 echo"2. File write permission:" if[ -f"$TARGET_PATH"];then ls -la"$TARGET_PATH" if[ -w"$TARGET_PATH"];then echo" -> File is writable" else echo" -> File is NOT writable" fi else echo" -> File does not exist, checking parent directory" if[ -w"$(dirname "$TARGET_PATH")"];then echo" -> Parent directory is writable (can create)" else echo" -> Parent directory is NOT writable" fi fi echo"" # 3. 檢查ACL echo"3. ACL check:" getfacl"$TARGET_PATH"2>/dev/null | grep -E"^user:|^group:|^mask:" echo"" # 4. 檢查文件系統(tǒng)屬性 echo"4. File attributes (immutable flag):" lsattr"$TARGET_PATH"2>/dev/null ||echo"Cannot read attributes" echo"" # 5. 模擬app用戶測試 echo"5. Test as${APP_USER}:" su -s /bin/bash"$APP_USER"-c"touch${TARGET_PATH}.test 2>&1"&& { rm -f"${TARGET_PATH}.test" echo" ->${APP_USER}CAN create files" } ||echo" ->${APP_USER}CANNOT create files"
7.4 典型故障:SUID程序異常
故障現(xiàn)象:設(shè)置了SUID位的程序無法正常運行。
#!/bin/bash # script: diagnose_suid_issue.sh # 用途:診斷SUID程序問題 PROGRAM="$1" if[ -z"$PROGRAM"];then echo"Usage:$0" exit1 fi echo"=== SUID Program Diagnostics ===" echo"Program:${PROGRAM}" echo"" # 1. 檢查SUID位 echo"1. SUID bit status:" ls -la"$PROGRAM" PERMS=$(stat-c"%a""$PROGRAM") LAST3="${PERMS: -3}" FIRST="${PERMS1}" echo" Permission:$PERMS" echo" First digit (special):$FIRST" echo" Last 3 digits (basic):$LAST3" echo"" # 2. 檢查文件所有者 echo"2. File owner:" stat-c"%U:%G""$PROGRAM" echo"" # 3. 檢查是否shell腳本(危險) echo"3. File type:" file"$PROGRAM"| grep -q"script"&&echo" WARNING: This is a script, SUID shell scripts are dangerous!" file"$PROGRAM" echo"" # 4. 檢查依賴庫 echo"4. Shared libraries (if executable):" ldd"$PROGRAM"2>/dev/null | head -5 ||echo" Not a dynamic executable" echo"" # 5. 檢查SELinux上下文 echo"5. SELinux context:" ls -Z"$PROGRAM" echo"" # 6. 檢查文件系統(tǒng)是否noexec掛載 echo"6. Mount options for partition:" df -T"$PROGRAM"| tail -1 MOUNT_POINT=$(df -T"$PROGRAM"| tail -1 | awk'{print $2}') grep"$MOUNT_POINT"/proc/mounts ||echo" No specific mount options found"
7.5 權(quán)限問題綜合檢查腳本
#!/bin/bash
# script: full_permission_audit.sh
# 用途:全面審計系統(tǒng)權(quán)限狀態(tài)
OUTPUT_DIR="/tmp/perm_audit_$(date +%Y%m%d)"
mkdir -p"${OUTPUT_DIR}"
echo"=== Full System Permission Audit ==="
echo"Output directory:${OUTPUT_DIR}"
echo""
# 1. 系統(tǒng)關(guān)鍵目錄權(quán)限基線
{
echo"=== Critical Directory Permissions ==="
fordirin/etc /var /usr /home /root /tmp /boot;do
if[ -d"$dir"];then
ls -ld"$dir"
fi
done
} >"${OUTPUT_DIR}/01_critical_dirs.txt"
# 2. SUID/SGID文件清單
{
echo"=== SUID Files ==="
find / -typef -perm -4000 2>/dev/null | head -100
echo""
echo"=== SGID Files ==="
find / -typef -perm -2000 2>/dev/null | head -100
} >"${OUTPUT_DIR}/02_suid_sgid.txt"
# 3. World-writable文件和目錄
{
echo"=== World-Writable Files (excluding /proc) ==="
find / -typef -perm -2 ! -path"/proc/*"! -path"/sys/*"2>/dev/null | head -50
echo""
echo"=== World-Writable Directories ==="
find / -typed -perm -2 ! -path"/proc/*"! -path"/sys/*"2>/dev/null | head -50
} >"${OUTPUT_DIR}/03_world_writable.txt"
# 4. 無主文件
{
echo"=== Unowned Files ==="
find / -nouser -o -nogroup 2>/dev/null | head -50
} >"${OUTPUT_DIR}/04_unowned.txt"
# 5. 異常權(quán)限檢查
{
echo"=== Files with 777 Permission ==="
find / -typef -perm 777 2>/dev/null | head -50
echo""
echo"=== Root-owned files in /home ==="
find /home -typef -user root 2>/dev/null | head -20
} >"${OUTPUT_DIR}/05_anomalies.txt"
# 6. SSH目錄權(quán)限
{
echo"=== SSH Directory and Key Permissions ==="
fordirin/root/.ssh /home/*/.ssh;do
if[ -d"$dir"];then
echo"Directory:$dir"
ls -la"$dir"
echo""
fi
done
} >"${OUTPUT_DIR}/06_ssh_perms.txt"
# 7. 重要配置文件權(quán)限
{
echo"=== Critical Config File Permissions ==="
forfilein/etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/services;do
if[ -f"$file"];then
ls -la"$file"
fi
done
} >"${OUTPUT_DIR}/07_critical_configs.txt"
echo"Audit completed. Files in:${OUTPUT_DIR}"
ls -la"${OUTPUT_DIR}"
8. 安全最佳實踐
8.1 權(quán)限配置原則
最小權(quán)限原則:只授予完成任務(wù)所需的最小權(quán)限,不要過度授權(quán)。
# 不好:給所有用戶讀權(quán)限 chmod 744 file.txt # 好:只給所有者讀寫權(quán)限 chmod 600 file.txt # 目錄例外:需要瀏覽但不能寫 chmod 755 /shared/readonly
目錄權(quán)限優(yōu)先:目錄的寫權(quán)限決定能否刪除或創(chuàng)建文件,比文件本身權(quán)限更重要。
# 用戶A創(chuàng)建了文件 touch /shared/file.txt # 所有者為A # 用戶B如果在/shared目錄有寫權(quán)限,即使文件屬于A,B也可以刪除 # 解決:設(shè)置Sticky Bit chmod 1775 /shared
敏感文件特殊處理:關(guān)鍵配置文件設(shè)置不可修改屬性。
# 系統(tǒng)配置文件防篡改 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow # 日志文件只追加 chattr +a /var/log/messages /var/log/secure # 驗證 lsattr /etc/passwd # 應(yīng)該顯示 ----i------------- /etc/passwd
8.2 服務(wù)運行用戶配置
原則:每個服務(wù)使用獨立的低權(quán)限用戶運行,避免服務(wù)被攻破后影響整個系統(tǒng)。
# 創(chuàng)建專用服務(wù)用戶(禁止登錄) useradd -r -s /sbin/nologin -d /var/lib/myapp myapp # 設(shè)置服務(wù)目錄所有權(quán) chown -R myapp:myapp /var/lib/myapp chown -R myapp:myapp /var/log/myapp # 確保目錄權(quán)限正確 chmod 755 /var/lib/myapp chmod 750 /var/log/myapp
8.3 定期權(quán)限審計
#!/bin/bash # script: scheduled_permission_audit.sh # 用途:定期權(quán)限審計(建議加入cron) AUDIT_DIR="/var/audit/permissions" DATE=$(date +%Y%m%d) PREVIOUS_FILE="${AUDIT_DIR}/baseline.txt" CURRENT_FILE="${AUDIT_DIR}/current_${DATE}.txt" DIFF_FILE="${AUDIT_DIR}/diff_${DATE}.txt" mkdir -p"${AUDIT_DIR}" # 收集當(dāng)前SUID文件快照 echo"Generating current SUID file list..." find / -typef -perm -4000 2>/dev/null | sort >"${CURRENT_FILE}" if[ -f"${PREVIOUS_FILE}"];then # 比對變更 diff"${PREVIOUS_FILE}""${CURRENT_FILE}">"${DIFF_FILE}" if[ -s"${DIFF_FILE}"];then echo"WARNING: SUID file changes detected!" cat"${DIFF_FILE}" # 這里可以加入郵件告警 fi # 備份舊基線 mv"${PREVIOUS_FILE}""${AUDIT_DIR}/baseline_$(date +%Y%m%d -d yesterday).txt" fi # 創(chuàng)建新基線 cp"${CURRENT_FILE}""${PREVIOUS_FILE}" echo"Audit completed"
8.4 文件權(quán)限基線核查
#!/bin/bash
# script: permission_compliance_check.sh
# 用途:檢查權(quán)限是否符合安全基線
echo"=== Permission Compliance Check ==="
echo""
ISSUES=0
# 檢查1:/etc/shadow應(yīng)該是600
if[ -f /etc/shadow ];then
PERMS=$(stat-c"%a"/etc/shadow)
if["$PERMS"!="0"];then
echo"[FAIL] /etc/shadow permissions:$PERMS(expected 0)"
ISSUES=$((ISSUES+1))
else
echo"[PASS] /etc/shadow permissions:$PERMS"
fi
fi
# 檢查2:/etc/passwd應(yīng)該是644或更低
if[ -f /etc/passwd ];then
PERMS=$(stat-c"%a"/etc/passwd)
if["$PERMS"-gt"644"];then
echo"[FAIL] /etc/passwd permissions:$PERMS(expected <=644)"
? ? ? ? ISSUES=$((ISSUES+1))
? ??else
? ? ? ??echo?"[PASS] /etc/passwd permissions:?$PERMS"
? ??fi
fi
# 檢查3:SSH私鑰應(yīng)該是600
if?[ -f /root/.ssh/id_rsa ];?then
? ? PERMS=$(stat?-c?"%a"?/root/.ssh/id_rsa)
? ??if?[?"$PERMS"?!=?"600"?];?then
? ? ? ??echo?"[FAIL] SSH private key permissions:?$PERMS?(expected 600)"
? ? ? ? ISSUES=$((ISSUES+1))
? ??else
? ? ? ??echo?"[PASS] SSH private key permissions:?$PERMS"
? ??fi
fi
# 檢查4:.ssh目錄應(yīng)該是700
if?[ -d /root/.ssh ];?then
? ? PERMS=$(stat?-c?"%a"?/root/.ssh)
? ??if?[?"$PERMS"?!=?"700"?];?then
? ? ? ??echo?"[FAIL] .ssh directory permissions:?$PERMS?(expected 700)"
? ? ? ? ISSUES=$((ISSUES+1))
? ??else
? ? ? ??echo?"[PASS] .ssh directory permissions:?$PERMS"
? ??fi
fi
# 檢查5:home目錄應(yīng)該是700
for?user?in?/home/*;?do
? ??if?[ -d?"$user"?];?then
? ? ? ? PERMS=$(stat?-c?"%a"?"$user")
? ? ? ??if?[?"$PERMS"?!=?"700"?];?then
? ? ? ? ? ??echo?"[FAIL]?$user?permissions:?$PERMS?(expected 700)"
? ? ? ? ? ? ISSUES=$((ISSUES+1))
? ? ? ??else
? ? ? ? ? ??echo?"[PASS]?$user?permissions:?$PERMS"
? ? ? ??fi
? ??fi
done
# 檢查6:/tmp應(yīng)該是1777(帶sticky bit)
PERMS=$(stat?-c?"%a"?/tmp)
if?[?"$PERMS"?!=?"1777"?];?then
? ??echo?"[FAIL] /tmp permissions:?$PERMS?(expected 1777)"
? ? ISSUES=$((ISSUES+1))
else
? ??echo?"[PASS] /tmp permissions:?$PERMS"
fi
echo?""
if?[?$ISSUES?-eq 0 ];?then
? ??echo?"All checks passed!"
? ??exit?0
else
? ??echo?"Found?$ISSUES?issue(s)"
? ??exit?1
fi
9. 總結(jié)與檢查清單
9.1 核心知識點回顧
基本權(quán)限模型:
UGO(User/Group/Others)三元組控制
rwx對應(yīng)4/2/1,完整權(quán)限為777/755/644等
默認(rèn)權(quán)限由umask控制,普通用戶umask通常為0002
特殊權(quán)限:
SUID(4000):以文件所有者身份執(zhí)行
SGID(2000):以文件所屬組身份執(zhí)行;目錄繼承組
Sticky Bit(1000):目錄內(nèi)文件只能所有者刪除
ACL擴展:
getfacl查看、setfacl設(shè)置
支持用戶和組的精細(xì)權(quán)限控制
目錄可設(shè)置默認(rèn)ACL實現(xiàn)繼承
mask限制ACL條目的最大權(quán)限
文件屬性:
chattr設(shè)置、lsattr查看
+i不可修改、+a只能追加
對root也生效(防御性屬性)
排障思路:
確認(rèn)運行用戶身份
檢查文件owner和permission
檢查路徑上所有父目錄權(quán)限
檢查ACL和文件屬性
考慮SELinux/AppArmor
9.2 日常操作檢查清單
部署新服務(wù)時:
[ ] 創(chuàng)建專用服務(wù)用戶(useradd -r -s /sbin/nologin) [ ] 設(shè)置服務(wù)目錄所有權(quán)(chown -R serviceuser:serviceuser) [ ] 目錄權(quán)限755,文件權(quán)限644 [ ] 日志目錄權(quán)限750或755 [ ] 需要寫入的目錄單獨確認(rèn)權(quán)限 [ ] 配置文件權(quán)限644,關(guān)鍵配置考慮chattr +i
備份和恢復(fù)時:
[ ] 使用tar -p保留權(quán)限和ACL [ ] 備份前后記錄getfacl快照 [ ] 恢復(fù)后驗證文件權(quán)限正確 [ ] 驗證服務(wù)用戶能正常讀寫所需文件
安全審計時:
[ ] 掃描SUID文件,確認(rèn)都是必要的 [ ] 檢查world-writable目錄數(shù)量(越少越好) [ ] 驗證/etc/shadow權(quán)限為0 [ ] 檢查無主文件并清理或分配所有權(quán) [ ] 確認(rèn)/home目錄權(quán)限為700 [ ] 驗證SSH目錄和密鑰權(quán)限正確
9.3 常用命令速查表
| 操作 | 命令 |
|---|---|
| 查看文件權(quán)限 | ls -la file |
| 修改權(quán)限(數(shù)字) | chmod 755 file |
| 修改權(quán)限(符號) | chmod u+x file |
| 修改所有者 | chown user file |
| 修改所屬組 | chgrp group file |
| 同時修改所有者和組 | chown user:group file |
| 設(shè)置SUID | chmod u+s file 或 chmod 4xxx file |
| 設(shè)置SGID | chmod g+s dir 或 chmod 2xxx dir |
| 設(shè)置Sticky Bit | chmod +t dir 或 chmod 1xxx dir |
| 查看ACL | getfacl file |
| 設(shè)置ACL | setfacl -m urw file |
| 刪除ACL | setfacl -x u:user file |
| 查看文件屬性 | lsattr file |
| 設(shè)置不可修改 | chattr +i file |
| 取消不可修改 | chattr -i file |
| 設(shè)置追加屬性 | chattr +a file |
| 查找SUID文件 | find / -perm +4000 |
| 查找SGID文件 | find / -perm +2000 |
| 查找world-writable | find / -perm -2 |
9.4 排障流程圖
權(quán)限問題發(fā)生 | v 確認(rèn)問題現(xiàn)象(讀失???寫失?。浚? | v 定位相關(guān)文件路徑 | v 檢查文件所有權(quán)(ls -la) | v 檢查路徑上所有父目錄權(quán)限 | v 檢查ACL(getfacl) | v 檢查文件屬性(lsattr) | v 如果是服務(wù),檢查服務(wù)運行用戶(ps aux) | v 如果是服務(wù),檢查SELinux/AppArmor狀態(tài) | v 修復(fù)問題 | v 驗證修復(fù)(測試操作是否成功)
參考信息
環(huán)境版本:
操作系統(tǒng):Rocky Linux 9.4
內(nèi)核版本:6.8.5
GNU Coreutils:9.1
bash版本:5.2.15
-
Linux
+關(guān)注
關(guān)注
88文章
11822瀏覽量
219602 -
文件
+關(guān)注
關(guān)注
1文章
598瀏覽量
26124 -
模型
+關(guān)注
關(guān)注
1文章
3831瀏覽量
52287 -
nginx
+關(guān)注
關(guān)注
0文章
194瀏覽量
13223
原文標(biāo)題:十分鐘搞懂 Linux 權(quán)限體系:新手必學(xué)的核心知識點
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
一文徹底掌握Linux的ACL權(quán)限
一文搞懂UPS主要內(nèi)容
Linux 中文件權(quán)限管理的探討
Linux改變文件或目錄的訪問權(quán)限命令
淺談Linux權(quán)限管理的ACL權(quán)限
Linux進(jìn)程權(quán)限的分析說明
詳細(xì)剖析有數(shù)BI的權(quán)限體系!
linux文件訪問權(quán)限怎么設(shè)置
Linux把目錄權(quán)限給指定用戶
Linux文件權(quán)限及Makefile
搞懂Linux權(quán)限管理,提升系統(tǒng)安全性與穩(wěn)定性
Linux權(quán)限管理基礎(chǔ)入門
一文搞懂Linux權(quán)限體系
評論