日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文搞懂Linux權(quán)限體系

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-04-09 10:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景與目的

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 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)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    徹底掌握Linux的ACL權(quán)限

    大家好,這里是浩道linux,主要給大家分享linux、python、網(wǎng)絡(luò)通信相關(guān)的IT知識平臺。
    發(fā)表于 09-08 09:27 ?1733次閱讀

    搞懂UPS主要內(nèi)容

    導(dǎo)讀:UPS是系統(tǒng)集成項目中常用到的設(shè)備,也是機房必備的設(shè)備。本文簡單介紹了UPS的種類、功能、原理,品質(zhì)選擇與配置選擇方式,基礎(chǔ)維護等相關(guān)的內(nèi)容。搞懂UPS本文主要內(nèi)容:UPS種類、功能
    發(fā)表于 09-15 07:49

    Linux 中文件權(quán)限管理的探討

    Linux種多用戶的操作系統(tǒng),其文件權(quán)限管理在文件管理中占有重要的地位。為了更好地把握Linux 的文件權(quán)限的相關(guān)內(nèi)容,本文以多種
    發(fā)表于 06-11 09:37 ?11次下載

    Linux改變文件或目錄的訪問權(quán)限命令

    Linux改變文件或目錄的訪問權(quán)限命令 Linux改變文件或目錄的訪問權(quán)限命令  Linux系統(tǒng)中的每個文件和目錄都有訪問許可
    發(fā)表于 01-18 12:46 ?1407次閱讀

    淺談Linux權(quán)限管理的ACL權(quán)限

    Linux權(quán)限管理是Linux很重要的項內(nèi)容,重則引起用戶信息泄露,輕則導(dǎo)致文件錯亂和丟失。企業(yè)服務(wù)器里有些目錄下面的東西暫時保密,不希望別人可以進(jìn)入目錄并查看。有些文件希望別人可以
    的頭像 發(fā)表于 08-18 11:13 ?9736次閱讀

    Linux進(jìn)程權(quán)限的分析說明

     在linux下,關(guān)于文件權(quán)限,大部分人接觸比較多,也比較熟悉了解。但是對進(jìn)程權(quán)限般知之甚少。本文總結(jié)
    發(fā)表于 07-17 10:55 ?1167次閱讀

    詳細(xì)剖析有數(shù)BI的權(quán)限體系!

    權(quán)限體系是所有BI產(chǎn)品都會涉及的個重要組成部分,目的是對不同的人訪問資源進(jìn)行權(quán)限控制,避免因權(quán)限控制缺失或操作不當(dāng)引發(fā)的風(fēng)險,如隱私數(shù)據(jù)泄
    的頭像 發(fā)表于 04-13 11:00 ?4547次閱讀
    詳細(xì)剖析有數(shù)BI的<b class='flag-5'>權(quán)限</b><b class='flag-5'>體系</b>!

    linux文件訪問權(quán)限怎么設(shè)置

    Linux 文件訪問權(quán)限是操作系統(tǒng)中個非常重要的概念。正確地設(shè)置文件訪問權(quán)限可以保護系統(tǒng)的安全性,防止未經(jīng)授權(quán)的人員對文件進(jìn)行修改、刪除或執(zhí)行。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-23 10:20 ?2854次閱讀

    Linux把目錄權(quán)限給指定用戶

    Linux個開放源代碼的操作系統(tǒng),它基于Unix的設(shè)計原則,提供了豐富的權(quán)限管理功能,允許用戶對系統(tǒng)中的文件和目錄進(jìn)行精確的控制。在Linux中,每個文件和目錄都有相應(yīng)的
    的頭像 發(fā)表于 11-23 10:30 ?1w次閱讀

    Linux文件權(quán)限及Makefile

    的詳細(xì)信息 //man -L zh_CN open man 1 open man 2 open man 3 open Part2權(quán)限 2.1 權(quán)限理解 在 Ubuntu(以及其他類 UNIX
    的頭像 發(fā)表于 11-24 16:06 ?1258次閱讀
    <b class='flag-5'>Linux</b>文件<b class='flag-5'>權(quán)限</b>及Makefile

    詳解Linux中的權(quán)限控制

    本章將和大家分享Linux中的權(quán)限控制。廢話不多說,下面我們直接進(jìn)入主題。
    的頭像 發(fā)表于 08-05 15:32 ?1648次閱讀
    詳解<b class='flag-5'>Linux</b>中的<b class='flag-5'>權(quán)限</b>控制

    搞懂Linux權(quán)限管理,提升系統(tǒng)安全性與穩(wěn)定性

    目錄 權(quán)限管理 4.1 linux安全上下文 4.2 特殊權(quán)限 2.1 修改權(quán)限的命令chmod 2.2 修改文件屬主和屬組的命令chown 1.權(quán)
    的頭像 發(fā)表于 11-22 10:31 ?1367次閱讀
    <b class='flag-5'>搞懂</b><b class='flag-5'>Linux</b><b class='flag-5'>權(quán)限</b>管理,提升系統(tǒng)安全性與穩(wěn)定性

    Linux權(quán)限管理基礎(chǔ)入門

    Linux的廣闊天空中,權(quán)限管理猶如只翱翔的雄鷹,掌控著系統(tǒng)的安全與秩序。掌握Linux權(quán)限,不僅能讓你的系統(tǒng)管理更加得心應(yīng)手,還能有效
    的頭像 發(fā)表于 05-06 13:44 ?936次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>權(quán)限</b>管理基礎(chǔ)入門

    Linux權(quán)限體系解析

    你真的了解Linux權(quán)限嗎?大多數(shù)人只知道rwx,但Linux權(quán)限體系遠(yuǎn)比你想象的復(fù)雜和強大。今天我們深入探討
    的頭像 發(fā)表于 07-23 16:57 ?1098次閱讀

    搞懂Linux權(quán)限體系

    在聊具體技術(shù)之前,我想先說說為什么我們需要認(rèn)真對待權(quán)限管理。
    的頭像 發(fā)表于 02-03 11:06 ?720次閱讀
    博乐市| 依兰县| 铜川市| 公安县| 罗源县| 永修县| 新绛县| 织金县| 信阳市| 出国| 江口县| 繁昌县| 五台县| 伊川县| 建阳市| 鄂温| 西吉县| 广昌县| 若羌县| 安新县| 邳州市| 浦江县| 沂水县| 永善县| 隆子县| 岫岩| 富源县| 普兰县| 伊吾县| 从江县| 德庆县| 大方县| 怀宁县| 东城区| 营山县| 大宁县| 青阳县| 黔江区| 谢通门县| 灵璧县| 利津县|