如何设置权限,让指定用户可对多用户所有的外部磁盘目录执行du命令
嘿,我来帮你梳理下这个问题的解决方案~先明确下你的场景:你在Telegraf容器里用monitor_usr(UID/GID均为1001)运行服务,想要执行du命令统计外部NFS挂载磁盘的目录占用情况,但磁盘上的文件和目录由多个不同用户创建管理,monitor_usr没有足够的执行权限,导致du无法准确统计对吧?
下面给你几个实用的方案,你可以根据自身安全需求和环境选择:
方案一:用POSIX ACL给指定用户批量添加遍历权限
这是比较精细的权限控制方式,无需改动全局权限。首先要确保你的NFS挂载支持ACL(NFSv3及以上版本通常服务端配置后都支持),然后给挂载根目录递归添加monitor_usr的读+执行权限:
setfacl -R -m u:monitor_usr:rx /你的NFS挂载路径
这个命令能让monitor_usr遍历所有子目录(du只需要目录的执行权限来深入遍历,文件的读权限其实不是必须的,除非你要单独统计单个文件大小)。如果想让后续新建的目录自动继承这个权限,再设置默认ACL:
setfacl -R -d -m u:monitor_usr:rx /你的NFS挂载路径
方案二:将指定用户加入共享用户组
如果那些多用户创建的文件/目录大多属于某个共同用户组,或者你可以把它们统一调整到一个共享组里,这个方案会更合适。先把monitor_usr加入目标共享组:
usermod -aG 共享组名 monitor_usr
然后递归给所有目录加上组的读+执行权限:
chmod -R g+rx /你的NFS挂载路径
这样只要文件/目录的组权限开放了rx,monitor_usr作为组成员就能正常用du统计了。
方案三:给Docker容器添加特殊Linux能力
如果不想改动磁盘上的任何权限设置,可以给Telegraf容器添加CAP_DAC_READ_SEARCH能力——这个能力能让容器内的进程绕过文件的读和执行权限检查,只要路径存在就能遍历统计。修改你的docker-compose.yml或者容器运行命令即可:
docker-compose.yml示例
services: telegraf: image: telegraf:latest user: monitor_usr:monitor_usr cap_add: - CAP_DAC_READ_SEARCH volumes: - /你的NFS挂载路径:/mnt/nfs
不过要注意,这个能力会让容器内的monitor_usr拥有更多权限,需要评估安全风险,内部可信环境下使用完全没问题。
备注:内容来源于stack exchange,提问作者teeeeee

