今天我们讲一个切换用户的命令su,用法很简单su - user1就可以切换到user1用户,或者我们可以使用su - -c "touch /etc/123" user1以user1的身份运行这个命令
,普通用户也可使用此命令切换到另一用户,但需输入密码
,若所切换的用户无家目录,则会显示-bash-4.2$前缀
,那么如何解决呢?我们可以给它创建一个家目录 mkdir /home/user2然后chown user2:user2 /home/user2,然后将/etc/skel/.bash*拷贝到/home/user2里去,然后chown -R user2:user2 /home/user2更改一下所有文件的所属组主,然后我们切换到此用户就正常了。
我们再讲一下sudo命令,为了更加安全,它可以让普通用户临时用root的身份去执行一条命令,我们可以使用visudo命令看一下/etc/sudoers.tmp配置文件,不建议直接使用vi编辑,因为它检测不到语法错误。我们找到root ALL=(ALL) ALL它表示允许root用户在任何地方运行所有命令,我们模仿着再写一行,比如user1 ALL(在哪里)=(ALL)(用户) ALL(所有命令,或者指定几个命令的绝对路径,/usr/bin/ls,/usr/bin/mv,/usr/bin/cat),然后保存退出,然后我们可以切到user1试一下,sudo ls /root/,然后会提示输入user1的密码,如果在使用不想输入密码可以在visudo时这样添加user1 ALL=(ALL) NOPASSWD: /usr/bin/ls,/usr/bin/mv,/usr/bin/cat这样就不会提示输入密码了
。这个文件还有很多别的用法比如主机别名组,用户别名组以及命令别名组,我们以命令别名组来做例子:Cmnd_Alias BIEMING_CMD = /usr/bin/ls,/usr/bin/mv,/usr/bin/cat,上面就可以换一下了,直接打别名就可以了
。
接下来我们讲一下小知识点,我们在工作环境中可能由于安全原因,不会直接使用root来远程登录服务器,首先我们要限制root用户远程登录的功能,vi /etc/ssh/ssh_config,找到PermitRootLogin这一行,把前面的#去掉,把yes改成no,之后重启服务,systemctl restart sshd.service ,然后root就无法远程登陆了,我们可以把su这个命令放到sudo的允许列表里去,user1 ALL=(ALL) NOPASSWD:/usr/bin/su,这样user1就可以使用sudo su - 临时切换到root身份下了。
扩展
sudo与su比较 http://www.apelearn.com/bbs/thread-7467-1-1.html
sudo配置文件样例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers
sudo -i 也可以登录到root吗? http://www.apelearn.com/bbs/thread-6899-1-1.html