我是靠谱客的博主 炙热季节,最近开发中收集的这篇文章主要介绍[解决] Docker容器权限报错 [无法使用sudo]:sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 前言
    • 1 报错场景
    • 2 解决方案
    • 3 反思
    • 4 总结
    • 参考文献

前言

因为我的docker放在/mnt (原本属于root,而非本用户)文件夹下,所以每次登陆docker容器都要用root登,很不方便,然后我错误地使用了 sudo chown -R dale:dale /mnt/docker/overlay2/这个指令。。。导致权限错误(把有些镜像、容器内的root文件夹也赋予了普通用户权限)。

故在此记录解决方案。

1 报错场景

  • docker 容器是Ubuntu14.04 版本

我之前运行了sudo chown -R dale:dale /mnt/docker/overlay2/之后,没有发觉异常。
但是今天:
1)新建一个容器,即运行
docker run --name test-container -v /home/dale/:/data -it ubuntu:14.04
2)然后进入容器:

docker start test-container
docker exec -it -u dale test-container bash

3)准备在/根文件夹创建个软链接:
sudo ln -s /home/dale/xxx xxx
4)此时报错:

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

2 解决方案

1)参考[1],注意:这里需要root权限。正好,我是docker容器,只需要运行:
docker exec -it -u root test-container bash

此时即以root的身份进入docker容器中。

然后运行:

ls -l  /usr/bin/sudo
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo

而后,运行exit,退出容器,运行:docker exec -it -u dale test-container bash以用户身份进入容器(其实也可以不exit,直接su - dale,都可以)。

此时再次尝试创建软链接,又报错:

sudo: error in /etc/sudo.conf, line 0 while loading plugin `sudoers_policy’
sudo: /usr/lib/sudo/sudoers.so must be owned by uid 0
sudo: fatal error, unable to load plugins

2)于是,参考[2],以root身份运行:

chmod 644 /usr/lib/sudo/sudoers.so
chown -R root /usr/lib/sudo

此时再次以dale用户,尝试创立软链接,又报错:

sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

3)于是,参考[3],以root权限运行:
chown root:root /etc/sudoers

此时,再次尝试创立软链接,这次没报错,但报了warning:

sudo: /etc/sudoers.d is owned by uid 1000, should be 0
sudo: /var/lib/sudo owned by uid 1000, should be uid 0

4)于是,再次以root权限,运行:

chown root:root /etc/sudoers.d/
chown root:root /var/lib/sudo/

此时,再次尝试创建软链接,这次又报了一个warning:

sudo: /etc/sudoers.d/README is owned by uid 1000, should be 0

5)于是,再次以root权限运行:
chown root:root /etc/sudoers.d/README

此时,终于可以使用sudo了。

3 反思

还是很折腾的哈。

其实可以不需要这样的指令:sudo chown -R dale:dale /mnt/docker/overlay2/

有以下两种代替方案:
1)在docker还没有转移到/mnt的时候,运行chown -R dale:dale /mnt可能会好些。
2)[更为稳妥的方案] :对每一个docker容器,在容器内运行 chown -R dale:dale home/dale/ 即可。

(具体有待进一步探究。)

4 总结

写这个有点麻烦,但是我感觉这确实很有必要记下来,因为问题一个接一个,环环相扣,觉得很有意思,遂记之笔墨也。

参考文献

[1] 修改了Ubuntu下的/usr目录权限,导致不能使用sudo命令的修复 https://blog.csdn.net/lengxibo/article/details/8284844

[2] sudo: error in /etc/sudo.conf, line 0 while loading plugin ‘sudoers_policy’ https://blog.csdn.net/lileihappy/article/details/79214156

[3] sudo: /etc/sudoers is owned by uid 755, should be 0 https://www.cnblogs.com/justinzhang/p/4478977.html

最后

以上就是炙热季节为你收集整理的[解决] Docker容器权限报错 [无法使用sudo]:sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set的全部内容,希望文章能够帮你解决[解决] Docker容器权限报错 [无法使用sudo]:sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部