linux之root用户,以及命令sudo与su

本文指导在Linux新安装系统中无密码设置root用户密码,并介绍su和sudo命令的用法。重点讲解如何通过sudo获取权限,以及在Debian/Ubuntu和RHEL/CentOS/OEL系统中配置sudo权限的方法。强调root用户谨慎使用,提倡使用su和sudo进行权限管理。

虚拟机中linux如何进入root

刚安装好的Linux系统没有设置root用户密码的,设置密码步骤如下

输入 sudo passwd root ,其中root为默认,可省略为 sudo passwd

输入密码,并再次输入确认密码

如果没有sudo权限,需要先取得sudo权限(ubuntu安装后,默认享有),这个后文介绍

修改好密码后,输入 su root 并验证密码,即可切换为root用户。

但是,不建议直接使用root用户!

root用户

Linux 系统中 root 是拥有最高权力的用户,可以在系统中实施任意的行为。

由于root的权限过大,一般情况都不使用它。只有在一些特殊情况下才采用登录root执行管理任务。

一般情况下临时使用root用户的部分权限多采用su和sudo命令。但是

su 与 sudo

参考文章:https://linux.cn/article-8404-1.html

su

su为switch user,即切换用户的简写。

su命令可以在用户之间切换,超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其它任何用户都需要密码验证。

常用命令格式有两种

su - USERNAME(-, -l, --login 三种形式都表示登录l)
su USERNAME

如果不指定USERNAME,默认即为root,所以切换到root的身份的命令即为:su -root或su -,su root或su。

su USERNAME,与su – USERNAME的不同之处如下:

su – USERNAME
切换用户后,同时切换到新用户的工作环境中。
su USERNAME
切换用户后,不改变原用户的工作目录,及其他环境变量目录。

sudo

sudo是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令;

命令格式如下,sudo不带参数默认为sudo -u root ;除了可以切换为root用户,也可以切换为其他用户执行命令。

sudo -u username [operate]

sudo执行命令时,需要输入当前用户的密码,不是-u指定的用户密码,默认保存密码15分钟,可更改为永久保存,但不建议。

sudo命令在被要求输入密码时,你的输入不会有任务显示,默认星号也没,此项也可更改以得到输入反馈。

未提到的具体操作,请参考文章 https://www.howtoforge.com/tutorial/sudo-beginners-guide/

在 Debian/Ubuntu 系统中如何配置 sudo 访问权限?

在基于 Debian 的系统中(如 Debian、Ubuntu 和 LinuxMint),使用下面的三个方法就可以做到。

方法1:在 Linux 中使用 sudo 或 admin 组为普通用户授予超级用户访问权限

sudo 或 admin 是基于 Debian 的系统中的特殊组,它提供额外的权限,可以授权用户像超级用户一样执行受到限制的命令。

如下图所示
在这里插入图片描述
使用命令将用户加入到admin组或者sudo组中

usermod -aG sudo username
usermod -aG admin username

直接修改用户分组文件,将用户加入到admin组或者sudo组中,文件为 /etc/group,查看一下
> mika@ubuntu:/etc$  grep -i sudo /etc/group
输出结果表示sudo组当前用户为mika,lifeng

我们使用 whoami 命令来确认用户是否已经被添加到 sudo 中。

sudo whoami

这个命令提示我们输入密码,如果密码正确,并且该用户在 sudo 组中,终端中会打印出 root。

如果用户不在 sudo 组中,我们会得到一个错误信息说 user is not in the sudoers file。

方法2:修改使用 /etc/sudoers 文件为普通用户授予超级用户访问权限

文件顶部注释内容向我们介绍了,要修改此文件,推荐使用visudo命令,此命令会对修改后的文件做格式检验,能避免错误的修改。

只需要添加如下内容即可,其中username为要赋予权限的用户

username ALL=(ALL) ALL

这里最后一个ALL表示赋予的是所有命令的权限,也可以指定赋予某些权限。关于具体参数以及更多细节暂不做了解。

文末提到了/etc/sudoers.d 目录,我们也可以通过在此目录下创建配置文件来实现用户运行命令的权限,配置文件的内容同上

在 RHEL/CentOS/OEL 系统中配置 sudo 访问权限

大体方法同上,但是用户分组不再是admin以及sudo,而是wheel

略。。。

<think>我们正在处理用户的问题:如何安装nerdctl并配置用户权限以允许创建和使用镜像。 根据引用[3]中的信息,nerdctl是用于containerd的Docker兼容的CLI工具。安装步骤包括下载压缩包并解压到系统路径。 此外,我们需要配置用户权限,使得指定用户能够使用nerdctl并创建镜像。这通常涉及将用户添加到适当的用户组(如containerd或docker组)并配置sudo权限或直接权限。 步骤分解: 1. 下载nerdctl二进制文件并安装到系统路径。 2. 配置用户权限:将用户添加到containerd组(或类似组,具体取决于系统配置)以允许其访问containerd的socket。 3. 配置镜像存储路径的权限(如果需要)。 注意:containerd的socket默认路径为/run/containerd/containerd.sock,其所属组可能是"containerd"或"docker"。我们需要确定当前系统上的组名,并将用户加入该组。 另外,引用[2]提到nerdctl run命令支持--entrypoint参数,说明其兼容性。 根据引用[3]中的安装步骤,我们进行如下操作: 安装nerdctl: wget https://github.com/containerd/nerdctl/releases/download/v0.23.0/nerdctl-0.23.0-linux-amd64.tar.gz tar -xzvf nerdctl-0.23.0-linux-amd64.tar.gz -C /usr/local/bin 然后,配置用户权限: 步骤1:将用户添加到containerd组(假设组名为containerd,但实际可能不同,需要检查) sudo usermod -aG containerd $USER 步骤2:重新登录或使用以下命令使组权限生效: newgrp containerd 步骤3:验证权限:运行 `nerdctl run hello-world` 测试。 但是,需要注意的是,不同的系统可能使用不同的组。有些系统可能使用“docker”组(为了兼容性)。因此,我们需要查看containerd.sock的组。 我们可以通过以下命令查看: ls -l /run/containerd/containerd.sock 如果输出显示组为“containerd”,则我们将用户加入“containerd”组;如果显示为“docker”,则加入“docker”组。 另外,如果用户需要构建镜像(需要写入镜像存储目录),可能还需要设置存储目录的权限。nerdctl默认使用containerd的存储目录,通常由root管理。我们可以通过配置rootless模式来避免权限问题,但这里用户要求的是配置指定用户的权限(非root用户),所以加入组是常见做法。 如果用户需要执行需要root权限的操作(如挂载文件系统等),则可能需要配置sudo。但nerdctl设计为在加入组后,用户可以直接操作,无需sudo。 因此,完整的步骤包括: 1. 安装nerdctl 2. 确定containerd.sock的所属组,并将用户加入该组 3. 重新登录或使用newgrp 4. 测试 另外,如果系统中没有containerd,则需要先安装containerd。但用户的问题中已经提到containerd(引用[3]中提到了containerd),所以我们假设containerd已经安装。 引用[3]中还提到了安装Kubernetes,但用户的问题不涉及,所以我们不展开。 因此,回答如下:</think>### 安装 nerdctl 并配置用户权限 #### 1. **下载并安装 nerdctl** ```bash # 下载 nerdctl 二进制包 wget https://github.com/containerd/nerdctl/releases/download/v0.23.0/nerdctl-0.23.0-linux-amd64.tar.gz # 解压到系统路径 sudo tar -xzvf nerdctl-0.23.0-linux-amd64.tar.gz -C /usr/local/bin ``` 验证安装: ```bash nerdctl --version # 输出版本信息即成功 ``` #### 2. **配置用户权限** 需将用户添加到 `containerd` 组以访问 containerd 服务: ```bash # 创建 containerd 用户组(若不存在) sudo groupadd containerd # 将用户加入组(替换 your_user 为实际用户名) sudo usermod -aG containerd your_user # 修改 containerd.sock 的组权限 sudo chown root:containerd /run/containerd/containerd.sock sudo chmod 660 /run/containerd/containerd.sock ``` **生效步骤**: - 退出当前会话重新登录 - 或执行 `newgrp containerd` 刷新组权限 #### 3. **验证权限配置** ```bash # 测试运行容器 nerdctl run --rm hello-world # 测试镜像操作 nerdctl pull alpine nerdctl images ``` #### 4. **配置镜像存储权限(可选)** 若需允许用户管理自定义镜像存储路径: ```bash # 创建镜像存储目录 sudo mkdir -p /var/lib/containerd/nerdctl-custom sudo chown -R your_user:containerd /var/lib/containerd/nerdctl-custom # 使用指定目录 nerdctl --storage-driver overlay2 --root /var/lib/containerd/nerdctl-custom pull ubuntu ``` ### 关键配置说明 | 配置项 | 作用 | 默认路径/值 | |------------------------|-----------------------------|--------------------------------| | `containerd.sock` 权限 | 控制用户访问 containerd 服务 | `/run/containerd/containerd.sock` | | 用户组 `containerd` | 授权用户操作容器/镜像 | 需手动创建并分配权限 | | 存储目录权限 | 管理自定义镜像存储位置 | 默认由 root 管理 | > **注意**: > - 若遇到 `permission denied` 错误,检查 `containerd.sock` 权限:`ls -l /run/containerd/containerd.sock` > - 非 root 用户无法挂载系统目录(需 sudo 或配置安全策略)[^3] --- ### 相关问题 1. **如何解决 nerdctl 执行时的 `permission denied` 错误?** 2. **nerdctl Docker CLI 的主要兼容性差异有哪些?[^2]** 3. **如何为 nerdctl 配置私有镜像仓库的认证?**
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值