三、更改身份
在很多时候,会发现如果可以拥有另一个用户的身份是很有必要的。
我们经常会需要得到超级用户的特权来执行一些管理任务,但也可以变成另一个普通用户来执行这些任务,就好像是在测试一个账户。有3 种方法用来转换身份,具体如下:
0.转换身份的 3 种方法
- 注销系统并以其它用户的身份重新登录系统。
- 使用 su 命令。
- 使用 sudo 命令。
第 1 种方法:很常见,大家也都会使用,并且它不如其它两种方法来得方便,所以跳过。
第 2 种方法:在 shell 会话状态下,使用 su 命令将允许你假定为另一个用户的身份,既可以以这个用户的ID来启动一个新的 shell 会话,也可以以这个用户的身份来发布一个命令。
第 3 种方法:使用 sudo 命令将允许管理者创建一个称为 /etc/sudoer 的配置文件,并且定义一些特定的命令,这些命令只有 被赋予为假定身份的特定用户 才允许执行。
(1)如何选择?
选择使用哪个命令在很大程度上取决于使用的 Linux 发行版本。有些发行版本可能对两个命令都支持,但是它的系统配置可能只是偏向于其中一个。
1.su-以其它用户和组ID的身份来运行shell
su 命令用来以另一个用户的身份来启动 shell。
(1)语法格式
su [选项] [user]
或
su -c 'command'
功能: 以另一个用户的身份来启动 shell。
参数:
① user : 表示变更为指定 user 用户。
(也可不指定: 若没有指定用户,那么默认假定为超级用户)
选项:
① -f , --fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。
② -l ,--login:加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME、SHELL和USER等)都是以
该使用者(USER)为主,并且工作目录也会改变。如果没有指定USER,缺省情况是root(超级用户)。
(注意:-l 可以缩写为 - )
③ -m,-p ,–preserve-environment:执行su时不改变环境变数。
④ -c,--command: 变更账号为USER的使用者,并执行指令(command)后再**变回原来使用者**。
⑤ --help:显示说明文件.
⑥ --version:显示版本资讯.
返回值:
'''
① 示例
Ⅰ. -l选项
如果包含“ -l ”选项,那么得到的 shell 会话界面将是 指定用户的登录 shell 界面。
这意味着,该指定用户的运行环境将被加载,而且其工作目录也将更改为该指定用户的主目录。
若是没有指定用户那么默认假定为超级用户。
需要注意的是,-l 可以缩写为 - ,而且这一形式经常被使用。
以下操作是以超级用户的身份来启动 shell:
su -
可以看到,在输入 su 命令后,系统会提示输入该超级用户的密码。
如果密码输入正确,那么将会出现新的 shell 提示符,该提示符表示该 shell 将拥有超级用户的特权(此时,提示符的末尾字符是#,而不是$),而且当前的工作目录现在也是用于超级用户的主目录(通常情况下是 /root)。
一旦进入这个新的 shell 环境,就可以 以超级用户的身份来执行命令。
在使用结束时,输入 exit,将会返回到之前的 shell 环境。
Ⅱ. 使用 su 执行单个命令
使用 su 命令执行单个命令,而不需要开启一个新的交互式命令界面。
语法格式:
su -c 'command'
。使用这种格式时,单个命令行将被传递到一个新的 shell 环境下进行执行。
这里需要单引号把命令行引起来,这一点非常重要。这是因为:
该命令扩展并不希望在当前 shell 环境下执行,而是希望在新的 shell 环境下执行。
su -c 'ls -l /root/*'
2.sudo-以另一个用户的身份执行命令
sudo命令在很多方面都类似于 su 命令,但是它还有一些重要的功能。
管理者可以通过配置 sudo 命令,使系统以一种可控的方式,允许一个普通用户以一个不同的用户身份(通常是超级用户)执行命令。简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 超级用户(root) 执行的操作,而不需要知道 root 的密码。
(1)语法格式
sudo [选项][-u <用户>][指令] 或 sudo [选项(klv 可选)]
功能: 授予 普通用户 执行一些 超级用户 执行的操作。
参数:
①
选项:
-b 在后台执行指令。
-h 显示帮助。
-H 将HOME环境变量设为新身份的HOME环境变量。
-k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
-l 列出目前用户可执行与无法执行的指令。
-p 改变询问密码的提示符号。
-s 执行指定的shell。
-u <用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
-v 延长密码有效期限5分钟。
-V 显示版本信息。
-S 从标准输入流替代终端来获取密码
返回值:
'''
① 示例
系统默认创建了一个名为 sudo 的组。只要把用户加入这个组,用户就具有了 sudo 的权限。 至于如何把用户加入 sudo 组,您可以直接编辑 /etc/group 文件,当然您得使用一个有 sudo 权限的用户来干这件事
sudo /etc/group
(2)sudo 与 su 命令的区别
- 在特定情况下,用户可能被限制为只能执行一条或几条特定的命令,而对其它命令没有执行权限。
- 使用 sudo 命令并不需要输入超级用户的密码。使用sudo 命令时,用户只需要输入自己的密码来进行认证。
- sudo 命令并不需要启动一个新的 shell 环境,而且也不需要加载另一个用户的运行环境,这就意味着,使用 sudo 命令的时候并不需要用单引号把命令行引起来。
示例
比如说,配置 sudo 命令来允许普通用户运行一个虚构的备份程序(backup_script),这个程序需要超级用户权限。
sudo backup_script
在输入 sudo 命令后,系统将提示输入自己的密码(注意:不是超级用户的密码),而且一旦认证通过,指定的命令都将被执行。
(3)sudo命令不同选项不同结果
注意:可以通过指定不同的选项来改变命令执行的效果。
① -l 选项
可以使用 -l 选项,来知晓 sudo 命令可以授予哪些权限。
sudo -l

3.chown-更改文件的所有者和所属群组
更改文件或目录的所有者和所属群组。
使用这个命令需要超级用户权限。
(1)语法格式
chown [选项]... [ower] [:[group]] file...
chown 更改的是文件所有者还是所属群组,或二者都更改,取决于该命令的第一个参数。
功能: 更改文件或目录的所有者和所属群组.
参数:
① ower: 选择它将会更改文件所有者
② :[group] : (注意:前面的冒号必须写)选择它将会更改文件所属群组。
③ file: 更改的文件或目录
选项:
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-v 显示详细的处理信息
-deference 作用于符号链接的指向,而不是链接文件本身
返回值:
'''
① 示例
Ⅰ.命令参数实例
参数 | 结果 |
---|---|
bob | 把文件所有者从当前所有者更改为用户bob。 |
bob:users | 把文件所有者从当前所有者更改为用户bob,并把文件所属群组更改为 users 组。 |
:admins | 把文件所属群组更改为 admins 组,文件所有者不变。 |
bob: | 把文件所有者从当前所有者更改为用户bob,并把文件所属群组更改为用户 bob 登录系统时所属的组。 |
还有需要注意的是,在大多数的配置环境下,sudo 命令会信任用户几分钟(直到计时结束才会提醒你输入自己的密码)。
4.chgrp-更改文件所属群组
在早期 UNIX 版本中,chown 命令只能更改文件的所有者,而不能改变文件所属群组。
为了达到这个目的,可以使用一个独立的命令 chgrp 来实现。该命令除了限制多一点之外,和chown的使用方式几乎相同。
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=h4c2d8sw30q2
网友评论