功 能:切换当前用户身份到其余用户身份,变动时需输入所要变动到用户的账号与密码。linux
语 法:su [选项] [参数]bash
补 充: 普通用户直接su,切换到root用户;网络
选项:ssh
-c:以要切换用户的身份执行一条指令,执行完指定的指令后,即恢复原来的身份;ui
参 数:spa
#su - username
#su username
ctrl + d=exit
# su -colin和# su colin相比,多了一个 - ,- 的做用是切换到coin用户的时候能够彻底切换到colin用户,而且有- 的切换到colin用户后会直接切换到用户的家目录,初始化当前用户的环境变量。而没有加 - 的则会仍然在root目录下,其环境变量加载的不完整;3d
ctrl + d能够登出当前用户,等同于exit命令;code
[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: 没法打开目录.: 权限不够
root用户能够不用输入密码就直接切换到普通用户,可是普通用户切换到其余普通用户或者普通用户切换到root用户都是须要输入密码才能切换成功的。orm
[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: 鉴定故障
#su - -c "命令" username
以要切换用户的身份执行一条指令,执行完指定的指令后,即恢复原来的身份。three
注意:一共两个短横杠,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
切换到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 ~]$
功 能:用来以其余身份来执行命令,预设的身份为root。在/etc/sudoers中能够进行相关的配置,设置用户能够用sudo命令 以哪些用户的身份 执行哪些指令;若其未经受权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,以后有5分钟的有效期限,超过时限则必须从新输入密码。
语 法:sudo(选项)(参数)
补 充: 能够用来管理普通用户的权限,防止普通用户获取过多的root权限;
参 数:
用来打开并编辑sudo的配置文件/etc/sudoers,用visudo编辑能够检查出编辑这个文件的时候的语法错误,若是用vi直接编辑,就无法检测数来,因此不要用vi去编辑。
visudo用法和vi同样。
用 visudo 命令打开后在屏幕下方发现,实际编辑的是/etc/sudoers。
vi命令,显示行号用:set nu 可让打开的文件每行前面显示行号;
因此visudo也是用:set nu显示行号;
直接输入:set nu便可;
下面是配置文件中相当重要的一行,表示:容许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 是系统设置的一些网络相关的配置;
设置 /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
使用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中还能够对用户组,也就是多个用户进行相关配置操做;
限制root用户远程登陆,只容许普通用户远程登陆;
普通用户登陆完成后容许su切换到root用户;
在sudoers配置文件中设置用户别名变量;
这样就可让普通用户不须要命令就能够直接切换到root用户了。
打开配置文件sshd_config,
找到#PermitRootLogin yes,改成#PermitRootLogin no,表示不容许root用户登陆。
记得去掉前面的注释符号,井号#,不然命令不会生效。
改完配置文件后重启sshd的服务;
这时候不论是密码仍是ssh,root用户都不能登陆了。
经过普通用户aming,密码登陆到主机;
而后用ls查看root目录下的文件,发现权限不够;
用su切换到root用户,又不知道root用户的密码;
这时候由于刚刚设定过,aming用户在经过sudo命令执行su命令的时候能够有全部用户的权限,而且不须要输入密码。因此能够直接经过
sudo su - root
直接切换到root用户,并且不须要密码;
就能够以root用户的身份进行操做了。