详细讲解Linux切换用户su指令误区

1.背景

为了安全起见,通常在Linux环境下进行的一般作业建议使用一般账号

这是因为root账号的权限过于庞大,常常会因为不小心的误操作导致系统错误,严重了还会致使系统瘫痪、崩溃。


因此建议只有在需要时才切换到root账号下进行相关操作。

su是Linux环境下切换用户的操作指令


2.su指令

很多朋友在使用该指令时,往往使用如下形式:

例:从一般账号moonlit切换到root账号

$ su


那么这么做有什么不对的地方么?

我们这就来观察下账号切换前后的数据对比。

[moonlit@host ~] $

切换前执行下列语句,查看环境中包含moonlit的变量:

$ env | grep ‘moonlit‘

屏幕显示如下:

USER=moonlit
MAIL=/var/spool/mail/moonlit
PATH=/usr/java/jdk1.7.0_60/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/moonlit/bin
PWD=/home/moonlit
HOME=/home/moonlit
LOGNAME=moonlit


执行切换:

$ su

Password:

输入密码后屏幕转换为:

[root@host ~] #

输入#pwd查看当前路径

/home/moonlit

咦,怎么还是在moonlit账号的家目录下?

再输入# env | grep ‘moonlit‘

屏幕输出:

USER=moonlit
PATH=/usr/java/jdk1.7.0_60/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/moonlit/bin
MAIL=/var/spool/mail/moonlit
PWD=/home/moonlit
LOGNAME=moonlit


看到了吧?环境木有变啊。

因为没有改变成root的环境,可能造成很多root指令错误或者无效哦。


想要完全转换用户到root可以用如下指令:

[moonlit@host ~]$ su -

键入root密码后变为[root@host ~]#

#pwd一下:

/root

# env | grep ‘moonlit‘一下:

神马都没有哦。

# env一下:

这时候屏幕会将变量全部显示出来,比较多,不一一列举了,可以看到当前的家目录、PATH、MAIL等等已经全部却换为root的变量了。


最后,你可以下达#exit来退出当前root用户返回moonlit。


3.总结

其实没有-的时候系统是按照non-login shell的方式切换用户的,

而加上-时,系统是按照login shell切换的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。