14.12.3 su命令的使用范例
您可以在百度里搜索“Linux/Unix技术丛书·跟老男孩学Linux运维:核心基础篇(上)(第2版) 艾草文学(www.321553.xyz)”查找最新章节!
14.12.3 su命令的使用范例
若不添加任何参数执行su命令,则表示要切换到root用户,但是这样执行,会遇到一些问题。因为虽然是切换到root用户了,但并没有改变root用户登录后的环境,有些登录的环境设置还是登录前的用户的。生产场景规范的操作方法是“su-”。具体实现请参见下面的实例。
范例14-19:由普通用户oldboy切换到root用户。
[oldboy@oldboy ~]$ whoami #<==当前登录的用户为普通用户oldboy。
oldboy
[oldboy@oldboy ~]$ su root #<==切换用户,若切换的用户为root,则可以省略不写。
Password: #<==这里当然就是root用户的密码了。
[root@oldboy oldboy]# env #<==查看当前登录用户root的环境变量。
USER=oldboy
MAIL=/var/spool/mail/oldboy
PWD=/home/oldboy #<==已经登录到root了,为什么家目录还是/home/oldboy呢?
LOGNAME=oldboy
...省略部分无关内容...
细心的读者应该已经看到了,如果使用su而不加上“-”这个参数,那么切换前的用户的环境信息还会存在,这会引起很多麻烦,甚至还会出现意想不到的结果。因此,切换用户时,最好是“su-用户名”。这是生产场景中标准的切换用户的操作方法。
退出到普通用户重新测试,命令如下:
[root@oldboy oldboy]# exit
[oldboy@oldboy ~]$ su – root #<==第二种切换用户的方式,使用参数“-”,root可省略。
Password:
[root@oldboy ~]# env|egrep "USER|MAIL|PWD|LOGNAME" #<==再次查看环境变量。
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root
这回环境变量的内容都已经切换到root下了,这里需要提醒一下的是,不只是切换到root,切换到其他用户也是一样。
从上面的范例可以得出如下结论。
• “su用户名”虽然能够切换到对应用户,但是登录后的环境变量信息有些还是切换前用户的环境变量信息。
• “su-用户名”不但能切换到相应的用户,还能将登录后的环境变量一并切换,这是标准规范的操作方法。
范例14-20:oldboy用户使用root身份执行命令。
[oldboy@oldboy ~]$ ls -l /root #<==直接在普通用户oldboy下执行命令是不允许的。
ls: /root: Permission denied
[oldboy@oldboy ~]$ su - -c "ls -l /root" #<==这是su的参数组合,表示切换到root用户,并且改变到root环境,然后列出root家目录的文件,最后退出root用户。
Password: #<==在这里输入root的密码,注意,这与后文要讲的sudo是有区别的。
total 52
-rw------- 1 root root 899 Oct 22 23:32 anaconda-ks.cfg
-rw-r--r-- 1 root root 23789 Oct 22 23:32 install.log
-rw-r--r-- 1 root root 3609 Oct 22 23:32 install.log.syslog
范例14-21:如何让系统在每次开机时自动以普通用户身份启动指定服务脚本?
[root@oldboy ~]# tail -1 /etc/rc.local #<==在开机启动文件/etc/rc.local中写入启动命令。
su - oldboy -c '/bin/sh /service/scripts/deploy.sh' #<==以普通用户身份执行脚本,但并不是在用户的下面。
提示:除此之外还有很多方法,例如,可以进入到普通用户下再执行该脚本。
通过普通用户运行服务是一个很好的提升系统安全性的办法,在生产环境中,大多数服务都可以通过普通用户启动(不使用特权端口),而不用root用户启动。这样就可以使系统的安全性又提高一个等级,同时使用普通户管理就可以了,管理者不需要具有root权限。 Linux/Unix技术丛书·跟老男孩学Linux运维:核心基础篇(上)(第2版)