Linux之su、sudo

su命令

作用是切换用户

su的优缺点;
su 的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;

  • `su - username :从当前用户切换到某用户
[root@xxlinux-02 ~]# su testx
[testx@xxlinux-02 root]$ pwd
/root
[testx@xxlinux-02 root]$ exit
[root@xxlinux-02 ~]# su - testx
上一次登录:三 6月 28 22:06:03 CST 2017pts/0 上
[testx@xxlinux-02 ~]$ pwd
/home/testx

-的作用是彻底切换(包括用户配置文件、环境变量等)

  • su - -c “touch /tmp/xx.123" username :在不切换到某用户的情况下以某用户身份执行touch命令
[root@xxlinux-02 ~]# su - -c "touch /tmp/test.txt" testx
[root@xxlinux-02 ~]# ls -ld /tmp
drwxrwxrwt. 8 root root 189 6月  28 22:16 /tmp
[root@xxlinux-02 ~]# ls -l /tmp
总用量 0
drwx------. 3 root  root  17 6月  28 19:59 systemd-private-32488dfe1eb4462ba166e3a341e81a7a-vmtoolsd.service-y0gMIC
-rw-rw-r--. 1 testx testx  0 6月  28 22:16 test.txt

-c :指定以某用户身份来执行某个命令

  • su -:普通用户切换到 root 用户 (需要root用户密码)

  • 在某用户没有家目录的情况下使用 su - username ,以user02为例

1.切换到 user02 ,提示没有user02的家目录

[root@xxlinux-02 ~]# su - user02
上一次登录:三 6月 28 22:11:15 CST 2017pts/0 上
su: 警告:无法更改到 /home/user02 目录: 没有那个文件或目录
-bash-4.2$ 登出
  1. 为user02创建家目录,更改家目录所属主和所属组,这个时候 /home/user02 下没有任何文件
 [root@xxlinux-02 ~]# id user02
uid=1004(user02) gid=1004(user02) 组=1004(user02)
[root@xxlinux-02 ~]# mkdir /home/user02
[root@xxlinux-02 ~]# chown user02:user02 /home/user02
[root@xxlinux-02 ~]# ls !$
ls /home/user02
[root@xxlinux-02 ~]# ls -la !$
ls -la /home/user02
总用量 0
drwxr-xr-x. 2 user02 user02  6 6月  28 22:22 .
drwxr-xr-x. 6 root   root   57 6月  28 22:22 ..
  1. 复制一份配置文件到 /home/user02 下,然后切换到user02 后即可
[root@xxlinux-02 ~]# cp /etc/skel/.bash* /home/user02
[root@xxlinux-02 ~]# ls -la /home/user02
总用量 12
drwxr-xr-x. 2 user02 user02  62 6月  28 22:30 .
drwxr-xr-x. 6 root   root    57 6月  28 22:22 ..
-rw-r--r--. 1 root   root    18 6月  28 22:30 .bash_logout
-rw-r--r--. 1 root   root   193 6月  28 22:30 .bash_profile
-rw-r--r--. 1 root   root   231 6月  28 22:30 .bashrc
[root@xxlinux-02 ~]# su - user02
上一次登录:三 6月 28 22:19:32 CST 2017pts/0 上
[user02@xxlinux-02 ~]$ 

sudo命令

让普通用户临时使用指定用户(通常为root用户)的身份去执行命令

sudo 的适用条件:
  由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
  通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
  sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权

例如:

当使用普通用户时:

[user02@xxlinux-02 ~]$ ls /root
ls: 无法打开目录/root: 权限不够

可以通过sudo命令来实现,编辑sudo配置文件,如下:

visudo :编辑sudo的配置文件 /etc/sudoers.tmp (这个命令的好处是可以检测语法错误)

:set nu 显示行号

找到

## Allow root to run any commands anywhere  (允许root用户在任何地方执行任何命令)
                 root    ALL=(ALL)       ALL

如果想让 user02 也有 root 同样的权限,需要在下面加上一条规则,保存退出

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user02  ALL=(ALL)       ALL
   1) user02 表示需要拥有权限的用户
   2) 第一个 ALL 表示在任何环境下
   3) 第二个 ALL 表示user02获得任何用户的权限
   4) 第三个 ALL 表示所有命令

如果需要多个命令,命令需要绝对路径,且用“ ,”隔开,“,”后还需要空格,然后使用 ‘ sudo /usr/bin/ls /root ' 就可以了(这里的命令可以不用绝对路径)

第一次使用时需要输入当前用户密码

[user02@xxlinux-02 ~]$ sudo ls /root

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 user02: 

如果不想输入密码,则需要修改如下:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user02  ALL=(ALL)       NOPASSWD: /usr/bin/ls, /usr/bin/cat

限制root用户远程登陆

让普通用户拥有切换到root用户的权限

1.给普通用户做一个别名 visudo --> User_Alias ADSL= testx, user01, user02

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
User_Alias ADSL = testx, user01, user02

2.添加规则,保存退出

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ADSL    ALL=(ALL)       NOPASSWD: /usr/bin/su

3.普通用户切换到root

[root@xxlinux-02 ~]# su - testx
上一次登录:三 6月 28 22:16:40 CST 2017pts/0 上
[testx@xxlinux-02 ~]$ sudo su - root
上一次登录:四 6月 29 23:03:40 CST 2017从 192.168.242.1pts/0 上
[root@xxlinux-02 ~]# 

如何限制root远程登录:

  1. vi /etc/ssh/sshd_config

  2. 找到 #PermitRootLogin yes 改为 PermitRootLogin no

  3. 重启ssh服务 systemctl restart sshd_service 即完成限制

posted @ 2017-09-19 23:56  指环王Raul  阅读(299)  评论(0编辑  收藏  举报