切换命令有两个方法可以用,sudo和su -;su -命令可以切换root但是需要root的密码,sudo需要的是当前用户的密码;因此在多人使用一台主机的时候考虑时候sudo防止root密码泄露;
挨个说一下这两个命令
su:su并不只是用来切换到root的,su可以切换到任何身份
#su [-lm] [-c 命令] [username]
参数说明:
单纯使用-:代表使用login-shell的变量文件读取方式来登录系统,如果使用者名称没有加上去就代表切换到root;
-l:和-类似,但后面需要加上想要切换的目的账号
-m:表示”使用目前的环境设置,而不读取新使用者的配置文件”;
-c:仅进行一次命令,所以-c后面可以加上命令(因为不加c的情况下,登陆完成了需要完成的操作之后要exit的,而-c 命令,就执行这一次命令,之后就自动退出了,无需exit)
这里说明一下可登录shell和非登录shell的变量读取方法的区别:
如果原本的身份是aaa,使用non-login shell的方式变成root也就是直接使用su,输入密码之后发现提示字符的目录是aaa如果使用id命令查询,发现user还是aaa,同时mailbox也是aaa,PWD也是aaa;但是UID和GID都是0,也就是说你的权限是root的权限了,但是环境变量还是原先账号的环境变量;
如果使用登录式的方法切换到root就不会这样,各种环境变量会随着切换而变化;
sudo;这个命令可以说是我接触的最早的一个Linux命令了,我上大二的时候用ubuntu装b,学会的第一条命令就是sudo apt-get;
sudo这个命令好就好在他不需要root账号的密码,使用sudo只需要知道当前账号的密码就可以了,这可以防止过多人拿到root的账号密码去搞事……
sudo还有参数…我第一次知道
sudo [-b] [-u 新使用者账号]
-b 将后续命令放到后台让系统自行执行,而不予目前的shell产生印象;
-u 后面可以接想要切换的使用者,如果没有此项则切换到root;
然而其实并不是所有账号都可以用sudo命令的,仅有规范到/etc/sudoers里的用户才拥有这个权力;如果希望某个用户拥有使用sudo的权利,就需要先使用root以visudo的方式修改/etc/sudoers,方法如下:
1.单一用户可以使用root的所有命令,与sudoers文件语法
实现这个目标有两种做法,第一种是直接修改/etc/sudoers,例如允许aaa使用所有root
#visudo
……
root ALL=(ALL) ALL
aaa ALL=(ALL) ALL <=添加这行
……
以root这行为例说明这几个栏位的意义:
1.用户账号:操作系统的哪个账号可以使用sudo命令
2.登录者的来源主机名:这个账号由哪台主机连接到本Linux主机,默认是ALL,即root可以来自于任何一台网络主机
3.(可切换的身份):可以切换的账号列表,默认root可以切换成任何人
4.可执行的命令:默认root可以执行任何命令
2.按照第一个方法,可以设置某个账号可以使用sudo,但是一个一个加太麻烦了,所以还是看一下第二种方法吧:
同样是使用visudo
#visudo
……
%wheel ALL=(ALL) ALL
……
这个%wheel的意思为”用户组”
在经过这个设置之后任何加入wheel这个用户组的用户,就可以使用sudo;
3.当然这还没完,因为如果一个用户拥按上述两种方法获取了sudo权限的权限之后,可以拥有等同root的权限,查看任何东西,比如/etc/shadow就可以查看,这样是明显不可以的;那么如何限制sudo的权限?
举个例子,我作为root仅仅想让aaa帮我修改其他用户的密码,咋个整?
#visudo <=请注意,这个命令是以root身份执行的
aaa ALL=(root) /usr/bin/passwd <=最后的命令一定要是绝对路径
这个命令的意思是账号aaa可以用root权限使用passwd这个命令,但是啊,用root权限使用passwd,是可以改掉root这个账号的密码的,这还得了;
为了保住root的密码,改用如下命令
#visudo
aaa ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
在路径前加!表示不可执行,翻译一下上边这句话,可以执行passwd 任意字符,但是passwd和passwd root不可以执行(因为passwd和passwd root修改的是root密码);
4.第四个使用方法主要是为了方便批量操作并且在这个过程中还可以限制权限,通过别名创建visudo
以root的身份执行一下内容!
#visudo
User_Alias ADMPW=u1,u2,u3,u4,u5
Cmnd_Alias ADMPWCOM= !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
给大家翻译一哈:
User_Alias 和 Cmnd_Alias分别是用来建立 账户别名 和 命令别名 的,请注意这些别名(ADMPW,ADMPWCOM)都得是大写的;
这三句命令里边实际起作用的是最后一句,前两句就像是定义变量;最后一句就好像是调用函数;
5.sudo是有时间限制的,两条sudo操作间隔大于5min就需要再次输入密码核验身份,如果完全信任一个账号(比如说aaa),又不想老让他一直用核验身份,允许账号使用自己的密码登录root(使用su-)咋整?
以root身份执行下列代码!
#visudo
aaa ALL=(root) /bin/su-
