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$ 登出
- 为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 ..
- 复制一份配置文件到 /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远程登录:
-
vi /etc/ssh/sshd_config
-
找到 #PermitRootLogin yes 改为 PermitRootLogin no
-
重启ssh服务 systemctl restart sshd_service 即完成限制