临时提升用户权限有什么用呢?
比如说,我现在有一个程序,需要监听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
# chmod +w /etc/sudoers
之后再查看sudoers文件的属性,root已经具备了写的权限了
那么就来改改配置吧。
在进行配置之前,先要了解下配置的命令格式是什么样的(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,有啥问题提出来,咱一起讨论讨论呗,憋着多难受!
好了,谢谢!