在上一章节中,笔者讲解了一般使用者的资讯、储存密码还有群组等基本概念,本章节继续延伸上一章节的概念,继续讲解作业系统上的使用者概念与管理。
什麽是超级使用者?所谓的超级使用者指的是,整个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 root
与su - 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 ~]#
从上面的指令输出,笔者相信差别不难看出,就不言而喻了。
前面的小节介绍了有关於切换使用者并切换到超级使用者root,那一般来说,这样对於使用者很不方便,因为有可能一般的使用者在存取主机的时候,执行指令的需要,有时候需要有root使用者权限才得以执行,基本上系统管理者可以协助一般使用者做到,那有没有其他的方式也可以让一般使用者自己做到呢?答案是有的,那就是sudo这个指令,那这个意思是,让一般使用者暂时取得root使用者权限并使用root使用者的权限执行sudo後面的指令,在使用者建立的时候,预设都不会有sudo指令可以使用,需要做一些设定才可以做到,在Rocky Linux、CentOS与RedHat等Linux发行版本作业系统中,主要有两种方式可以将一般使用者设定成可以使用sudo指令,相关的方法如下列表:
wheel
群组中:这个群组是一个特殊的使用者群组,当作业系统安装好之後便会存在,当一般的使用者加入到这个群组之後,便可以有执行sudo的指令权限了。/etc/sudoers.d/
之目录底下。visudo
指令编辑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
指令来执行/usr/bin/cat
与/usr/bin/grep
指令。
<<: 【第二十四天 - Floyd-Warshall介绍】
接下来要讨论的问题是, 什麽时候开始写测试, 很多人会觉得应该在整个软件开发完之後开始写测试, 但是...
调整ActivityLog 今天花了时间调整ActivityLog,也就是画面上方秀出讯息的地方。原...
LINE JP 电脑版 个别视窗 聊天室 变成 半透明 如何改回来 拉动上面那个 就回来了 #3小姐...
Async/Awiat 在Dart中我们可以使用 async 来代表这是一个非同步的function...
小夜灯 ( 光敏电阻 ) 教学原文参考:小夜灯 ( 光敏电阻 ) 虽然 micro:bit 有内建侦...