linux环境 su用法,Linux su 与 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值