Linuxsu与sudo的用法

编程

本文摘自鸟哥的私房菜
su 与 sudo 的用法:
su [-lcm] [username]
参数:
-: 如果执行 su - 时,表示该使用者想要变换身份成为root,且使用root的环境设
定参数档,如/root/.bash_profile等等。
-1:后面可以接使用者,例如 su -l username,这个-l 好处是,可使用欲变换身
份者他的所有相关环境设定档;
-m:-m 与 -p 是一样的,表示【使用目前的环境设定,而不重新读取新使用者的设
定档】
-c:仅进行一次指令,所以-c后面可以加上指令喔!

Ps:
1、如果使用su 没有加上 - 的话,那么使用的是原来使用者的相关设定。此时,
MAIL/PATH/USER 等环境变量都还是原来的登入者喔!所以要特别留意例如PATH 这
个可能影响到执行指令进行的变量才行。而这也是最常见的PATH变量的问题!(可以
使用env命令检验)
2、如果使用"su - " 的话,则会切换root用户的相关设定。

这个su 指令可以让你在不同的使用者之间切换身份,当su 后面没有加上使用者账
号时,预设就是以root 作为你切换的那个身份啦!而要特别留意的是su 的使用方
式,由于【是否读入欲切换的身份者的环境参数档案】的不同,所以要留意喔。 

如果您想要保留原有的环境参数,那么环境变量当中,最麻烦的当属PATH 这个东西
,由于为了避免一般使用者使用了root 的管理指令,所以通常Linux 都会将指令分
类放在两个主要的目录,分别是 /bin 与 /sbin !那个/sbin 大多是 super user
就是root 用来管理系统的指令啦!所以, 可能的话,将你习惯操作的那个账号的
PATH重新设定为root 的PATH ,这样也比较方便!

当root 使用su 切换身份时,他并不需要输入密码喔!

==================sudo ========================
sudo 的工作原理:
1、当使用者执行sudo时, 系统会主动的去寻找/etc/sudoers 档案, 判断该使用
者是否有执行sudo 的权限;
2、若使用者具有可执行sudo 的权限后,便让使用者【输入使用者自己的密码】来
确认;
3、若密码输入成功,便开始进行sudo 后续接的指令;
4、不过,root 执行sudo 时,不需要输入密码;
5、若欲切换的身份与执行者身份相同,那也不需要输入密码。

这里要注意的是,使用者【输入的是自己的密码,而不是欲切换成为他的那个身份的
密码!】。如此一来,大家可以使用自己的密码执行root 的工作,而不必知道root
的密码,安全多了。此外,使用者能够执行的指令是可以被限制的!所以,我们可以
设定其他用户 仅能进行shutdown的工作,或者是其它一些简单的指令。


是否具有sudo 的执行权限是很重要的,而sudo 的执行权限与/etc/sudoers 这个
档案有关。在预设的情况下,只有root 才能够使用sudo 呢!至于编
辑/etc/sudoers 则需要visudo 这个指令

sudo的语法:
sudo [-u [username|#uid]] command
参数:
-u: 后面可以接使用者账号名称,或者是UID。例如 UID是 500 的身份,可以使用:
-u #500 来作为切换到UID 为 500 的哪位使用者。

如何将sudo 与 su 搭配使用? sudo su -

因为/etc/sudoers 需要一些比较特别的语法,因此,如果你直接以vi 去编辑他时
,如果输入的字句错误,可能会造成无法启用sudo 的困扰,因此,建议你一定要使
用visudo 去编辑/etc/sudoers 喔!(visudo必须使用root的身份来执行!)

visudo是以vi 来开启/etc/sudoers,不过,当我们保存离开时,visudo会额外去
检查/etc/sudoers内部的语法。
【root ALL=(ALL) ALL】 代表的意义是:
使用者账号 登入的主机 = (可以变换的身份) 可以下达的指令
因此,上面这一行的意义是:【root 这个使用者,不论来自何方,他可以变换成任
何linux本机上有的所有账号,并执行所有的指令】
如果没有加上身份宣告的话,那么【预设是仅能进行root 的身份切换】而已喔!另
外,如果想要以使用者的群组来进行规范的话,那么在【使用者账号】的字段,前面
加上【%】时,就代表是群组的身份了。举例来说,我想要让系统里面所有属于
wheel这个群组的使用者都能够进行sudo 时,可以这样写:%wheel ALL = (ALL) ALL
而如果你还想要让这个群组内的使用者在使用sudo 时,不需要输入密码,那么可以
在【可以下达的指令】的那个字段内多加入一个参数,名为【NOPASSWD:】即可,亦
即:%wheel ALL = (ALL) NOPASSWD:ALL
另外,除了单一个人或单一个群组之外,我们还可以额外指定一些【账号别名,主机
别名,指令别名】等等的数据来相互套用喔!不过,别名【必须要使用大写字符】。

例题:我想要建立一个可以帮助系统管理员变更使用者密码的群组,名称为ADMPW(
注意,在sudoers内,这个别名的名称一定要是大写字符才行!)但是这个群组不能
修改root的密码喔!且他们执行sudo 时,不需要密码验证。
答: 我以root的身份使用visudo, 进入编辑画面后,去设定成底下的模样:
    User_Alias ADMPW = vbird, dmtsai, vbird1, vbird3
    ADMPW ALL = NOPASSWD:!/usr/bin/passwd, /usr/bin/passwd[A-Za-z]*,
                !/usr/bin/passwd root
上面的意思是说,我的系统上面有四个账号,分别是 vbird,vbird1,vbird3与
dmtsai 这四个账号加入sudo 内的 ADMPW群组中,这四个账号可以使用sudo进行
【/usr/bin/passwd*】密码的更改动作,但是不能(在指令前面加入 !代表不可)
使用/usr/bin/passwd 或 /usr/bin/passwd root,如此一来,就让该 ADMPW 可
以更改使用者的密码,但是不能变更 root 的密码!

例题:我的系统中有DNS服务,他的启动指令在 /etc/init.d/named, 如果我想要
建立一个DNSMASTER 的群组来管理他时?如何是好?
答: 我以root的身份使用visudo, 进入编辑画面后,去设定成底下的模样:
    User_Alias DNSMASTER = vbird,dmtsai
    Cmnd_Alias DNSCMD = /etc/init.d/named, /usr/bin/vim /var/names/*
    DNSMASTER ALL = DNSCMD
 

以上是 Linuxsu与sudo的用法 的全部内容, 来源链接: utcz.com/z/512309.html

回到顶部