第8章:管理本地端主机之使用者与群组(二)

前言

在上一章节中,笔者讲解了一般使用者的资讯、储存密码还有群组等基本概念,本章节继续延伸上一章节的概念,继续讲解作业系统上的使用者概念与管理。

得到超级使用者权限

什麽是超级使用者?所谓的超级使用者指的是,整个Linux作业系统中,最高权限的使用者,而这个最高权限使用者只有一个,就叫做root,这个使用者可以存取所有作业系统上的任何动作与事情,像是存取所有的档案系统,机器的操作等。

切换使用者

我们可以使用su指令来切换使用者,相关的指令执行方式如下:

[rockylinux@workstation ~]$ su - rockylinux
Password:
[rockylinux@workstation ~]$ exit
logout

从上面的指令执行的讯息可以知道,首先先用su - rockylinux切换到名为rockylinux的使用者,接着输入密码,当输入密码成功且正确无误之後,则可以进入到rockylinux的这个使用者并进入指定的Shell中,以及进入到一开始的指定家目录为开始的工作目录,上述这些都是定义在/etc/passwd之档案里面,接着就可以输入与执行各式各样的指令,当执行完指令之後,输入exit则就离开这个shell了,就会回到本来的使用者的shell了,如果使用下列的方式切换使用者,则会进入到root使用者,即超级使用者,相关指令执行的方式与结果如下:

[rockylinux@workstation ~]$ su -
Password:
[root@workstation ~]#

上述的操作是在workstation虚拟机器上面完成的,而这台虚拟机器的root使用者密码为:rocky,而利用上述这样的方式,便可以进入到root这个使用者了,同时上述的指令也等价於su - root,那要注意一点就是,su rootsu - root这两个指令都是切换使用者,但是切换後的使用者模式与行为会不太相同,前者指的是切换使用者过去,但是使用者相关的环境变数仍是之前切换前的使用者的,後者指的是完全的切换使用者,包含使用者的环境变数等都一并切换过去,相关的指令执行後的行为比较如下面的输出文字讯息:

[rockylinux@workstation ~]$ su root
Password:
[root@workstation rockylinux]# pwd
/home/rockylinux
[root@workstation rockylinux]# echo $USER
rockylinux
[root@workstation rockylinux]# exit
exit
[rockylinux@workstation ~]$ su - root
Password:
[root@workstation ~]# pwd
/root
[root@workstation ~]# echo $USER
root
[root@workstation ~]#

从上面的指令输出,笔者相信差别不难看出,就不言而喻了。

使用sudo来执行指令

前面的小节介绍了有关於切换使用者并切换到超级使用者root,那一般来说,这样对於使用者很不方便,因为有可能一般的使用者在存取主机的时候,执行指令的需要,有时候需要有root使用者权限才得以执行,基本上系统管理者可以协助一般使用者做到,那有没有其他的方式也可以让一般使用者自己做到呢?答案是有的,那就是sudo这个指令,那这个意思是,让一般使用者暂时取得root使用者权限并使用root使用者的权限执行sudo後面的指令,在使用者建立的时候,预设都不会有sudo指令可以使用,需要做一些设定才可以做到,在Rocky Linux、CentOS与RedHat等Linux发行版本作业系统中,主要有两种方式可以将一般使用者设定成可以使用sudo指令,相关的方法如下列表:

  • 将使用者加入到wheel群组中:这个群组是一个特殊的使用者群组,当作业系统安装好之後便会存在,当一般的使用者加入到这个群组之後,便可以有执行sudo的指令权限了。
  • 设定sudo之设定档案:可以建立一个设定档案并存放到/etc/sudoers.d/之目录底下。
  • 使用visudo指令编辑sudo相关的设定档,这个方式笔者不建议,原因是这是属於底层的sudo设定档,若不熟悉语法的话,很容易将整个sudo设定档案改到有问题进而影响整个作业系统的运作与功能,因此笔者在这边建议:凡事要设定sudo相关的指令,可以使用上述的两个指令即可。

设定sudo设定档案

假设要将rockylinux加入到可以使用sudo命令的话,第一种方式就是将此使用者加入到wheel群组,相关的执行指令输出讯息如下:

[root@workstation ~]# gpasswd -a rockylinux wheel
Adding user rockylinux to group wheel
[root@workstation ~]# cat /etc/group | grep wheel
wheel:x:10:rockylinux

从上述的指令可以知道,这里使用了gpasswd指令并搭配-a参数使用者以附加的方式加到wheel之群组中,接着用cat指令将/etc/group档案印出并搭配pipeline与grep指令找到目前wheel群组相关的资讯,就可以发现rockylinux使用者已经顺利加入进去,并可以使用sudo命令了,而更多的gpasswd指令用法会在後面的章节提到,另外一个方法则是编写一个档案叫做rockylinux并存放到/etc/sudoers.d/之目录底下,相关的用法如下:

[root@workstation ~]# echo "rockylinux ALL=(ALL) ALL" > /etc/sudoers.d/rockylinux
[root@workstation ~]# gpasswd -d rockylinux wheel
Removing user rockylinux from group wheel
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo -i
[sudo] password for rockylinux:
[root@workstation ~]# cat /etc/sudoers | grep wheel
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
# %wheel        ALL=(ALL)       NOPASSWD: ALL
[root@workstation ~]#

从上面的执行指令结果输出来看,首先先使用echo这个指令将rockylinux ALL=(ALL) ALL这个指令印出,并重新导向输出并用覆盖的方式到/etc/sudoers.d/rockylinux档案中,这个设定指的是,rockylinux这个使用者可以利用sudo执行任何的指令,若是要指定成群组的话则可以改成:%group ALL=(ALL) ALL,而意思就会变成只要是这个群组的使用者,便可以使用sudo指令执行任何命令,在这个设定下,一开始使用sudo指令都需要输入当前使用者的密码进行验证,之後执行sudo有5分钟的时间都不用再输入使用者,当时间到期之後,便要再次输入使用者密码。接着为了要测试sudo功能是否已经设定给rockylinux,所以先用gpasswd指令并搭配-d之参数将rockylinux使用者从wheel群组移出,接着离开root使用者之shell,回到rockylinux使用者,接着使用sudo -i,暂时取得root使用者权限并进入到互动式模式,即shell模式,就可以看到已经成功进入到root使用的shell了,同时使用cat /etc/sudoers | grep wheel指令来解释为什麽wheel这个群组能够让加入到里面的使用者使用sudo的原因了。
若一般使用者无法使用sudo指令的话,则会看到下列的讯息:

[rockylinux@workstation ~]$ sudo -i
[sudo] password for rockylinux:
rockylinux is not in the sudoers file.  This incident will be reported.
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$

若是将rockylinux ALL=(ALL) ALL设定改成rockylinux ALL=(ALL) NOPASSWD: ALL,则是在使用sudo指令的时候,都不需要输入当前使用者的密码做验证了,相关的执行指令输出讯息如下:

[rockylinux@workstation ~]$ su - root
Password:
[root@workstation ~]#
[root@workstation ~]# echo "rockylinux ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/rockylinux
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo -i
[root@workstation ~]#

笔者在这边不建议使用rockylinux ALL=(ALL) ALL这类指令设定使用者使用sudo,原因是因为这样就会变成创立一个另一个root使用者出来,造成管理上的问题也容易有资安上的问题,为了要解决这个问题,可以限缩使用者使用sudo的范围,比如说指定rockylinux可以用sudo来执行cat这个指令,相关的指令与设定方式如下:

[rockylinux@workstation ~]$ su - root
Password:
[root@workstation ~]# echo "rockylinux ALL=(ALL) /bin/cat" > /etc/sudoers.d/rockylinux
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo -i
[sudo] password for rockylinux:
Sorry, user rockylinux is not allowed to execute '/bin/bash' as root on workstation.
[rockylinux@workstation ~]$ sudo cat /etc/sudoers.d/rockylinux
[sudo] password for rockylinux:
rockylinux ALL=(ALL) /bin/cat
[rockylinux@workstation ~]$

设定成rockylinux ALL=(ALL) /bin/cat便可以只允许rockylinux使用者只能够使用sudo指令执行cat指令,而接下来的执行指令也应证了这个设定,若有更多的指令则可以使用逗号隔开并加入到/bin/cat之後面。若要允许只能执行指定的一行指令也是可以的,相关的设定与执行的讯息如下:

[rockylinux@workstation ~]$ su -
Password:
[root@workstation ~]# echo "rockylinux ALL=(ALL) /bin/cat /etc/sudoers.d/rockylinux" > /etc/sudoers.d/rockylinux
[root@workstation ~]# logout
[rockylinux@workstation ~]$ sudo cat /etc/passwd
Sorry, user rockylinux is not allowed to execute '/bin/cat /etc/passwd' as root on workstation.
[rockylinux@workstation ~]$ sudo cat /etc/sudoers.d/rockylinux
rockylinux ALL=(ALL) /bin/cat /etc/sudoers.d/rockylinux

课後练习

  • 请使用su指令切换使用者并变成root使用者,接着再回到rockylinux使用者,root使用者密码为:rocky
  • rockylinux可以完整的使用sudo指令,请使用至少一种方法达成这样的设定。
  • 为了安全性与管理,假设你是系统管理者,请将rockylinux使用者只能够使用sudo指令来执行/usr/bin/cat/usr/bin/grep指令。
  • 观念题:使用sudo方式暂时取得root权限後,建立的目录与档案或是复制档案,其拥有者是root还是执行sudo之使用者?

<<:  【第二十四天 - Floyd-Warshall介绍】

>>:  [Day14] 初见碰撞系统

[Day 04] 测试驱动开发

接下来要讨论的问题是, 什麽时候开始写测试, 很多人会觉得应该在整个软件开发完之後开始写测试, 但是...

Dungeon Mizarka 016

调整ActivityLog 今天花了时间调整ActivityLog,也就是画面上方秀出讯息的地方。原...

LINE JP 电脑版 个别视窗 聊天室 变成 半透明

LINE JP 电脑版 个别视窗 聊天室 变成 半透明 如何改回来 拉动上面那个 就回来了 #3小姐...

Day10 | Dart 非同步 - async/awiat

Async/Awiat 在Dart中我们可以使用 async 来代表这是一个非同步的function...

Day34 ( 电子元件 ) 小夜灯 ( 光敏电阻 )

小夜灯 ( 光敏电阻 ) 教学原文参考:小夜灯 ( 光敏电阻 ) 虽然 micro:bit 有内建侦...