1. 首页 > Linux教程 > 正文

Linux教程FG065-chown/chgrp命令所有者所属组修改

本文档风哥主要介绍Linux所有权管理相关知识,包括chown命令修改文件所有者、chgrp命令修改文件所属组、所有权安全配置、批量所有权管理等内容,参考Red Hat Enterprise Linux 10官方文档,适合运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 Linux所有权管理概念

Linux所有权管理是文件系统安全的基础,每个文件和目录都有一个所有者(Owner)和一个所属组(Group)。所有权决定了谁可以修改文件的权限和内容。只有文件所有者或root用户可以修改文件的所有权。

Linux所有权管理的重要性:

  • 权限控制:所有者拥有最高权限
  • 资源管理:明确文件归属
  • 安全隔离:防止未授权访问
  • 审计追踪:记录文件操作

1.2 Linux所有权类型

Linux文件所有权分为两种类型:

  • 所有者(Owner):文件的创建者,拥有最高权限
  • 所属组(Group):文件所属的用户组,组成员拥有组权限
# 查看文件所有权

# 1. 使用ls -l查看所有权
# ls -l /etc/passwd
-rw-r–r–. 1 root root 1234 Apr 2 10:00 /etc/passwd

# 字段说明:
# – 文件类型
# rw-r–r– 权限
# 1 硬链接数
# root 所有者(Owner)
# root 所属组(Group)
# 1234 文件大小
# Apr 2 10:00 修改时间
# /etc/passwd 文件名

# 2. 使用stat查看详细所有权
# stat /etc/passwd
File: /etc/passwd
Size: 1234 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1234567 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2026-04-02 10:00:00.000000000 +0800
Modify: 2026-04-02 10:00:00.000000000 +0800
Modify: 2026-04-02 10:00:00.000000000 +0800
Change: 2026-04-02 10:00:00.000000000 +0800
Birth: 2026-04-02 10:00:00.000000000 +0800

# 3. 使用stat查看所有权数字
# stat -c “%U:%G %n” /etc/passwd
root:root /etc/passwd

# 4. 使用stat查看所有权ID
# stat -c “%u:%g %n” /etc/passwd
0:0 /etc/passwd

# 5. 查看用户UID和GID
# id root
uid=0(root) gid=0(root) groups=0(root)

# 6. 查看用户所属组
# groups root
root : root

# 7. 查看所有文件所有权
# ls -l /etc/ | head -n 10
total 1234
-rw-r–r–. 1 root root 1234 Apr 2 10:00 passwd
-rw-r–r–. 1 root root 1234 Apr 2 10:00 group
-rw——-. 1 root root 1234 Apr 2 10:00 shadow
-rw——-. 1 root root 1234 Apr 2 10:00 gshadow
drwxr-xr-x. 2 root root 4096 Apr 2 10:00 ssh
drwxr-xr-x. 2 root root root 4096 Apr 2 10:00 cron.d

# 8. 查看特定用户的所有文件
# find /home -user fgedu -ls | head -n 10
1234567 4 -rw——- 1 fgedu fgedu 1234 Apr 2 10:00 /home/fgedu/.bashrc
1234568 4 -rw——- 1 fgedu fgedu 1234 Apr 2 10:00 /home/fgedu/.bash_profile

# 9. 查看特定组的所有文件
# find /home -group developers -ls | head -n 10

# 10. 查看无主文件
# find /home -nouser -o -nogroup -ls

1.3 Linux所有权查看方法

Linux所有权查看的常用方法:

# 所有权查看方法

# 1. 查看文件所有权
# ls -l file.txt
-rw-r–r–. 1 root root 0 Apr 2 10:00 file.txt

# 2. 查看目录所有权
# ls -ld /home
drwxr-xr-x. 3 root root 17 Apr 2 10:00 /home

# 3. 查看详细所有权信息
# stat file.txt
File: file.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 1234567 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2026-04-02 10:00:00.000000000 +0800
Modify: 2026-04-02 10:00:00.000000000 +0800
Change: 2026-04-02 10:00:00.000000000 +0800
Birth: 2026-04-02 10:00:00.000000000 +0800

# 4. 查看所有权数字格式
# stat -c “%u:%g” file.txt
0:0

# 5. 查看所有权名称格式
# stat -c “%U:%G” file.txt
root:root

# 6. 查看文件所有权和权限
# ls -l file.txt | awk ‘{print $1, $3, $4}’
-rw-r–r– root root

# 7. 批量查看文件所有权
# ls -l /etc/*.conf | awk ‘{print $9, $3, $4}’
/etc/asound.conf root root
/etc/dnsmasq.conf root root
/etc/drirc root root
/etc/e2fsck.conf root root
/etc/fuse.conf root root

# 8. 查看用户创建的文件
# find / -user fgedu -type f 2>/dev/null | head -n 10
/home/fgedu/.bashrc
/home/fgedu/.bash_profile
/home/fgedu/.bash_logout

# 9. 查看组拥有的文件
# find / -group developers -type f 2>/dev/null | head -n 10

# 10. 查看所有权变更历史
# 使用auditd监控所有权变更
# auditctl -w /etc/passwd -p a -k ownership_changes
# ausearch -k ownership_changes

Part02-生产环境规划与建议

2.1 所有权规划原则

在生产环境中,所有权规划应遵循安全原则:

# 所有权规划原则

# 1. 所有权分配原则
– 系统文件:root:root
– 应用文件:app:app
– 用户文件:user:user
– 共享文件:root:group

# 2. 所有权规划示例
# 系统文件所有权
/etc/passwd root:root
/etc/shadow root:root
/etc/group root:root
/etc/gshadow root:root
/etc/ssh/sshd_config root:root

# 应用文件所有权
/app/bin/ app:app
/app/conf/ app:app
/app/logs/ app:app
/app/data/ app:app

# 用户文件所有权
/home/user/ user:user
/home/user/.ssh/ user:user
/home/user/.bashrc user:user

# 共享文件所有权
/shared/projectA/ root:developers
/shared/projectB/ root:ops
/shared/projectC/ root:dba

# 3. 所有权矩阵示例
文件类型 所有者 所属组
系统文件 root root
应用文件 app app
用户文件 user user
共享文件 root team

# 4. 所有权变更原则
– 最小化变更
– 记录变更日志
– 定期审计所有权
– 及时清理无主文件

# 5. 所有权安全原则
– 避免文件所有者为普通用户
– 避免敏感文件组权限过大
– 定期检查无主文件
– 定期检查所有权变更

2.2 所有权安全建议

生产环境所有权安全建议:

所有权安全最佳实践:

  • 系统文件保持root:root
  • 应用文件使用专用用户
  • 定期检查无主文件
  • 监控所有权变更
  • 记录所有权变更日志
  • 使用SELinux增强安全
# 所有权安全配置示例

# 1. 检查无主文件
# find /home -nouser -ls
(输出无主文件)

# 2. 检查无组文件
# find /home -nogroup -ls
(输出无组文件)

# 3. 检查所有者为普通用户的系统文件
# find /etc -user fgedu -ls
(输出所有者为普通用户的系统文件)

# 4. 检查敏感文件所有权
# ls -l /etc/shadow /etc/gshadow /etc/ssh/sshd_config
-rw——-. 1 root root 1234 Apr 2 10:00 /etc/gshadow
-rw——-. 1 root root 1234 Apr 2 10:00 /etc/shadow
-rw——-. 1 root root root 1234 Apr 2 10:00 /etc/ssh/sshd_config

# 5. 修复敏感文件所有权
# chown root:root /etc/shadow
# chown root:root /etc/gshadow
# chown root:root /etc/ssh/sshd_config

# 6. 检查应用文件所有权
# find /app -ls | head -n 10
1234567 4 drwxr-xr-x 2 app app 4096 Apr 2 10:00 /app/bin
1234568 4 drwxr-xr-x 2 app app 4096 Apr 2 10:00 /app/conf
1234569 4 drwxr-xr-x 2 app app 4096 Apr 2 10:00 /app/logs

# 7. 检查临时文件所有权
# find /tmp -user root -type f -ls | head -n 10
(输出root拥有的临时文件)

# 8. 检查用户目录所有权
# ls -ld /home/*
drwx——. 2 fgedu fgedu 62 Apr 2 10:00 /home/fgedu
drwx——. 2 user1 user1 62 Apr 2 10:00 /home/user1

# 9. 检查共享目录所有权
# ls -ld /shared/*
drwxrwsr-x. 2 root developers 4096 Apr 2 10:00 /shared/projectA
drwxrwsr-x. 2 root ops 4096 Apr 2 10:00 /shared/projectB

# 10. 监控所有权变更
# auditctl -w /etc/passwd -p a -k ownership_changes
# ausearch -k ownership_changes

2.3 所有权审计策略

定期审计所有权是系统安全的重要环节:

# 所有权审计脚本

# 1. 创建所有权审计脚本
# cat > /tmp/ownership_audit.sh << 'EOF' #!/bin/bash REPORT="/tmp/ownership_audit_report.txt" echo "========================================" > $REPORT
echo “Ownership Audit Report – $(date)” >> $REPORT
echo “========================================” >> $REPORT
echo “” >> $REPORT

# 1. 检查无主文件
echo “1. Unowned Files (No User)” >> $REPORT
echo “—————————” >> $REPORT
find /home -nouser -ls 2>/dev/null >> $REPORT
echo “” >> $REPORT

# 2. 检查无组文件
echo “2. Unowned Files (No Group)” >> $REPORT
echo “—————————-” >> $REPORT
find /home -nogroup -ls 2>/dev/null >> $REPORT
echo “” >> $REPORT

# 3. 检查系统文件所有权
echo “3. System File Ownership” >> $REPORT
echo “————————-” >> $REPORT
ls -l /etc/passwd /etc/shadow /etc/group /etc/gshadow >> $REPORT
echo “” >> $REPORT

# 4. 检查应用文件所有权
echo “4. Application File Ownership” >> $REPORT
echo “——————————” >> $REPORT
find /app -maxdepth 2 -ls 2>/dev/null >> $REPORT
echo “” >> $REPORT

# 5. 检查用户目录所有权
echo “5. User Home Directory Ownership” >> $REPORT
echo “———————————” >> $REPORT
ls -ld /home/* >> $REPORT
echo “” >> $REPORT

# 6. 检查共享文件所有权
echo “4. Shared File Ownership” >> $REPORT
echo “————————-” >> $REPORT
find /shared -ls 2>/dev/null >> $REPORT
echo “” >> $REPORT

# 5. 检查用户目录所有权
echo “5. User Home Directory Ownership” >> $REPORT
echo “———————————” >> $REPORT
ls -ld /home/* >> $REPORT
echo “” >> $REPORT

# 6. 检查应用文件所有权
echo “6. Application File Ownership” >> $REPORT
echo “——————————” >> $REPORT
find /app -maxdepth 2 -ls 2>/dev/null >> $REPORT
echo “” >> $REPORT

# 7. 检查临时文件所有权
echo “7. Temporary File Ownership” >> $REPORT
echo “—————————-” >> $REPORT
find /tmp -maxdepth 2 -ls 2>/dev/null | head -n 20 >> $REPORT
echo “” >> $REPORT

# 8. 检查SUID文件所有权
echo “8. SUID File Ownership” >> $REPORT
echo “———————–” >> $REPORT
find /usr -perm -4000 -ls 2>/dev/null >> $REPORT
echo “” >> $REPORT

echo “Audit completed. Report saved to $REPORT”
EOF

# 2. 执行审计脚本
# chmod +x /tmp/ownership_audit.sh
# /tmp/ownership_audit.sh
Audit completed. Report saved to /tmp/ownership_audit_report.txt

# 3. 查看审计报告
# cat /tmp/ownership_audit_report.txt
========================================
Ownership Audit Report – Fri Apr 2 10:00:00 CST 2026
========================================

1. Unowned Files (No User)
—————————

2. Unowned Files (No Group)
—————————-

3. System File Ownership
————————-
-rw-r–r–. 1 root root 1234 Apr 2 10:00 /etc/group
-rw——-. 1 root root 1234 Apr 2 10:00 /etc/gshadow
-rw-r–r–. 1 root root 1234 Apr 2 10:00 /etc/passwd
-rw——-. 1 root root 1234 Apr 2 10:00 /etc/shadow

4. Shared File Ownership
————————-

5. User Home Directory Ownership
———————————
drwx——. 2 fgedu fgedu 62 Apr 2 10:00 /home/fgedu

6. Application File Ownership
——————————

7. Temporary File Ownership
—————————-
1234567 4 drwxrwxrwt 10 root root 4096 Apr 2 10:00 /tmp

8. SUID File Ownership
———————–
1234568 12 -rwsr-xr-x 1 root root 12345 Apr 2 10:00 /usr/bin/sudo
1234569 12 -rwsr-xr-x 1 root root 12345 Apr 2 10:00 /usr/bin/passwd

Part03-生产环境项目实施方案

3.1 chown命令修改所有者

chown命令用于修改文件的所有者和所属组。

# chown命令基础用法

# 1. 修改文件所有者
# touch file.txt
# chown fgedu file.txt
# ls -l file.txt
-rw-r–r–. 1 fgedu root 0 Apr 2 10:00 file.txt

# 2. 修改文件所有者和所属组
# chown fgedu:fgedu file.txt
# ls -l file.txt
-rw-r–r–. 1 fgedu fgedu 0 Apr 2 10:00 file.txt

# 3. 修改文件所属组(使用冒号)
# chown :developers file.txt
# ls -l file.txt
-rw-r–r–. 1 fgedu developers 0 Apr 2 10:00 file.txt

# 4. 修改文件所有者和所属组(使用点号)
# chown root.root file.txt
# ls -l file.txt
-rw-r–r–. 1 root root 0 Apr 2 10:00 file.txt

# 5. 递归修改目录所有权
# mkdir -p /tmp/test/{dir1,dir2}
# touch /tmp/test/{file1,file2}
# chown -R fgedu:fgedu /tmp/test
# ls -lR /tmp/test
/tmp/test:
total 0
drwxr-xr-x. 2 fgedu fgedu 6 Apr 2 10:00 dir1
drwxr-xr-x. 2 fgedu fgedu 6 Apr 2 10:00 dir2
-rw-r–r–. 1 fgedu fgedu 0 Apr 2 10:00 file1
-rw-r–r–. 1 fgedu fgedu 0 Apr 2 10:00 file2

# 6. 修改文件所有者(使用UID)
# chown 1000 file.txt
# ls -l file.txt
-rw-r–r–. 1 fgedu root 0 Apr 2 10:00 file.txt

# 7. 修改文件所属组(使用GID)
# chown :1000 file.txt
# ls -l file.txt
-rw-r–r–. 1 fgedu fgedu 0 Apr 2 10:00 file.txt

# 8. 修改文件所有者和所属组(使用UID和GID)
# chown 0:0 file.txt
# ls -l file.txt
-rw-r–r–. 1 root root 0 Apr 2 10:00 file.txt

# 9. 参考文件所有权
# chown –reference=/etc/passwd file.txt
# ls -l file.txt /etc/passwd
-rw-r–r–. 1 root root 0 Apr 2 10:00 file.txt
-rw-r–r–. 1 root root 1234 Apr 2 10:00 /etc/passwd

# 10. 修改多个文件所有权
# touch file1.txt file2.txt file3.txt
# chown fgedu:fgedu file1.txt file2.txt file3.txt
# ls -l file*.txt
-rw-r–r–. 1 fgedu fgedu 0 Apr 2 10:00 file1.txt
-rw-r–r–. 1 fgedu fgedu 0 Apr 2 10:00 file2.txt
-rw-r–r–. 1 fgedu fgedu 0 Apr 2 10:00 file3.txt

# 11. 修改符号链接所有权
# ln -s file.txt link.txt
# chown -h fgedu:fgedu link.txt
# ls -l link.txt
lrwxrwxrwx. 1 fgedu fgedu 8 Apr 2 10:00 link.txt -> file.txt

# 12. 修改目录所有权(不递归)
# mkdir dir1
# chown fgedu:fgedu dir1
# ls -ld dir1
drwxr-xr-x. 2 fgedu fgedu 6 Apr 2 10:00 dir1

# 13. 修改所有权并显示详细信息
# chown -v root:root file.txt
changed ownership of ‘file.txt’ from fgedu:fgedu to root:root

# 14. 修改所有权(不显示错误)
# chown -f fgedu:fgedu file.txt

# 15. 批量修改所有权
# find /tmp -name “*.txt” -exec chown fgedu:fgedu {} \;

3.2 chgrp命令修改所属组

chgrp命令专门用于修改文件的所属组。

# chgrp命令基础用法

# 1. 修改文件所属组
# touch file.txt
# chgrp developers file.txt
# ls -l file.txt
-rw-r–r–. 1 root developers 0 Apr 2 10:00 file.txt

# 2. 修改目录所属组
# mkdir dir1
# chgrp developers dir1
# ls -ld dir1
drwxr-xr-x. 2 root developers 6 Apr 2 10:00 dir1

# 3. 递归修改目录所属组
# mkdir -p /tmp/test/{dir1,dir2}
# touch /tmp/test/{file1,file2}
# chgrp -R developers /tmp/test
# ls -lR /tmp/test
/tmp/test:
total 0
drwxr-xr-x. 2 root developers 6 Apr 2 10:00 dir1
drwxr-xr-x. 2 root developers 6 Apr 2 10:00 dir2
-rw-r–r–. 1 root developers 0 Apr 2 10:00 file1
-rw-r–r–. 1 root developers 0 Apr 2 10:00 file2

# 4. 修改文件所属组(使用GID)
# chgrp 1000 file.txt
# ls -l file.txt
-rw-r–r–. 1 root fgedu 0 Apr 2 10:00 file.txt

# 5. 参考文件所属组
# chgrp –reference=/etc/passwd file.txt
# ls -l file.txt /etc/passwd
-rw-r–r–. 1 root root 0 Apr 2 10:00 file.txt
-rw-r–r–. 1 root root 1234 Apr 2 10:00 /etc/passwd

# 6. 修改多个文件所属组
# touch file1.txt file2.txt file3.txt
# chgrp developers file1.txt file2.txt file3.txt
# ls -l file*.txt
-rw-r–r–. 1 root developers 0 Apr 2 10:00 file1.txt
-rw-r–r–. 1 root developers 0 Apr 2 10:00 file2.txt
-rw-r–r–. 1 root developers 0 Apr 2 10:00 file3.txt

# 7. 修改符号链接所属组
# ln -s file.txt link.txt
# chgrp -h developers link.txt
# ls -l link.txt
lrwxrwxrwx. 1 root developers 8 Apr 2 10:00 link.txt -> file.txt

# 8. 修改所属组并显示详细信息
# chgrp -v fgedu file.txt
changed group of ‘file.txt’ from developers to fgedu

# 9. 修改所属组(不显示错误)
# chgrp -f developers file.txt

# 10. 批量修改所属组
# find /tmp -name “*.txt” -exec chgrp developers {} \;

# 11. 修改共享目录所属组
# mkdir /shared/projectA
# chgrp developers /shared/projectA
# chmod 2775 /shared/projectA
# ls -ld /shared/projectA
drwxrwsr-x. 2 root developers 6 Apr 2 10:00 /shared/projectA

# 12. 修改日志文件所属组
# mkdir /var/log/app
# chgrp app /var/log/app
# ls -ld /var/log/app
drwxr-xr-x. 2 root app 6 Apr 2 10:00 /var/log/app

# 13. 修改配置文件所属组
# touch /etc/app/app.conf
# chgrp app /etc/app/app.conf
# ls -l /etc/app/app.conf
-rw-r–r–. 1 root app 0 Apr 2 10:00 /etc/app/app.conf

# 14. 修改数据文件所属组
# mkdir /data/app
# chgrp app /data/app
# ls -ld /data/app
drwxr-xr-x. 2 root app 6 Apr 2 10:00 /data/app

# 15. 检查所属组修改
# stat -c “%G” file.txt
developers

3.3 所有权管理高级用法

所有权管理的高级用法和技巧。

# 所有权管理高级用法

# 1. 批量修改所有权(按类型)
# mkdir -p /app/{bin,conf,logs,data}

# 目录设置为app:app
# find /app -type d -exec chown app:app {} \;

# 文件设置为app:app
# find /app -type f -exec chown app:app {} \;

# 验证所有权
# ls -lR /app
/app:
total 0
drwxr-xr-x. 2 app app 6 Apr 2 10:00 bin
drwxr-xr-x. 2 app app 6 Apr 2 10:00 conf
drwxr-xr-x. 2 app app 6 Apr 2 10:00 data
drwxr-xr-x. 2 app app 6 Apr 2 10:00 logs

# 2. 修复用户目录所有权
# cat > /tmp/fix_home_ownership.sh << 'EOF' #!/bin/bash for user in $(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}’ /etc/passwd); do
home_dir=$(awk -F: -v u=$user ‘$1 == u {print $6}’ /etc/passwd)

if [ -d “$home_dir” ]; then
# 修复家目录所有权
chown -R $user:$user $home_dir

echo “Fixed ownership for $user”
fi
done
EOF

# chmod +x /tmp/fix_home_ownership.sh
# /tmp/fix_home_ownership.sh

# 3. 修复无主文件所有权
# cat > /tmp/fix_unowned_files.sh << 'EOF' #!/bin/bash # 查找无主文件 find /home -nouser -o -nogroup | while read file; do # 设置为root:root chown root:root "$file" echo "Fixed ownership for $file" done EOF # 4. 复制所有权(从模板文件) # cat > /tmp/copy_ownership.sh << 'EOF' #!/bin/bash TEMPLATE_DIR="/tmp/template" TARGET_DIR="/tmp/target" # 复制所有权 find $TEMPLATE_DIR -printf "%P\n" | while read file; do if [ -e "$TARGET_DIR/$file" ]; then chown --reference="$TEMPLATE_DIR/$file" "$TARGET_DIR/$file" echo "Copied ownership to $TARGET_DIR/$file" fi done EOF # 5. 所有权备份和恢复 # 备份所有权 # find /app -printf "%p %u:%g\n" > /tmp/app_ownership.txt

# 恢复所有权
# cat /tmp/app_ownership.txt | while read file owner; do
chown $owner $file
done

# 6. 监控所有权变更
# auditctl -w /etc/passwd -p a -k ownership_changes
# auditctl -w /etc/shadow -p a -k ownership_changes
# auditctl -w /etc/group -p a -k ownership_changes

# 查看变更记录
# ausearch -k ownership_changes

# 7. 批量修改共享目录所有权
# cat > /tmp/fix_shared_ownership.sh << 'EOF' #!/bin/bash SHARED_DIR="/shared" # 设置目录所有权 chown -R root:developers $SHARED_DIR/projectA chown -R root:ops $SHARED_DIR/projectB chown -R root:dba $SHARED_DIR/projectC echo "Shared directory ownership fixed" EOF # 8. 所有权一致性检查 # cat > /tmp/check_ownership_consistency.sh << 'EOF' #!/bin/bash DIR=$1 if [ -z "$DIR" ]; then echo "Usage: $0
exit 1
fi

# 检查所有权一致性
find $DIR -type f -printf “%u:%g\n” | sort | uniq -c | sort -nr

echo “Ownership consistency check completed”
EOF

# 9. 所有权变更日志
# cat > /tmp/log_ownership_changes.sh << 'EOF' #!/bin/bash LOG_FILE="/var/log/ownership_changes.log" # 记录所有权变更 log_change() { echo "$(date): $1 ownership changed to $2" >> $LOG_FILE
}

# 使用示例
# chown fgedu:fgedu file.txt
# log_change “file.txt” “fgedu:fgedu”
EOF

# 10. 所有权模板应用
# cat > /tmp/apply_ownership_template.sh << 'EOF' #!/bin/bash # 定义所有权模板 declare -A OWNERSHIP=( ["/app/bin"]="app:app" ["/app/conf"]="app:app" ["/app/logs"]="app:app" ["/app/data"]="app:app" ["/var/log/app"]="app:app" ["/etc/app"]="root:app" ) for dir in "${!OWNERSHIP[@]}"; do if [ -d "$dir" ]; then chown -R ${OWNERSHIP[$dir]} "$dir" echo "Applied ownership ${OWNERSHIP[$dir]} to $dir" fi done EOF

Part04-生产案例与实战讲解

4.1 批量所有权管理案例

在生产环境中,经常需要批量管理文件和目录所有权。

# 批量所有权管理脚本

# 1. 批量设置Web目录所有权
# cat > /tmp/setup_web_ownership.sh << 'EOF' #!/bin/bash WEB_ROOT="/var/www/html" # 设置所有者 chown -R apache:apache $WEB_ROOT # 设置上传目录 chown -R apache:apache $WEB_ROOT/uploads # 设置配置文件 chown root:apache $WEB_ROOT/.htaccess # 设置日志目录 chown -R apache:apache $WEB_ROOT/logs echo "Web ownership configured" EOF # 2. 批量设置应用目录所有权 # cat > /tmp/setup_app_ownership.sh << 'EOF' #!/bin/bash APP_ROOT="/opt/app" # 创建应用用户 useradd -r -s /sbin/nologin app # 设置所有者 chown -R app:app $APP_ROOT # 设置配置文件 chown root:app $APP_ROOT/conf/*.conf # 设置日志目录 chown -R app:app $APP_ROOT/logs # 设置数据目录 chown -R app:app $APP_ROOT/data echo "App ownership configured" EOF # 3. 批量修复用户目录所有权 # cat > /tmp/fix_user_home_ownership.sh << 'EOF' #!/bin/bash for user in $(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}’ /etc/passwd); do
home_dir=$(awk -F: -v u=$user ‘$1 == u {print $6}’ /etc/passwd)

if [ -d “$home_dir” ]; then
# 修复家目录所有权
chown -R $user:$user $home_dir

# 修复SSH目录所有权
if [ -d “$home_dir/.ssh” ]; then
chown -R $user:$user $home_dir/.ssh
chmod 700 $home_dir/.ssh
chmod 600 $home_dir/.ssh/authorized_keys
fi

echo “Fixed ownership for $user”
fi
done
EOF

# 4. 批量设置共享目录所有权
# cat > /tmp/setup_shared_ownership.sh << 'EOF' #!/bin/bash SHARED_DIR="/shared" # 创建共享目录 mkdir -p $SHARED_DIR/{projectA,projectB,projectC} # 设置所有权 chown -R root:developers $SHARED_DIR/projectA chown -R root:ops $SHARED_DIR/projectB chown -R root:dba $SHARED_DIR/projectC # 设置权限 chmod -R 2775 $SHARED_DIR/projectA chmod -R 2775 $SHARED_DIR/projectB chmod -R 2775 $SHARED_DIR/projectC echo "Shared ownership configured" EOF # 5. 批量修复无主文件 # cat > /tmp/fix_unowned_files.sh << 'EOF' #!/bin/bash # 查找并修复无主文件 find /home -nouser -exec chown root:root {} \; 2>/dev/null
find /home -nogroup -exec chgrp root {} \; 2>/dev/null

# 查找并修复无主目录
find /home -nouser -type d -exec chown root:root {} \; 2>/dev/null
find /home -nogroup -type d -exec chgrp root {} \; 2>/dev/null

echo “Unowned files fixed”
EOF

4.2 所有权安全加固案例

对系统进行所有权安全加固。

# 所有权安全加固脚本

# 1. 系统文件所有权加固
# cat > /tmp/harden_system_ownership.sh << 'EOF' #!/bin/bash echo "Hardening system ownership..." # 修复关键系统文件所有权 chown root:root /etc/passwd chown root:root /etc/shadow chown root:root /etc/group chown root:root /etc/gshadow chown root:root /etc/ssh/sshd_config chown root:root /etc/ssh/ssh_config # 修复系统目录所有权 chown root:root /bin /sbin /usr/bin /usr/sbin chown root:root /etc /var /usr # 修复日志目录所有权 chown root:root /var/log find /var/log -type f -exec chown root:root {} \; # 修复临时目录所有权 chown root:root /tmp /var/tmp echo "System ownership hardened" EOF # 2. 检查并修复所有权问题 # cat > /tmp/check_fix_ownership.sh << 'EOF' #!/bin/bash # 检查无主文件 echo "Checking for unowned files..." find /home -nouser -o -nogroup | while read file; do echo "Fixing ownership for $file" chown root:root "$file" done # 检查系统文件所有权 echo "Checking system file ownership..." for file in /etc/passwd /etc/shadow /etc/group /etc/gshadow; do owner=$(stat -c "%U:%G" $file) if [ "$owner" != "root:root" ]; then echo "Fixing ownership for $file" chown root:root $file fi done echo "Ownership check completed" EOF # 3. 应用安全所有权模板 # cat > /tmp/apply_security_ownership.sh << 'EOF' #!/bin/bash # 定义安全所有权模板 declare -A OWNERSHIP=( ["/etc/passwd"]="root:root" ["/etc/shadow"]="root:root" ["/etc/group"]="root:root" ["/etc/gshadow"]="root:root" ["/etc/ssh/sshd_config"]="root:root" ["/etc/ssh/ssh_config"]="root:root" ["/etc/crontab"]="root:root" ["/etc/cron.d"]="root:root" ) for file in "${!OWNERSHIP[@]}"; do if [ -e "$file" ]; then chown ${OWNERSHIP[$file]} "$file" echo "Set ${OWNERSHIP[$file]} on $file" fi done echo "Security ownership template applied" EOF # 4. 所有权审计和修复 # cat > /tmp/audit_fix_ownership.sh << 'EOF' #!/bin/bash REPORT="/tmp/ownership_audit_fix.txt" echo "Ownership Audit and Fix - $(date)" > $REPORT

# 检查并修复无主文件
echo “” >> $REPORT
echo “Fixing unowned files…” >> $REPORT
find /home -nouser -ls >> $REPORT
find /home -nouser -exec chown root:root {} \;

# 检查并修复无组文件
echo “” >> $REPORT
echo “Fixing ungrouped files…” >> $REPORT
find /home -nogroup -ls >> $REPORT
find /home -nogroup -exec chgrp root {} \;

# 检查系统文件所有权
echo “” >> $REPORT
echo “Checking system file ownership…” >> $REPORT
for file in /etc/passwd /etc/shadow /etc/group /etc/gshadow; do
owner=$(stat -c “%U:%G” $file)
echo “$file: $owner” >> $REPORT
if [ “$owner” != “root:root” ]; then
chown root:root $file
echo “Fixed $file” >> $REPORT
fi
done

echo “Audit and fix completed. Report saved to $REPORT”
EOF

# 5. 完整所有权安全加固
# cat > /tmp/full_ownership_hardening.sh << 'EOF' #!/bin/bash echo "Starting full ownership hardening..." # 1. 系统文件所有权加固 ./harden_system_ownership.sh # 2. 检查并修复所有权问题 ./check_fix_ownership.sh # 3. 应用安全模板 ./apply_security_ownership.sh # 4. 所有权审计和修复 ./audit_fix_ownership.sh echo "Full ownership hardening completed" EOF # chmod +x /tmp/full_ownership_hardening.sh # /tmp/full_ownership_hardening.sh

4.3 所有权故障排查案例

所有权相关故障的排查和解决。

# 所有权故障排查案例

# 案例1:用户无法访问文件
# 症状:用户提示”Permission denied”

# 排查步骤:
# 1. 检查文件所有权
# ls -l file.txt
-rw——-. 1 root root 1234 Apr 2 10:00 file.txt

# 2. 检查用户身份
# id username
uid=1000(username) gid=1000(username) groups=1000(username)

# 解决:修改文件所有权或权限
# chown username:username file.txt
# 或
# chmod 644 file.txt

# 案例2:用户无法修改文件
# 症状:用户提示”Permission denied”

# 排查步骤:
# 1. 检查文件所有权
# ls -l file.txt
-rw-r–r–. 1 root root 1234 Apr 2 10:00 file.txt

# 2. 检查文件权限
# stat -c “%a” file.txt
644

# 解决:修改文件所有权或权限
# chown username:username file.txt
# 或
# chmod 664 file.txt

# 案例3:用户无法访问目录
# 症状:用户提示”Permission denied”

# 排查步骤:
# 1. 检查目录所有权
# ls -ld /app/data
drwxr-x—. 2 root app 4096 Apr 2 10:00 /app/data

# 2. 检查用户组
# id username
uid=1000(username) gid=1000(username) groups=1000(username)

# 解决:修改目录所有权或添加用户到组
# chown username:app /app/data
# 或
# gpasswd -a username app

# 案例4:文件所有权异常
# 症状:文件所有者显示为数字

# 排查步骤:
# 1. 检查文件所有权
# ls -l file.txt
-rw-r–r–. 1 1234 5678 1234 Apr 2 10:00 file.txt

# 2. 检查用户是否存在
# id 1234
id: ‘1234’: no such user

# 解决:修复文件所有权
# chown root:root file.txt

# 案例5:无主文件问题
# 症状:文件没有所有者

# 排查步骤:
# 1. 查找无主文件
# find /home -nouser -ls
1234567 4 -rw-r–r– 1 1234 5678 1234 Apr 2 10:00 /home/test/file.txt

# 解决:修复无主文件
# chown root:root /home/test/file.txt

# 案例6:所有权修改失败
# 症状:chown命令执行失败

# 排查步骤:
# 1. 检查用户权限
# id
uid=1000(username) gid=1000(username) groups=1000(username)

# 2. 检查文件系统
# mount | grep “on / ”
/dev/mapper/rhel-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

# 解决:使用root权限
# su –
# chown username:username file.txt

# 案例7:符号链接所有权问题
# 症状:符号链接所有权不正确

# 排查步骤:
# 1. 检查符号链接
# ls -l link.txt
lrwxrwxrwx. 1 root root 8 Apr 2 10:00 link.txt -> file.txt

# 解决:修改符号链接所有权
# chown -h username:username link.txt

# 案例8:所有权继承问题
# 症状:新文件不继承目录所有权

# 排查步骤:
# 1. 检查目录所有权
# ls -ld /shared
drwxrwsr-x. 2 root developers 4096 Apr 2 10:00 /shared

# 2. 检查新文件所有权
# touch /shared/test.txt
# ls -l /shared/test.txt
-rw-r–r–. 1 username username 0 Apr 2 10:00 /shared/test.txt

# 解决:SGID只继承组,不继承所有者
# 使用umask或脚本设置所有权

# 案例9:所有权变更监控
# 症状:文件所有权被意外修改

# 排查步骤:
# 1. 检查审计日志
# ausearch -k ownership_changes

# 2. 检查系统日志
# journalctl -xe | grep chown

# 解决:启用审计监控
# auditctl -w /etc/passwd -p a -k ownership_changes

# 案例10:所有权备份恢复
# 症状:需要恢复文件所有权

# 排查步骤:
# 1. 检查所有权备份
# cat /tmp/app_ownership.txt
/app/bin app:app
/app/conf app:app

# 解决:恢复所有权
# cat /tmp/app_ownership.txt | while read file owner; do
chown $owner $file
done

Part05-风哥经验总结与分享

5.1 所有权管理最佳实践

风哥提示:所有权管理是Linux文件系统安全的基础,必须建立完善的所有权管理制度和安全策略。

# 所有权管理最佳实践清单

# 1. 所有权设置原则
– 系统文件:root:root
– 应用文件:app:app
– 用户文件:user:user
– 共享文件:root:group

# 2. 所有权变更原则
– 最小化变更
– 记录变更日志
– 定期审计所有权
– 及时清理无主文件

# 3. 所有权安全原则
– 避免文件所有者为普通用户
– 避免敏感文件组权限过大
– 定期检查无主文件
– 定期检查所有权变更

# 4. 所有权审计原则
– 定期检查无主文件
– 定期检查所有权变更
– 定期检查敏感文件所有权
– 定期检查共享文件所有权

# 5. 所有权备份原则
– 定期备份所有权信息
– 记录所有权变更历史
– 建立所有权恢复流程
– 测试所有权恢复流程

5.2 常见问题与解决

# 所有权管理常见问题与解决

# 问题1:无主文件
# 解决:修复无主文件
# find /home -nouser -exec chown root:root {} \;

# 问题2:所有权不一致
# 解决:统一所有权
# chown -R app:app /app

# 问题3:所有权修改失败
# 解决:检查权限和文件系统
# 使用root权限
# 检查文件系统是否只读

# 问题4:所有权继承问题
# 解决:使用SGID和脚本
# chmod 2775 /shared
# 使用脚本设置所有权

# 问题5:所有权变更监控
# 解决:启用审计
# auditctl -w /etc/passwd -p a -k ownership_changes

# 问题6:所有权备份恢复
# 解决:建立备份恢复流程
# find /app -printf “%p %u:%g\n” > ownership.txt
# cat ownership.txt | while read file owner; do chown $owner $file; done

# 问题7:所有权冲突
# 解决:理解所有权优先级
# 所有者权限 > 组权限 > 其他用户权限

# 问题8:SELinux所有权问题
# 解决:检查并修复SELinux上下文
# restorecon -Rv /path/to/file

# 问题9:所有权变更日志
# 解决:记录变更日志
# echo “$(date): $file ownership changed” >> /var/log/ownership.log

# 问题10:所有权模板应用
# 解决:使用所有权模板
# 定义所有权模板并批量应用

5.3 所有权管理工具推荐

推荐的所有权管理工具:

  • 基本工具:chown, chgrp, ls, stat
  • 查找工具:find, locate
  • 审计工具:auditctl, ausearch
  • 备份工具:getfacl, setfacl
  • 监控工具:inotifywait, auditd
# 所有权管理工具使用示例

# 1. 查看所有权详细信息
# stat file.txt
# stat -c “%U:%G %n” file.txt
root:root file.txt

# 2. 批量修改所有权
# find /path -type f -exec chown app:app {} \;
# find /path -type d -exec chown app:app {} \;

# 3. 查找特定所有者的文件
# find / -user fgedu -type f
# find / -group developers -type f

# 4. 监控所有权变更
# auditctl -w /etc/passwd -p a -k ownership_changes
# ausearch -k ownership_changes

# 5. 所有权备份和恢复
# find /app -printf “%p %u:%g\n” > ownership.txt
# cat ownership.txt | while read file owner; do chown $owner $file; done

# 6. 所有权比较
# diff <(ls -l dir1) <(ls -l dir2) # 7. 所有权模板 # install -o app -g app -m 644 template.conf /etc/app/app.conf # 8. 所有权验证 # test -O file.txt && echo "Owned by current user" # test -G file.txt && echo "Owned by current group" # 9. 所有权复制 # chown --reference=/etc/passwd file.txt # 10. 所有权递归修改 # chown -R app:app /app

风哥总结:所有权管理是Linux文件系统安全的核心,掌握chown和chgrp命令,理解所有权的作用,建立完善的所有权管理制度,是每个运维人员必备的技能。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息