非sudo用户可覆盖Docker中root创建文件权限及所有权问题问询
问题分析与解决:Docker容器内普通用户可覆盖root文件所有权
原因拆解
这其实不是Docker的“异常”,而是Vim的强制保存机制和Linux目录权限规则共同作用的结果,咱们结合你的操作场景来看:
- 你通过
useradd -m cp创建用户时,/home/cp目录的所有者是cp,默认权限为755——普通用户对自身目录拥有写/删除权限。 - root用户在
/home/cp下创建了hello.txt,此时文件所有权是root,但cp用户对/home/cp目录有操作权限:Linux规则里,只要用户对目录有写权限,就能删除目录内的任意文件(不管文件本身的权限)。 - 当你用普通用户
cp执行vim hello.txt并尝试:wq!强制保存时,Vim并没有修改原文件(因为你没有文件写权限),而是先删除root创建的原文件,再新建一个同名文件。这个新文件由cp用户创建,所有权自然就变成了cp。
解决办法
根据你的需求,有几种不同的处理方式:
1. 限制目录操作权限(推荐)
如果不希望普通用户能删除/替换目录内的root文件,可以调整/home/cp目录的权限或所有者:
# 方式1:移除其他用户对目录的写权限(保留cp用户自身的操作权限) chmod 750 /home/cp # 方式2:将目录所有权改为root(注意:这样cp用户自己也无法在目录内创建新文件,需谨慎使用) chown root:root /home/cp
2. 给文件添加不可变属性
如果要保护特定的root文件不被删除/修改,可以使用chattr添加immutable属性:
# 给文件加锁,只有root能解锁修改 chattr +i /home/cp/hello.txt # 解锁文件(需要root权限) chattr -i /home/cp/hello.txt
添加这个属性后,即使普通用户对目录有写权限,也无法删除或覆盖该文件。
3. 规范用户操作习惯
提醒用户避免使用:wq!强制保存无权限的文件——正常情况下,没有文件写入权限时应该联系管理员调整权限,而不是强制覆盖文件。
内容的提问来源于stack exchange,提问作者cprakashagr
相关产品推荐
相关产品推荐

