侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 377 篇文章
  • 累计创建 136 个标签
  • 累计收到 12 条评论

目 录CONTENT

文章目录

Linux普通用户添加sudo权限,su/sudo详解

孔子说JAVA
2022-12-27 / 0 评论 / 0 点赞 / 87 阅读 / 4,310 字 / 正在检测是否收录...

sudo是Unix/Linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部root命令的一个工具。Linux系统下,为了安全,一般我们操作都是在普通用户下操作,但是有时候普通用户需要使用root权限,比如在安装软件的时候。这个时候如果我们切回root用户下效率就会比较低,所以用sudo命令就会很方便。“Sudo” 是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab, /etc/samba/smb.conf 等。这样不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。

  • 我们一般不会使用root账户去操作我们系统,root在Linux中有至高无上的权利
  • 我们一般会开通一个普通用户的权限并赋予sudo的权限
  • 普通用户在操作系统时可临时提权

1、sudo的特点及适用条件

1.1 sudo的特点

sudo扮演的角色注定了它要在安全方面格外谨慎,否则就会导致非法用户攫取root权限。同时,它还要兼顾易用性,让系统管理员能够更有效,更方便地使用它。sudo设计者的宗旨是:给用户尽可能少的权限但仍允许完成他们的工作。所以,sudo有以下特点:

  1. sudo能够限制指定用户在指定主机上运行某些命令。
  2. sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器。
  3. sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers。
  4. sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码。

1.2 sudo的适用条件

由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。

通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su;另外 sudo 是需要授权许可的,所以也被称为授权许可的su;

sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;

1.3 su 命令和 sudo 命令的区别

1.3.1 su 命令与 su - 命令区别

su 账户名称 是切换到其他用户,但是不切换环境变量(比如说那些 export 命令查看一下,就知道两个命令的区别了)。如果 su 后面不加账户时系统默认为root账户,需要输入目标用户的密码。

image-1671068570484

image-1671068595656

su - 账户名称 是完整的切换到一个用户环境。如果后面不加账户时系统默认为root账户,输入目标用户密码后,切换为目标用户,pwd目录变为/root;

image-1671068549741

所以建议大家切换用户的时候,尽量使用 su - root,否则可能发现某些命令执行不了,从超级用户 root 变成普通用户,输入 exit 命令即可。

1.3.2 su 命令与 sudo 命令区别

相比于su切换身份需要对方用户的密码,sudo只是需要自己的密码,就可以以其他用户的身份来执行命令,但用户必须在sudoers中!。

通过 sudo,我们能把某些 root 账号拥有的权限针对性的赋权给普通用户,并且不需要普通用户知道 root 密码。所以 sudo 相对于权限无限制性的 su 来说,还是比较安全的,因此 sudo 被称为受限制的 su 或授权许可的 su。

内容不同:

  • su命令:用来切换用户,substitute英文含义“代替”的意思。
  • sudo命令:sudo为superuser do 的简写,即使用超级用户来执行命令,一般是指root用户。

用法不同:

  • su命令:不加用户名默认是切换为root用户,切当前目录不改变,其他环境变量不变。
  • sudo命令: 查看当前用户可以用sudo执行的命令都有哪些。

环境不同:

  • su命令:切换到root用户,但是并没有转到root用户家目录下,即没有改变用户的环境。
  • sudo命令:是当前用户切换到root,然后以root身份执行命令,执行完成后,直接退回到当前用户,而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。

两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。

2、安装并配置sudo

Linux系统默认没有安装sudo命令,sudo命令的作用是可以让非root用户具有管理员的权限,用户需要的话可以手动安装。sudo这个安装包很小,不到1M,安装过程如下:

  1. 首先打开终端使用命令切换到root管理员用户(如果当前是root用户请忽略):
su root
  1. 执行安装sudo命令:
# Debian、Ubuntu系统下的安装命令
apt-get install sudo

# RedHat、CentOS、Fedora系统下的yum命令
yum install sudo

安装后,就可以给您的帐号设置管理员权限了。安装过程图如下:

image-1671065729654

  1. 使用命令修改文件(设置管理员权限的方法):

配置 sudo 必须通过编辑 /etc/sudoers 文件,而且只有超级用户才可以修改它,还必须使用 visudo 编辑。之所以使用 visudo 有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用 visudo 来检查一下语法。

visudo 默认的是在 vi 里打开配置文件,用 vi 来修改文件。我们可以在编译时修改这个默认项。visudo 不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理。

vim /etc/sudoers

找到root ALL=(ALL:ALL) ALL这一行,在此行下方新增一行(注:这里的username就是您要给予一定权限的用户):

username    ALL=(ALL:ALL) ALL

username ALL=(ALL) ALL 

image-1671066787698

然后保存,退出root,之后使用username用户登陆。该用户就有sudo权限了。

上述命令中的各参数说明:

  • 第一列:username,用户账号;
  • 第二列:ALL,指登陆者来源主机,我们可以将它改成具体的主机名,它指明 username 用户可以在此主机上(ALL表示所有)执行后面的命令;(可以通过 hostname 命令来查看本台 linux 机器的主机名);
  • 第三列:括号中的ALL,指目标用户,即以谁的身份去执行命令,ALL主要表示root身份;
  • 第四列:ALL,指命令名,即代表授权命令为所有命令。
  • 想免除密码输入加上NOPASSWD:

以上语句表示 username 和 root 拥有一样的权限,什么命令都可以使用,这样的话,对于系统来说太不安全了,最好只设置需要的权限,如让 username 用户只可以执行某些命令(例:ifconfig 和 ls),在 sudoers 文件中写入以下一行:

username hostname=    /sbin/ifconfig,   /bin/ls
  1. 不输入密码的配置

在 crt 上输入命令查看:

[username@localhost ~]$ sudo ls /root
PassWord:

此时的问题是:登录后,每次使用 sudo 还要输入密码。若是使用 sudo 命令时不想输入密码,这样修改配置文件:

username localhost=NOPASSWD:     /bin/cat, /bin/ls

再次用 sudo cat 或是 sudo ls 命令时,就不会提示输入密码了。

注意:有的时候你将用户设了nopasswd,但是不起作用,原因是被后面的group的设置覆盖了,需要把group的设置也改为nopasswd。

joe ALL=(ALL) NOPASSWD: ALL
%admin ALL=(ALL) NOPASSWD: ALL

3、创建新用户并添加sudo权限过程

下面是linux系统下一个完整的创建新用户并添加sudo权限的过程及命令:

  1. 创建普通用户并修改密码
# 创建用户
useradd -m -s /bin/bash dbuser

# 修改密码
passwd dbuser
Changing password for user dbuser.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

# 直接修改密码脚本
echo <password> | sudo passwd <username> --stdin  &>/dev/null
echo 12345678 | passwd dbuser --stdin
  1. 添加sudo权限

方法一: 添加用户至wheel组, CentOS里面wheel具有sudo权限。

# usermod -G wheel dbuser

切换到该用户

# su -l dbuser
[dbuser@cheery-boots-1 ~]$ 

方法二(推荐): 修改/etc/sudoers

image-1671069154732

① 使用root用户登录系统,首先修改文件/etc/sudoers的写权限(默认为只读,增加写的权限)

chmod 640 /etc/sudoers

② 使用vim编辑文件/etc/sudoers

vim /etc/sudoers

③ 在root后面增加用户名和ALL,这里新增用户为test用户

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       ALL

④ wq保存,并将/etc/sudoers改为只读

chmod 440 /etc/sudoers

添加完成后,visudo -cf /etc/sudoers 命令可以测试配置是否正确。

image-1671069443765

  1. 测试

切换到test用户,已经可以查看root权限的文件了,当然你也可以执行sudo -i测试。

image-1671069602745

image-1671069650993

0

评论区