为什么要进行用户切换?
在操作过程中需要使用特定的用户进行特定的操作,多数情况下是因为权限,比如要修改一个文件,只有root用户有权限修改,那么就要切换到root用户下进行操作。切换用户一般有两个命令:
su命令不加参数,默认切到root用户,需要输入root用户密码进行验证,
exit命令可退出root用户。
su命令可以加一个“-”再加上用户名,此时,不但身份变化了,同时也拥有了此用户的“用户环境”,比如用户家目录以及此用户的其它个性化设置。
普通用户切换其它用户需要知道其它用户的密码,root用户使用su命令切换其它用户,不需要知道用户密码
Linux是多用户多任务的操作系统, 共享该系统的用户往往不只一个。
出于安全性考虑, 有必要通过创建一些非root用户, 只让它们拥有不完全的权限; 如有必要,再来提升权限执行。
sudo就是来解决这个需求的: 这些非root用户不需要知道root的密码,就可以提权到root,执行一些root才能执行的命令。
执行, 将允许当前用户,提权到的身份,再执行后面的, 即使原本需要root权限。
提权到身份时,是以的身份来执行命令的,因此创建的文件默认属于用户。
因此,当userB执行如下命令时:
创建的 文件属于用户userA。
如果不带, 则默认使用root用户,而大多数时候sudo都是要提权到root的,所以可以省略为:
需要注意的是: 执行sudo时输入的密码是当前用户的密码, 并非的密码。
和相比:
前者需要输入当前用户的密码,提权到身份执行命令后返回当前用户;
后者则是输入目标用户的密码,切换到目标用户。
通过添加的用户,并不具备sudo权限。在ubuntu/centos等系统下, 需要将用户加入admin组或者wheel组或者sudo组。
以root用户身份执行如下命令, 将用户加入wheel/admin/sudo组:
如果提示wheel组不存在, 则还需要先创建该组:
sudo的权限控制可以在文件中查看到。
如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时不需要输入密码,就需要对该文件有所了解。
一般来说,通过指令来查看该文件, 会看到如下几行代码:
%wheel ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
对文件进行编辑的代码公式可以概括为:
凡是中的内容, 都能省略; 命令和命令之间用号分隔;
为了方便说明, 将公式的各个部分称呼为字段1 – 字段5:
字段1 字段2=[(字段3)] [字段4] 字段5
字段3、字段4,是可以省略的。
在上面的默认例子中, “字段1″不以号开头的表示”将要授权的用户”, 比如例子中的;
以号开头的表示”将要授权的组”, 比如例子中的组 和 组。
“字段2″表示允许登录的主机, ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令. 比如:
表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令。”字段3″和”字段4″省略。
“字段3″如果省略, 相当于,表示可以通过提权到root; 如果为或者, 表示能够提权到。
请注意,”字段3″如果没省略,必须使用双括号包含起来。这样才能区分是省略了”字段3″还是省略了”字段4″。
“字段4″的可能取值是。请注意NOPASSWD后面带有冒号。表示执行sudo时可以不需要输入密码。比如:
表示: 普通用户lucy可以在任何主机上, 通过sudo执行命令, 并且不需要输入密码.
又比如:
表示: 普通用户peter可以在任何主机上, 通过sudo执行任何命令, 并且不需要输入密码。
“字段5″是使用逗号分开一系列命令,这些命令就是授权给用户的操作; ALL表示允许所有操作。
你可能已经注意到了, 命令都是使用绝对路径, 这是为了避免目录下有同名命令被执行,从而造成安全隐患。
如果你将授权写成如下安全性欠妥的格式:
那么用户就有可能创建一个他自己的程序, 也命名为userad, 然后放在它的本地路径中, 如此一来他就能够使用root来执行这个”名为useradd的程序”。这是相当危险的!
命令的绝对路径可通过指令查看到: 比如可以查看到命令的绝对路径:
例子1:
表示: 用户papi能在所有可能出现的主机上, 提权到root下执行/bin/chown, 不必输入密码; 但运行/usr/sbin/useradd 命令时需要密码.
这是因为只影响了其后的第一个命令: 命令1.
上面给出的公式只是简化版,完整的公式如下:
在具有sudo操作的用户下, 执行可以查看到该用户被允许和被禁止运行的命令.
例子2:
用例子2来说明通配符的用法, 以及命令前面加上号表示取消该命令。
该例子的意思是: 用户papi在所有可能出现的主机上, 能够运行目录/usr/sbin和/sbin下所有的程序, 但fdisk除外.
“你讲了这么多,但是在实践中,我去编辑/etc/sudoers文件,系统提示我没权限啊,怎么办?”
这是因为的内容如此敏感,以至于该文件是只读的。所以,编辑该文件前,请确认清楚你知道自己正在做什么。
强烈建议通过命令来修改该文件,通过修改,如果配置出错,会有提示。
不过,系统文档推荐的做法,不是直接修改文件,而是将修改写在目录下的文件中。
如果使用这种方式修改sudoers,需要在文件的最后行,加上一行(默认已有):
注意了,这里的指令是一个整体, 前面的号不能丢,并非注释,也不能在号后有空格。
任何在目录下,不以号结尾的文件和不包含号的文件,都会被解析成的内容。
文档中是这么说的:
# This will cause sudo to read and parse any files in the /etc/sudoers.d
# directory that do not end in ‘~’ or contain a ‘.’ character.
# Note that there must be at least one file in the sudoers.d directory (this
# one will do), and all files in this directory should be mode 0440.
# Note also, that because sudoers contents can vary widely, no attempt is
# made to add this directive to existing sudoers files on upgrade.
# Finally, please note that using the visudo command is the recommended way
# to update sudoers content, since it protects against many failure modes.
输入密码时有反馈
当使用sudo后输入密码,并不会显示任何东西 —— 甚至连常规的星号都没有。有个办法可以解决该问题。
打开文件找到下述一行:
修改成:
修改sudo会话时间
如果你经常使用sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用再输入密码就可以运行几次sudo命令。
但是一段时间后,sudo 命令会再次要求你输入密码。默认是15分钟,该时间可以调整。添加即可。
时间以分钟为单位,-1表示永不过期,但强烈不推荐。
比如我希望将时间延长到1小时,还是打开文件找到下述一行:
修改成:
到此这篇关于Linux命令学习之用户切换su,sudo的文章就介绍到这了,更多相关Linux用户切换su,sudo内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!