su:切换用户的命令,在root用户下,可以用这个命令来切换。 [root@localhost ~]# su - aming 上一次登录:日 1月 21 20:36:34 CST 2018pts/0 上 [aming@localhost ~]$ 我们可以看到,用户已经从root转换到了aming。我们也可以输入命令id来查看它是谁 [aming@localhost ~]$ id uid=1001(aming) gid=1001(aming) 组=1001(aming) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 还有就是我们在su后面加了一个“-”,它是为了彻底的切换用户,包括它自己的设置,环境变量等等,如果不加“-”,那你会看见它还在/root下。 [root@localhost ~]# su aming [aming@localhost root]$ pwd /root 而加了“-”后你会发现,它已经切换到用户自己的家目录下。 [root@localhost ~]# su - aming 上一次登录:日 1月 21 20:36:34 CST 2018pts/0 上 [aming@localhost ~]$ pwd /home/aming 这样他就会加载自己家目录的配置文件。所以我们以后切换用户的时候一定要加“-”,这样才会切换的彻底。 我们也可以用指定的用户去执行命令 [root@localhost ~]# su - -c "touch /tmp/aming.111" aming [root@localhost ~]# ls -lt /tmp/ |head -n3 总用量 0 -rw-rw-r--. 1 aming aming 0 1月 21 20:49 aming.111 drwx------. 3 root root 17 1月 21 20:12 systemd-private-4bdc2a92b8c349a6b32a5ecb8338ff3a-vmtoolsd.service-1eX2h5 然后我们可以看到用aming用户执行的一个命令。
我么也可以从普通用户切换到普通用户,只要输入要切换用户的密码就行。
[aming@localhost ~]$ su - user5
[user@localhost ~]$ su - user5
密码:
上一次登录:日 1月 21 21:00:19 CST 2018pts/0 上
su: 警告:无法更改到 /home/user5 目录: 没有那个文件或目录
-bash-4.2$
我们可以看到,切换到user5时和其他的用户不一样,这是因为user5的家目录不存在,所以他也没有用户的配置文件可加载,所以才显示成这个样子,那么怎样才能显示正常呢?我们只要给user5添加一个家目录就可以了。
首先我们先用ID命令查看一下user5
-bash-4.2$ id user5
uid=1002(user5) gid=1002(user5) 组=1002(user5)
首先,我们先切换到root用户下,创建user5的家目录
[root@localhost ~]# mkdir /home/user5
然后改变他的所属组和所属主
[root@localhost ~]# chown user5:user5 /home/user5
但是这时候切换还是不行,因为这里面缺少里面的配置文件
[root@localhost ~]# su - user5
上一次登录:日 1月 21 21:33:02 CST 2018pts/0 上
-bash-4.2$
我们只能去其他地方去找配置文件,然后拷贝到user5的家目录下面去,系统有一个模板目录/etc/skel
[root@localhost ~]# ls -la /etc/skel/
总用量 24
drwxr-xr-x. 2 root root 62 12月 14 21:57 .
drwxr-xr-x. 74 root root 8192 1月 21 21:00 ..
-rw-r--r--. 1 root root 18 8月 3 05:11 .bash_logout
-rw-r--r--. 1 root root 193 8月 3 05:11 .bash_profile
-rw-r--r--. 1 root root 231 8月 3 05:11 .bashrc
然后我们拷贝到user5家目录下
[root@localhost ~]# cp /etc/skel/.bash* /home/user5
然后从新改变他的所属组和所属主
[root@localhost ~]# chown -R user5:user5 !$ (这时里面要加-R,因为里面有了文件,!$这是重复上一个命令最后一条的参数)
然后我们再登录就恢复正常了
[root@localhost ~]# su - user5
上一次登录:日 1月 21 21:35:16 CST 2018pts/0 上
[user5@localhost ~]$
root用户可以su到普通用户,那普通用户可以su到root用户下吗?当然可以,只要你知道root的密码就行。 [user@localhost ~]$ su - 密码: 上一次登录:日 1月 21 21:53:48 CST 2018pts/0 上 [root@localhost ~]#
sudo命令,它可以让普通用户用指定的用户权限去执行一条命令,多以root用户居多。 我们先打开配置文件 [root@localhost ~]# visudo(在这里我们不要用vi去打开这个配置文件,因为这是系统很重要的文件,一旦我们用的语法错误,vi是检测不出来的,所以我们要用visudo来打开它) 然后我们向下,找到这一行,这是这个配置文件最核心的一句配置,它的意思是允许root用户在任何地方使用命令,然后我们模仿一下,让aming用户可一个在任何地方执行命令
Allow root to run any commands anywhere
root ALL=(ALL) ALL aming ALL=(ALL) ls,mv,cat 然后输入:wq保存退出 但是系统提示我们有错误
/etc/sudoers: 语法错误 near line 93 <<< 现在做什么? 选项有: 重新编辑 sudoers 文件(e) 退出,不保存对 sudoers 文件的更改(x) 退出并将更改保存到 sudoers 文件(危险!)(Q) 在visudo中有一些使用的范例,可供我们查看。 45 # Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall 我们可以看到,我们要执行的命令必须要输入它的绝对路径,只写一个路径它不知道你的命令在哪里 aming ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat 然后我们保存退出,这样就没问题了 然后我们去aming用户下去ls /root/ [aming@localhost ~]$ ls /root/ ls: 无法打开目录/root/: 权限不够 这时我们就要用sudu这个命令去完成 [aming@localhost ~]$ sudo /usr/bin/ls /root/
我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] aming 的密码: 这时他需要我们输入aming用户的密码,我们输入密码后就可以显示结果了 aming anaconda-ks.cfg 而第二次则不需要输入密码 [aming@localhost ~]$ sudo /usr/bin/ls /root/ aming anaconda-ks.cfg 我们也可以cat一个文件 [aming@localhost ~]$ cat /root/1.txt cat: /root/1.txt: 权限不够 [aming@localhost ~]$ sudo /usr/bin/cat /root/1.txt [aming@localhost ~]$ 这样就可以让普通用户拥有指定几项命令的root用户权限,而不让root用户的密码泄露出去,保证安全。
visudo还有其他的一些用法,我们也可以不输入密码 只要在输入命令的绝对路径前输入NOPASSWD:即可 user5 ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/cat [user5@localhost ~]$ ls /root ls: 无法打开目录/root: 权限不够 [user5@localhost ~]$ sudo ls /root 111.txt 1.txt 2.txt aming anaconda-ks.cfg 这样就可以不输入密码直接使用了