给Linux服务器普通账号添加root权限

一台Linux服务器M上的一个普通账号a,想获得root账号的权限。我听到的有以下两种表述:
表述一:XX管理员,请帮忙给机器M下账号a添加root权限;
表述二:XX管理员,请帮忙给机器M下账号a添加sudo权限;

这里想探讨的是root权限和sudo权限那种说法更准确。
按照《鸟哥Linux私房菜》中的说法,我们一般用普通账号登陆系统,有需要进行系统维护或软件更新时才转到root的身份来操作。由此可见,添加root权限的说法更准确。

0、添加root权限。

# visudo编辑/etc/sudoers文件更安全,格式错误保存的时候会有提示。用vim/vi没有格式错误提示。
visudo /etc/sudoers
...省略...
# 找到下面这行
root  ALL=(ALL) ALL
# 加上下面的指令就OK了
salmonl        ALL=(ALL)       NOPASSWD: ALL

1、切换到root权限。

sudo -s

2、谁可以添加root权限
用root账号登录的用户
添加过root权限的普通用户【之前以为不可以,实际验证可以】

3、后记,一个小插曲。
一次升级gcc版本到4.8,通过devtoolset-2工具安装gcc到这个目录/opt/rh/devtoolset-2/root/usr/bin/,然后建立软链

ll /opt/rh/devtoolset-2/root/usr/bin/* /usr/local/bin/
gcc -v
gcc version 4.8.2 20140120 (Red Hat 4.8.2-15) (GCC)

升级gcc成功,但是下一次登陆服务器后切换到root权限,切换不了了

[chuanbo7@241 ~]$ sudo -s
/var/tmp/sclpY7yvB: line 8: -s: command not found

Google了半天也没有相关的问题,心里大概知道跟gcc的升级有关,于是查看gcc安装目录下果然有sudo。也就是有两个可执行程序sudo, 发现直接使用/usr/bin/sudo就能解决问题,但是根本原因是啥?这就涉及到优先级问题了。分析如下:

# 查看当前sudo的执行路径
[chuanbo7@241 ~]$ which sudo
/usr/local/bin/sudo
# 查看全部sudo执行路径
[chuanbo7@241 ~]$ whereis sudo
sudo: /usr/bin/sudo /etc/sudo.conf /usr/local/bin/sudo /usr/share/man/man8/sudo.8.gz
# 查看环境变量中配置的执行路径
[chuanbo7@241 ~]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/chuanbo7/bin

以上可知/usr/local/bin路径在/usr/bin前面,优先级高,故而默认使用/usr/local/bin/sudo。知道原因了,如果想正常切换到root权限,有好多种方法:

  • 可以执行/usr/bin/sudo -s
  • 加alias
  • 加软链
  • 其实命令执行完整优先级:alias > 内部命令> hash > $PATH。 分析可以参考这里

    至于/usr/local/bin/sudo为啥无法切换,还需要深入研究。

    4、小结
    解决了一个问题,很多时候并不是找到了原因。找原因,并找到原因的价值往往大于解决问题。解决问题是为了公司,找到原因是为了自己。

    参考:
    《鸟哥Linux私房菜基础版》第14章Linux账号管理-用户身份切换(P426)

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注