【原创】Linux 为用户添加 sudo 权限

前言

1、概要

相信很多人都从很多渠道听说过一些人生建议,那就是在操作与运维 Linux 的时候,不到万不得已造成不要使用 root 用户。

那么问题来了,有时候安装某些系统级的工具或者插件,它是需要 root 用户的,不然就会有如下报错。

$ apt install unzip
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

那么可不可以实现普通用户执行 root 用户权限的命令或者操作呢?答案是当然可以,那就是使用 sudo。

本文将以 ubuntu 18.04.4 为示例,演示如何给普通用户添加 sudo 权限。

2、相关环境

  • Ubuntu 18.04.4

  • apt 1.6.12ubuntu0.1 (amd64)

  • sudo 1.8.21p2-3ubuntu1.3

3、注意事项

(1) 确认 sudo 命令已安装

正常情况下,大部分的操作系统发行版,云主机 VPS 安装时都自动安装了 sudo 命令,但如果是嵌入式或者精简版系统,则可能没有安装 sudo。

如果系统中执行 sudo 提示命令没找到,如下是 docker 运行的 ubuntu 容器中没有 sudo 命令的情况:

root@7332021ab3e8:/# sudo
bash: sudo: command not found

使用 root 用户安装 sudo 即可

#  apt update; apt install -y sudo

(2) 操作用户

本文的操作必须是 root 用户或者是具备 sudo 权限的另一个用户。

正文

为一个普通用户添加 sudo 权限有多种方法,下面介绍常见的几种。

1、该用户还没创建

可以在创建用户时添加 sudo 权限,只需要在创建该用户时添加 -G sudo 参数即可为该用户添加 sudo 权限。

useradd username -G sudo [-options]

示例:

root@7332021ab3e8:/# useradd test -G sudo -U -m -s /bin/bash
root@7332021ab3e8:/# 
root@7332021ab3e8:/#
root@7332021ab3e8:/# passwd test
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@7332021ab3e8:/#
root@7332021ab3e8:/#
root@7332021ab3e8:/# id test
uid=1002(test) gid=1002(test) groups=1002(test),27(sudo)
root@7332021ab3e8:/#
root@7332021ab3e8:/#
root@7332021ab3e8:/# su - test
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
test@7332021ab3e8:~$
test@7332021ab3e8:~$
test@7332021ab3e8:~$ sudo apt install unzip
[sudo] password for test: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  zip
The following NEW packages will be installed:
  unzip
0 upgraded, 1 newly installed, 0 to remove and 27 not upgraded.
Need to get 167 kB of archives.
After this operation, 558 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu bionic/main amd64 unzip amd64 6.0-21ubuntu1 [167 kB]
Fetched 167 kB in 1s (132 kB/s) 
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package unzip.
(Reading database ... 4101 files and directories currently installed.)
Preparing to unpack .../unzip_6.0-21ubuntu1_amd64.deb ...
Unpacking unzip (6.0-21ubuntu1) ...
Setting up unzip (6.0-21ubuntu1) ...

可以看到,test 的用户的所属组里已经有了 sudo 用户。也可以使用 sudo apt install unzip 来安装软件了。

注:

添加了 sudo 权限的用户在执行 sudo 命令时,默认需要输入该用户的密码(如 test 用户的密码),请确保已经为该用户创建了用户密码,Linux 下刚创建的用户是没有设置密码的。不建议使用 -p PASSWORD 进行设置,除非你知道怎么使用它~

2、该用户已经创建

首先确认该用户是否有 sudo 权限

test@7332021ab3e8:~$ sudo apt install unzip
test is not in the sudoers file.  This incident will be reported.

执行如下命令 test 添加 sudo 权限。

# usermod test -G sudo

注意

(1) 执行此命令的用记必须是 root 用户或者另一个已经具有 sudo 权限的用户

(2) 上面两种方法都是给普通用户添加了一个 sudo 用户组即获得了 sudo 命令权限。

3、其他方法

关于 sudo 权限的配置文件,默认位于 /etc/sudoers,我们也可以通过修改配置文件,为我们自己创建的用户或者用户组添加 sudo 权限。

注:以下的配置方法都是不推荐的,除非必要建议使用前两种方法。

(1) 为单个用户配置 sudo 权限

<username> ALL=(ALL:ALL) ALL

示例:

# vim /etc/sudoers

如果你需要你的用户执行 sudo 时不输入密码提示,可以在 /etc/sudoers 文件中这样配置

<username> ALL=NOPASSWD:ALL

示例:

# vim /etc/sudoers

(2) 为特定的用户组设定 sudo 权限

如果要为某个特定的用户组设定 sudo 权限,可以使用如下方式

%test   ALL=(ALL:ALL) ALL

示例

# vim /etc/sudoers

当然也支持设定不需要密码的方式

%test   ALL=NOPASSWD:ALL

示例:

# vim /etc/sudoers

注:由于 sudoers 文件是只读文件,所以保存时需要使用 wq! 或者 x! 的方式强制保存。以上的几处编辑 /etc/sudoers 都是如此。

4、如何删除 sudo 权限呢?

root@7332021ab3e8:/# id test
uid=1002(test) gid=1002(test) groups=1002(test),27(sudo)
root@7332021ab3e8:/#
root@7332021ab3e8:/#
root@7332021ab3e8:/# usermod test -G test
root@7332021ab3e8:/#
root@7332021ab3e8:/#
root@7332021ab3e8:/# id test
uid=1002(test) gid=1002(test) groups=1002(test)

注意:

执行完上面的命令后,sudo 权限对在此之后的 test 用户 session 生效。什么意思呢?也就是说在执行 usermod test -G test 命令之前已经连接到 Linux 系统的用户仍然有 sudo 的权限。对于添加 sudo 权限的操作也是相同的逻辑。

总结

虽然上面写了一大堆,但简单总结一下,如果给一个用户添加 sudo 权限,最常见最简单的做法就是使用 root 权限执行如下命令

usermod <username> -G sudo

不过还有一些需要注意的小坑。比如,执行完成后对于之前已经登录 SSH 的用户会话不生效,需要重新登录才生效。

附录

ubuntu sudo man page:

http://manpages.ubuntu.com/manpages/bionic/man8/sudo.8.html?_ga=2.170850016.1178334296.1604205621-1241273690.1604205621

ubuntu sudoers wiki page:

https://help.ubuntu.com/community/Sudoers?_ga=2.170850016.1178334296.1604205621-1241273690.1604205621

You may also like...

发表评论

电子邮件地址不会被公开。