为什么我的用户没有被授予 root 访问权限?

为什么我的用户没有被授予 root 访问权限?

我运行了以下命令并建立了终端会话:

karl@i-dev:~$ sudo usermod -aG sudo karl
karl@i-dev:~$ sudo adduser karl sudo
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_PAPER = "sv_SE.UTF-8",
    LC_ADDRESS = "sv_SE.UTF-8",
    LC_MONETARY = "sv_SE.UTF-8",
    LC_NUMERIC = "sv_SE.UTF-8",
    LC_TELEPHONE = "sv_SE.UTF-8",
    LC_IDENTIFICATION = "sv_SE.UTF-8",
    LC_MEASUREMENT = "sv_SE.UTF-8",
    LC_TIME = "sv_SE.UTF-8",
    LC_NAME = "sv_SE.UTF-8",
    LANG = "ru_RU.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
The user `karl' is already a member of `sudo'.

然后我注销并重新登录并尝试使用需要 root 权限的命令:

karl@i-dev:~$ docker ps -a
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json?all=1: dial unix /var/run/docker.sock: connect: permission denied

但是,我却没有被允许。为什么我没有被授予root访问我的系统的权限?

答案1

您的用户不会root因为成为该组的成员而自动获得权力sudo。唯一赋予的是能力运行sudo并通过代理获得 root 访问权限。

Docker 正在寻找以下两者之一:具有 root 级别权限的用户(因此只有称为 的用户帐户root,可以用 模仿sudo)或属于该组的成员的用户docker

如果您想在没有的情况下运行 Docker sudo,最好docker使用以下命令将您的用户添加到组中:

sudo usermod -aG docker $USER

不过,需要注意的是,通过将自己添加到docker组中,您可以创建一个以 root 身份执行的 Docker 容器。如果您授予此容器访问主系统硬盘的权限,则可以有效地获得 root 权限没有 sudo。请仔细考虑,确保这种风险是可以接受的。此外,请确保仅运行受信任/审核的容器。请参阅这里以便更详细地解释可能出现的问题。


至于为什么它就是这样设计的。用户不再只是让其在需要时以 root 身份运行任何命令,而是需要通过 的代理sudo。这可以防止恶意脚本访问你的用户帐户,然后接管整个系统。

它也符合 Linux 的通用“权限隔离”模型。您不必一直以特权用户的身份运行,而是以非特权普通用户的身份进行日常操作,然后可以根据需要升级权限。虽然您全天候运行root,这是高度不建议这样做,因为它可能会很快出错。

如果您想在终端会话的剩余时间内升级为 root 用户,只需运行sudo -isudo -s。 否则,只需使用sudo并保持安全。

相关内容