-
本篇文章记录解决Linux的docker容器中明明是root用户但是对文件无读取权限的问题。
此问题出现的原因是run容器的时候加入了-v参数指定了挂载路径,容器中的对应路径就会读取Linux系统中的挂载目录中的文件,但是此时Linux系统中的SELinux 模块会匹配规则库阻止你访问导致这个权限报错。
什么是SELinux?
在Linux系统中,控制资源访问权限的一般是判断一个用户是否拥有这个文件的读写执行权限,在这种情况下,root用户就显得无所不能,只要拿到拿到root权限,你的服务器就完完全全的沦陷了。为了避免这种情况,就出现了SELinux模块。它会去匹配你这个进程是否对这个资源有访问权限,就算你是root用户也得经过SELinux的审核。
如何解决这个问题?ls: cannot open directory '.': Permission denied
- 方法一:
- 在run容器挂载目录的时候给容器加入权限:--privileged-true
-
- 方法二:
- 临时关闭SELinux模块:setenforce 0(重启虚拟机后服务又会重新启动)
- 方法三:
- 添加SELinux规则,改变要挂载的目录的安全性文本
- 补充:
- SELinux有三种状态
- enforcing:强制模式。违反 SELinux 规则的操作会被阻止并记录到内核信息日志中。
- permissive:宽容模式。违反 SELinux 规则的操作只会记录到日志中(调试时使用)。
- disabled:关闭 SELinux模块。
- 输入setenforce 0系统就会切换到permissive模式
- 输入setenforce 1系统就会切换到enforcing模式
- 也可以到SELinux配置文件中直接修改( vim /etc/selinux/config )