CentOS使用sudo临时提升用户权限

时间:2022-08-19 14:58:43

临时提升用户权限有什么用呢?

比如说,我现在有一个程序,需要监听80端口或其他低于1024的端口(普通用户只能监听1024以上的端口),或者需要用到某些特殊权限,但是我又不想使用root来运行,毕竟root权限太高了,使用root来运行程序会导致程序具备最高权限,对系统安全性有一定的影响。

那这时候我们就需要使用sudo命令,来临时提升普通用户的权限了。

sudo是什么?

sudo就是Linux下能够将普通用户的权限提升到超级用户的权限,使得普通用户具有部分或者全部超级用户命令的工具。这种做法在一定程度上提高了系统的安全性。

但是,在CentOS中默认是没有为除了root用户之外的其他用户提供sudo命令来临时提升用户的权限的,当我们执行sudo命令来进行提权的时候,会提示权限不足(Permission denied),那这样的话,我们应该怎么做呢?

为普通用户配置sudo

sudo命令的配置文件是放在/etc/sudoers,那么我们就可以通过修改这个文件来对用户进行配置了

使用su命令切换到root用户,再使用命令查看下root对于配置文件的权限(用linux的个人习惯,可以不用这样做)

# ls -al /etc/sudoers

CentOS使用sudo临时提升用户权限

可以发现默认安装的CentOS并没有为root提供写的权限(阿里云基本配置1核1G40G的ECS安装的CentOS实例则直接具备写权限),那我们来提升下权限先

# chmod +w /etc/sudoers
之后再查看sudoers文件的属性,root已经具备了写的权限了

CentOS使用sudo临时提升用户权限
那么就来改改配置吧。

在进行配置之前,先要了解下配置的命令格式是什么样的(sudoers文件的88行左右可以看到)

user MACHINE = COMMANDS

这是啥意思呢?

user: 表示用户名或者组名,组名称一定要使用%开头

MACHINE: 表示一个或者几个主机名

COMMANDS: 表示需要进行提权的命令,只有在这里的命令才能被用来进行sudo提权,这里可以加命令参数

sudoers文件看到的语法格式一般是上面这种形式的,但使用时,一般是另一种形式:

user MACHINE=RUN_AS COMMANDS

多了个RUN_AS,表示的是作为哪个用户运行,基本上这个选项会加括号(取值基本为root或者ALL),说了那么多,举个例子吧

eg:what ALL = (ALL) ALL 

意思就是允许what用户在所有的机器上以所有的用户运行所有的命令,(好多所有,有点懵)

eg: what ALL = (ALL) cat

意思是允许what用户在所有机器上以所有用户运行cat命令,这下只有cat命令能用sudo进行提权了


说了那么多,那我们来试试呗(好像,试过了,不管了,再来)

root用户在命令行输入visudo命令进行编辑配置文件

注:一般不会使用vi/vim来进行编辑/etc/sudoers文件,因为使用vi/vim进行编辑,系统并不会对我们做出的修改进行语法检查,而使用visudo命令虽然也是用vi/vim编辑/etc/sudoers文件,但系统会在我们进行保存时对文件进行语法检查

翻到文件最后一行,假设要为sam用户进行配置,则增加如下命令:

sam ALL = (ALL) ALL
直接为sam赋予所有权限的提权,或者有特殊需求可以自己进行配置

接下来保存,这样就可以使用sudo命令为普通用户提权了

注:保存之后文件立即生效,不需要重新启动系统
恩,这样基本上系统的所有命令都能够使用了

那有的同学就会遇到这样的问题,我现在为我的Linux系统安装了Node(手动安装),也照着上面的步骤来改了,但是,执行sudo node的时候却会提示找不到命令,这是什么东西?不是说好按照上面的步骤进行配置就可以了吗??这是耍我们吗??

淡定淡定。。。

这个问题,我们需要多加几个步骤才能解决

还是编辑/etc/sudoers文件(还是需要用root账号进行修改,毕竟我们只增加了root的写权限),在文件的第67行左右,将

Defaults    env_reset 改为Defaults    !env_reset
然后保存退出

接着退出root,使用普通用户登录,编辑~/.bashrc

在~/.bashrc文件中增加一行命令

alias sudo='sudo env PATH=$PATH'
保存退出,使用source命令使~/.bashrc文件立即生效

接下来,恩,好了,浪吧,sudo node命令已经可以使用了,这样,就算之后新安装(手动安装)的其他命令,也可以直接使用sudo来提权而不至于找不到了(当然,前提是/etc/sudoers文件里面配置的ALL命令,而不是特定命令)


恩,以上,OK,有啥问题提出来,咱一起讨论讨论呗,憋着多难受!

好了,谢谢!