我运行了以下命令并建立了终端会话:
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 -i
或sudo -s
。 否则,只需使用sudo
并保持安全。