You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复Linux /home目录下用户主目录文件所有权(含外部认证用户)

修复/home目录下用户主目录的文件所有权(不依赖/etc/passwd)

需求说明

需要编程修复Linux系统中/home目录下所有用户主目录内文件的所有权。由于存在外部认证用户(不在/etc/passwd中),且id命令返回的UID/GID与目录实际的UID/GID不匹配,因此不能依赖用户数据库,必须从主目录本身提取UID和GID,再递归将该权限应用到目录内所有对象。

原脚本的局限

原脚本依赖/etc/passwd获取用户信息,无法处理外部认证用户:

#!/bin/bash

while IFS=':' read -r login pass uid gid uname homedir comment; do
    if [[ "$homedir" = **/home/** ]]; then
        if [ -d "$homedir" ]; then
            echo chown -R $uid:$gid "$homedir";
        fi
    fi
done < /etc/passwd

场景示例

外部认证用户主目录

目录列表(名称格式):

drwx------+  3 DOMAIN\user        DOMAIN\DOMAIN USERS  4096 Jan  1  1969 user

目录列表(UID/GID格式):

drwx------+  3 12345        01234  4096 Jan  1  1969 user

id命令输出(与目录UID/GID不匹配):

$ id DOMAIN\\user
uid=2000234(DOMAIN) gid=2000349(DOMAIN\domain users) groups=2056789(DOMAIN\domain users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

stat命令输出(正确获取目录的UID/GID):

$ stat -c "%n %u:%g" /home/user/
/home/user/ 12345:01234

本地用户主目录

目录列表:

drwx------.  4  1000  1000  4096 Jul 21 02:04 user2
drwx------.  4 user2           user2          4096 Jul 21 02:04 user2

id命令输出:

$ id user2
uid=1000(user2) gid=1000(user2) groups=1000(user2),4(adm),190(systemd-journal)

失败的尝试思路

以下脚本未成功实现需求:

find . -exec sh -c '
  for f do
    GID=$(stat -c %g)
    chown :$GID $f
' find-sh {} \;    

可行解决方案

直接遍历/home下的所有子目录(即用户主目录),对每个目录提取其UID和GID,再递归修改目录内所有对象的所有权:

#!/bin/bash

# 遍历/home下的所有子目录
for homedir in /home/*/; do
    # 跳过非目录项
    [ -d "$homedir" ] || continue

    # 从目录本身获取UID和GID
    owner=$(stat -c "%u:%g" "$homedir")
    if [ -n "$owner" ]; then
        echo "修复目录 $homedir 的所有权为 $owner"
        # 递归修改所有权,加上-v可以查看详细操作(可选)
        chown -R "$owner" "$homedir"
    fi
done

脚本说明

  • 遍历/home/*/确保只处理主目录(末尾的/过滤掉非目录文件)
  • 使用stat -c "%u:%g"直接从目录提取正确的UID:GID,不受外部认证影响
  • chown -R "$owner" "$homedir"递归将所有权应用到目录内所有文件和子目录
  • 若需要测试脚本(不实际执行修改),可以将chown命令前加上echo,先确认操作内容

内容的提问来源于stack exchange,提问作者Astron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:00:54