su命令



1、su命令简介

功 能:切换当前用户身份到其他用户身份,变更时需输入所要变更到用户的帐号与密码。

语 法:su    [选项]    [参数]

补 充: 普通用户直接su,切换到root用户;

选项:

-c:以要切换用户的身份执行一条指令,执行完指定的指令后,即恢复原来的身份;

参 数:



2、切换用户

#su - username

#su username

ctrl + d=exit

# su -colin和# su colin相比,多了一个 - ,- 的作用是切换到coin用户的时候可以完全切换到colin用户,并且有- 的切换到colin用户后会直接切换到用户的家目录,初始化当前用户的环境变量。而没有加 - 的则会仍然在root目录下,其环境变量加载的不完整;

ctrl + d可以登出当前用户,等同于exit命令;

[root@colinlinux ~]# su - colin
[colin@colinlinux ~]$ whoami
colin
[colin@colinlinux ~]$ pwd
/home/colin
[colin@colinlinux ~]$ ls -la
总用量 16
drwx------. 2 colin colin  83 11月  2 06:17 .
drwxr-xr-x. 9 root  root   97 11月  1 07:11 ..
-rw-------. 1 colin colin  18 11月  2 06:18 .bash_history
-rw-r--r--. 1 colin colin  18 8月   3 2016 .bash_logout
-rw-r--r--. 1 colin colin 193 8月   3 2016 .bash_profile
-rw-r--r--. 1 colin colin 231 8月   3 2016 .bashrc

[colin@colinlinux ~]$ 登出
[root@colinlinux ~]# su colin
[colin@colinlinux root]$ whoami
colin
[colin@colinlinux root]$ pwd
/root
[colin@colinlinux root]$ ls -la
ls: 无法打开目录.: 权限不够



3、root用户su和普通用户su

root用户可以不用输入密码就直接切换到普通用户,但是普通用户切换到其他普通用户或者普通用户切换到root用户都是需要输入密码才能切换成功的。

 

[root@colinlinux ~]# su - colin
上一次登录:四 11月  2 06:29:30 CST 2017pts/2 上
[colin@colinlinux ~]$ id
uid=1000(colin) gid=1000(colin) 组=1000(colin) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


[user2@colinlinux ~]$ su - user2
密码:
上一次登录:四 11月  2 06:32:30 CST 2017pts/2 上
[user2@colinlinux ~]$ id
uid=1001(user2) gid=1010(group3) 组=1010(group3),1001(user2) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


[user2@colinlinux ~]$ su - root
密码:
su: 鉴定故障



4、以其他用户身份执行命令

#su - -c "命令" username

以要切换用户的身份执行一条指令,执行完指定的指令后,即恢复原来的身份。

注意:一共两个短横杠,su后面的-,-c前面的-不要忘记,可以保证彻底切换,防止出错;

注意:-c 后面的命令,需要用“”双引号括起来;

查看当前用户是root

[root@colinlinux ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

通过#su - -c "命令" username 命令创建/tmp/colin.txt文件,结果提示 user /tmp/aming.111 does not exist,因为用-c "命令"的时候,命令需要用“”双引号括起来,否则touch后面的目录或者文件名会被人为是用户名字;

id命令查看当前用户仍是root用户,说明执行完命令后立即又切换回了原来用户;

 

 

[root@colinlinux ~]# su - -c touch /tmp/colin.txt colin
su: user /tmp/colin.txt does not exist
[root@colinlinux ~]# su - -c "touch /tmp/colin.txt" colin
[root@colinlinux ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

创建完毕后查看/tmp/colin.txt的属性,文件的所有者是colin,所属组是colin。

 

[root@colinlinux ~]# ls -l /tmp/
总用量 4
-rw-rw-r--. 1 colin colin   0 11月  2 06:46 colin.txt
-rwx------. 1 root  root  836 10月 18 14:29 ks-script-4YL0zX
drwx------. 3 root  root   17 10月 19 06:00 systemd-private-0bce7e12c186488ab2690b2b5111395a-vmtoolsd.service-gju9XE
drwx------. 3 root  root   17 10月 18 14:46 systemd-private-507d7dcaa36549c7bdf8ce538f9cd4a4-vmtoolsd.service-BsBiAG
drwx------. 3 root  root   17 10月 18 20:38 systemd-private-91c6308734f642988598c0e23c3d657e-vmtoolsd.service-bWuvP7
drwx------. 3 root  root   17 10月 20 07:48 systemd-private-ca9f63b46bdc4c66bab494c627e26368-vmtoolsd.service-f5FLYu
drwx------. 3 root  root   17 10月 22 20:24 systemd-private-e1ad1a578c924f49be04609f92a37786-vmtoolsd.service-tJ1hfL
drwxrwx---. 3 root  root   45 10月 29 21:07 test1
-rw-------. 1 root  root    0 10月 18 14:26 yum.log



5、su相关故障排除

切换到colin用户,以普通用户colin的身份切换到user5用户,结果失败;

[root@colinlinux ~]# su - colin
上一次登录:四 11月  2 06:57:04 CST 2017pts/2 上
[colin@colinlinux ~]$ su - user5
密码:
su: 鉴定故障

然后查看user5用户是不是被锁定了,但是当前是colin用户,以colin普通用户的身份当然是不能查看shadow文件的;

接着切换到rooot用户去查看shadow文件;

 

然后就发现,user5用户密码段有两个叹号!!,说明user5用户没有设置密码,被锁定了;

所以需要给user5用户创建密码,当前是root用户,可以直接给user5设置密码;

 

 

 

 

[colin@colinlinux ~]$ tail /etc/shadow
tail: 无法打开"/etc/shadow" 读取数据: 权限不够
[colin@colinlinux ~]$ su
密码:
[root@colinlinux colin]# tail -n 3 /etc/shadow
user2:$6$mExurBM8$V3eth9GmkFDOE6HaYmO6T1vvn2SeUBGrND33pFQfiJcJO3Tdit4IoRARPXaOllvoIX6M6mbwX7IleUcKzDEwE0:17471:0:99999:7:::
user3:!!:17468:0:99999:7:::
user5:!!:17471:0:99999:7:::
[root@colinlinux colin]# passwd user5
更改用户 user5 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@colinlinux colin]# tail -n 3 /etc/shadow
user2:$6$mExurBM8$V3eth9GmkFDOE6HaYmO6T1vvn2SeUBGrND33pFQfiJcJO3Tdit4IoRARPXaOllvoIX6M6mbwX7IleUcKzDEwE0:17471:0:99999:7:::
user3:!!:17468:0:99999:7:::
user5:$6$MJQV5vrw$sPuYA691FFLacjpJ8SDSH9UR8TSt.DWLrg5lQYkztV35LUJ1zzYGXjL8PR5EjtggTB1QujniY0cRDRjyfIBqb0:17471:0:99999:7:::
[root@colinlinux colin]# exit

切换到colin用户,以普通用户colin的身份切换到user5用户,结果发现虽然切换到了普通用户user5,但是却不正常。

su: 警告:无法更改到 /home/user5 目录: 没有那个文件或目录。

查看/home/目录,发现真的没有user5用户家目录;

打印当前路径,发现是在coin用户的家目录还;

查看家目录,发现没有user5用户的家目录,切换回root用户在passwd中看到,user5用户的家目录确实是在/home,路径是/home/user5,所以user5用户要么是创建的时候没有创建家目录,要么是家目录被删除了。

 

 

[colin@colinlinux ~]$ su - user5
密码:
最后一次失败的登录:四 11月  2 06:58:02 CST 2017pts/2 上
最有一次成功登录后有 1 次失败的登录尝试。
su: 警告:无法更改到 /home/user5 目录: 没有那个文件或目录
-bash-4.2$ id
uid=1005(user5) gid=1011(user5) 组=1011(user5) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
-bash-4.2$ ls /home/
colin  user2  user3
-bash-4.2$ pwd
/home/colin
-bash-4.2$ 登出
[colin@colinlinux ~]$ 登出
[root@colinlinux ~]# tail -n 3 /etc/passwd
user2:x:1001:1010::/home/user2:/bin/bash
user3:x:1004:1005::/home/user3:/bin/bash
user5:x:1005:1011::/home/user5:/bin/bash
[root@colinlinux ~]#

想要正常登录,就需要给user5用户补全相关文件;

 

首先给查看user5用户的所有者和所属组,分别是user5和user5。

然后我们知道他的家目录是/home/user5,那就给user5创建家目录;

[root@colinlinux ~]# id user5
uid=1005(user5) gid=1011(user5) 组=1011(user5)
[root@colinlinux ~]# mkdir /home/user5
[root@colinlinux ~]# ls -l /home/
总用量 0
drwx------. 2 colin colin  83 11月  2 06:17 colin
drwx------. 2 user2 group3 83 11月  2 06:34 user2
drwx------. 2 user3 group2 62 10月 30 07:51 user3
drwxr-xr-x. 2 root  root    6 11月  2 07:18 user5
[root@colinlinux ~]# chown user5:user5 /home/user5/
[root@colinlinux ~]# ls -ld /home/user5
drwxr-xr-x. 2 user5 user5 6 11月  2 07:18 /home/user5

修改完毕后再次切换到user5发现还是不正常;

[root@colinlinux ~]# su - user5
上一次登录:四 11月  2 07:09:27 CST 2017pts/2 上
-bash-4.2$ 
-bash-4.2$

切换到root用户,对比查看colin用户和user5用户的家目录发现,colin用户的家目录比user5用户的家目录多出几个。bash开头的文件(这几个文件其实就是用户需要的配置文件),user5用户家目录还缺少配置文件。

-bash-4.2$ su 
密码:
[root@colinlinux user5]# ls -la /home/colin/
总用量 16
drwx------. 2 colin colin  83 11月  2 06:17 .
drwxr-xr-x. 6 root  root   58 11月  2 07:18 ..
-rw-------. 1 colin colin 121 11月  2 07:15 .bash_history
-rw-r--r--. 1 colin colin  18 8月   3 2016 .bash_logout
-rw-r--r--. 1 colin colin 193 8月   3 2016 .bash_profile
-rw-r--r--. 1 colin colin 231 8月   3 2016 .bashrc
[root@colinlinux user5]# ls -la /home/user5
总用量 0
drwxr-xr-x. 2 user5 user5  6 11月  2 07:18 .
drwxr-xr-x. 6 root  root  58 11月  2 07:18 ..
[root@colinlinux user5]#

普通用户家目录配置文件模版位置/etc/skel/

然后到/etc/skel/中把几个配置文件拷贝到user5家目录下,拷贝完了,这几个文件的所有者和所属组还是root用户,需要更改文件的所有者和所属组都变成user5。

 

[root@colinlinux user5]# ls -la /etc/skel/
总用量 24
drwxr-xr-x.  2 root root   62 10月 18 14:27 .
drwxr-xr-x. 77 root root 8192 11月  2 07:00 ..
-rw-r--r--.  1 root root   18 8月   3 2016 .bash_logout
-rw-r--r--.  1 root root  193 8月   3 2016 .bash_profile
-rw-r--r--.  1 root root  231 8月   3 2016 .bashrc
[root@colinlinux user5]# cp /etc/skel/.bash* /home/user5
[root@colinlinux user5]# ls -la /home/user5
总用量 12
drwxr-xr-x. 2 user5 user5  62 11月  2 07:25 .
drwxr-xr-x. 6 root  root   58 11月  2 07:18 ..
-rw-r--r--. 1 root  root   18 11月  2 07:25 .bash_logout
-rw-r--r--. 1 root  root  193 11月  2 07:25 .bash_profile
-rw-r--r--. 1 root  root  231 11月  2 07:25 .bashrc
[root@colinlinux user5]# chown -R /home/user5
chown: "/home/user5" 后缺少操作数
Try 'chown --help' for more information.
[root@colinlinux user5]# chown -R user5:user5 /home/user5
[root@colinlinux user5]# ls -la /home/user5
总用量 12
drwxr-xr-x. 2 user5 user5  62 11月  2 07:25 .
drwxr-xr-x. 6 root  root   58 11月  2 07:18 ..
-rw-r--r--. 1 user5 user5  18 11月  2 07:25 .bash_logout
-rw-r--r--. 1 user5 user5 193 11月  2 07:25 .bash_profile
-rw-r--r--. 1 user5 user5 231 11月  2 07:25 .bashrc
[root@colinlinux user5]#

改完之后再次以普通用户colin登录user5,发现正常了。

[root@colinlinux user5]# su - colin
上一次登录:四 11月  2 06:57:45 CST 2017pts/2 上
[colin@colinlinux ~]$ su - user5
密码:
上一次登录:四 11月  2 07:20:09 CST 2017pts/2 上
[user5@colinlinux ~]$



sudo命令



1、sudo命令简介

功 能:用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中可以进行相关的配置,设置用户可以用sudo命令 以哪些用户的身份 执行哪些指令;若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

语 法:sudo(选项)(参数)

补 充: 可以用来管理普通用户的权限,防止普通用户获取过多的root权限;

参 数:

 



2、visudo命令

用来打开并编辑sudo的配置文件/etc/sudoers,用visudo编辑可以检查出编辑这个文件的时候的语法错误,如果用vi直接编辑,就没法检测数来,所以不要用vi去编辑。

visudo用法和vi一样。

用 visudo 命令打开后在屏幕下方发现,实际编辑的是/etc/sudoers。

su打开ruby控制台_python

vi命令,显示行号用:set nu 可以让打开的文件每行前面显示行号;

所以visudo也是用:set nu显示行号;

直接输入:set nu即可;

su打开ruby控制台_bash_02

下面是配置文件中至关重要的一行,表示:允许root用户 运行任何命令 在任何路径;

## Allow root to run any commands anywhere

root     ALL=(ALL)     ALL

colin    ALL=(root)     /usr/bin/ls, /usr/bin/cat

colin,这里可以是用户,可以是用户组;

ALL=(root):想要让coiln用户拥有root用户的身份,括号里面表示前面的用户可以拥有哪个用户的身份;

/usr/bin/ls, /usr/bin/cat 想要让用户aming可以root用户身份执行的命令,这里必须写绝对路径,格式也不能错。

90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL
     92 
     93 colin   ALL=(root)      /usr/bin/ls, /usr/bin/cat

配置完成后,:wq,保存退出;

切换到su - colin切换到colin用户,ls /root/ 查看root目录提示权限不够,因为colin是普通用户;

用sudo ls /root/ 就可以查看root目录下的内容了,第一次执行命令需要输入当前用户的密码。

[colin@colinlinux ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[colin@colinlinux ~]$ 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 colin: 
anaconda-ks.cfg
[colin@colinlinux ~]$ sudo ls /root/
anaconda-ks.cfg
[colin@colinlinux ~]$

在sudoers配置文件中添加NOPASSWD: 可以让用户在执行命令的时候不需要输入密码;

切换到colin用户,再使用sudo命令就不用再输入密码了。

90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL
     92 
     93 colin   ALL=(root)      NOPASSWD:       /usr/bin/ls, /usr/bin/cat
[root@colinlinux ~]# visudo
[root@colinlinux ~]# su - colin
上一次登录:四 11月  2 07:53:35 CST 2017pts/1 上
[colin@colinlinux ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[colin@colinlinux ~]$ sudo ls /root/
anaconda-ks.cfg
[colin@colinlinux ~]$

sudoers中有很多地方可以设置别名,

## Host Aliases 用来设置主机别名

## User Aliases 用来设置用户别名

## Command Aliases 用来设置命令别名

## Networking 是系统设置的一些网络相关的配置;

su打开ruby控制台_bash_03

设置 /usr/bin/ls, /usr/bin/cat命令的别名是COLIN_CMD

Cmnd_Aliases COLIN_CMD= /usr/bin/ls, /usr/bin/cat

然后再把给colin用户的配置换成COILN_CMD,就可以等同于 /usr/bin/ls, /usr/bin/cat

su打开ruby控制台_bash_04

su打开ruby控制台_普通用户_05

使用visudo命令,编辑sudoers时候编辑如果有问题会提示,如下,而vi /etc/sudoers就不会;

[root@colinlinux ~]# visudo
visudo:>>> /etc/sudoers:syntax error 在行 25 附近<<<
现在做什么?visudo
选项有:
  重新编辑 sudoers 文件(e)
  退出,不保存对 sudoers 文件的更改(x)
  退出并将更改保存到 sudoers 文件(危险!)(Q)

现在做什么?e
[root@colinlinux ~]# su - colin
上一次登录:四 11月  2 07:58:12 CST 2017pts/1 上
[colin@colinlinux ~]$ id
uid=1000(colin) gid=1000(colin) 组=1000(colin) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[colin@colinlinux ~]$ sudo ls /root/
anaconda-ks.cfg
[colin@colinlinux ~]$

sudoers中还可以对用户组,也就是多个用户进行相关配置操作;

su打开ruby控制台_python_06



限制root远程登录

限制root用户远程登录,只允许普通用户远程登录;

普通用户登录完成后允许su切换到root用户;

 

在sudoers配置文件中设置用户别名变量;

su打开ruby控制台_普通用户_07

su打开ruby控制台_bash_08

su打开ruby控制台_python_09

这样就可以让普通用户不需要命令就可以直接切换到root用户了。

su打开ruby控制台_bash_10

打开配置文件sshd_config,

su打开ruby控制台_python_11

找到#PermitRootLogin yes,改为#PermitRootLogin no,表示不允许root用户登录。

su打开ruby控制台_普通用户_12

记得去掉前面的注释符号,井号#,否则命令不会生效。

su打开ruby控制台_bash_13

改完配置文件后重启sshd的服务;

su打开ruby控制台_bash_14

这时候不管是密码还是ssh,root用户都不能登录了。

su打开ruby控制台_python_15

通过普通用户aming,密码登录到主机;

su打开ruby控制台_bash_16

然后用ls查看root目录下的文件,发现权限不够;

用su切换到root用户,又不知道root用户的密码;

这时候因为刚刚设定过,aming用户在通过sudo命令执行su命令的时候可以有所有用户的权限,并且不需要输入密码。所以可以直接通过

sudo su - root

直接切换到root用户,而且不需要密码;

就可以以root用户的身份进行操作了。