3.7-3.9 su和sudo命令


3.7 su命令

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

语法
su(选项)(参数)
选项
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份; 

-f或——fast:适用于csh与tsch,使shell不用去读取启动文件; 

-l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量; 

-m,-p或--preserve-environment:变更身份时,不要变更环境变量; 

-s或--shell=:指定要执行的shell; 

--help:显示帮助; 

--version;显示版本信息。
参数
用户:指定要切换身份的目标用户。
实例
  • 变更帐号为root并在执行ls指令后退出变回原使用者:
    su -c ls root
  • 变更帐号为root并传入-f选项给新执行的shell:
    su root -f
  • 变更帐号为test并改变工作目录至test的家目录:
    su -test


3.9 sudo命令

用su是可以切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那岂不是系统非常的不安全?没有错,为了改进这个问题,产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用 visudo 命令去编辑相关的配置文件/etc/sudoers. 如果没有visudo这个命令,请使用 yum install -y sudo 安装。

默认root能够sudo是因为这个文件中有一行 “root ALL=(ALL) ALL” 在该行下面加入 “test ALL=(ALL) ALL” 就可以让test用户拥有了sudo的权利。使用 “visudo” 命令编辑/etc/sudoers配置文件,它的操作方法和 “vi” 命令使用方法是一样的,按 ‘i’ 进入编辑模式,编辑完成后,按 “Esc” ,再输入 ”:wq” 完成保存。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       ALL
此时可以验证一下test账户的权限了。
[root@localhost ~]# su test
[test@localhost root]$ ls
ls: 无法打开目录.: 权限不够
[test@localhost root]$ sudo ls

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for test:
123  456  789  anaconda-ks.cfg  dirb  install.log  install.log.syslog  test  test1  test2  test3
由于切换到test账户后的当前目录依旧是在/root 下,test账户没有任何权限,所以 ‘ls’ 的时候提示说权限不够,然而使用 sudo ls 输入test账户自身的密码后就有权限了。初次使用sudo 时会有上面的一大段提示,而后再次使用sudo 命令则不再提示。
如果每增加一用户就设置一行,这样太麻>烦了。所以你可以这样设置。把 “# %wheel ALL=(ALL) ALL” 前面的 ‘# ‘ 去掉,让这一行生效。它的意思是,wheel这个组的所有用户都拥有了sudo的权利。接下来就需要你把想让有sudo权利的所有用户加入到wheel这个组中即可。
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
配置文件/etc/sudoers包含了诸多配置项,可以使用命令 man sudoers 来获得帮助信息。
只允许使用普通账户登陆,而普通账户登录后,可以不输入密码就能sudo切换到root账户。如下配置:
[root@localhost ~]# visudo
然后在文件的最后面加入三行:
User_Alias USER_SU = test, test1, gaohanwei
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD: SU
保存配置文件后,使用test, test1, gaohanwei 三个账户登陆Linux后,执行命令 sudo su - 切换到root账户,获取root账户的所有权利。
[root@localhost ~]# su - test
[test@localhost ~]$ sudo su -
[root@localhost ~]# whoami
root

PS:如果不想让root很简单的直接登录,我们就可以使用keypass工具来保存记录一个很复杂的密码。


3.9 不允许root远程登录linux

/etc/ssh/sshd_config为sshd服务的配置文件,默认允许root账户通过ssh远程登录linux。要想不允许root用户远程登录linux,具体操作方法如下:
修改配置文件/etc/ssh/sshd_config,在文件中查找#PermitRootLoginyes并修改为PermitRootLogin no。保存配置文件后,需要重启sshd服务,如下:

#systemctl restart sshd.service

这种方法只适用于通过ssh远程登录Linux的情况。


转载于:https://blog.51cto.com/13530586/2055008