如何检测文件系统是否支持权限?现有枚举方案需优化
检测文件系统是否支持POSIX权限的解决方案
一、无需写入文件的检测方法
不需要维护文件系统列表,可通过检查文件系统的实际挂载特性直接判断是否支持POSIX权限,覆盖所有小众文件系统的情况:
方法1:用findmnt查看文件系统特性
findmnt能直接输出文件系统的支持特性,只需检查是否包含posix_acl或acl这类权限相关特性即可:
#!/usr/bin/env bash FOLDER="/example" # 获取目标目录所在文件系统的特性列表 FS_FEATURES=$(findmnt -no FEATURES "$FOLDER") # 检查是否支持POSIX权限相关特性 if ! [[ "$FS_FEATURES" =~ (posix_acl|acl) ]]; then echo "Unsupported filesystem: no POSIX permission support" exit 1 fi
方法2:检查挂载选项的权限限制
非POSIX文件系统挂载时通常会附带noacl、nosuid这类限制权限的选项,可通过提取挂载选项判断:
#!/usr/bin/env bash FOLDER="/example" # 获取目标目录所在文件系统的挂载选项 MOUNT_OPTS=$(findmnt -no OPTIONS "$FOLDER") # 存在权限限制选项且未明确启用权限支持时判定为不兼容 if [[ "$MOUNT_OPTS" =~ (noacl|nosuid) && ! "$MOUNT_OPTS" =~ (acl|user_xattr) ]]; then echo "Unsupported filesystem: permission restrictions enabled" exit 1 fi
二、若仍需使用列表法,补充这些文件系统
要是你还是倾向于维护文件系统列表,除了你已列出的类型,还需补充以下常见的不兼容类型:
iso9660:光盘镜像文件系统,默认不支持权限修改udf:通用光盘格式,通常不保留POSIX权限cifs/smbfs:SMB/CIFS网络共享,默认挂载不保留本地权限
注意:像ntfs这类文件系统,若通过ntfs-3g挂载时添加permissions参数,是可以支持权限的——这也是列表法的局限性,无法覆盖这类动态配置的场景。
内容的提问来源于stack exchange,提问作者Maestro
相关产品推荐
相关产品推荐

