[TOC] # 修改sudoers文件以免密执行sudo或授权普通用户使用sudo **系统**:macOS/Linux **Sudoers**:默认sudo安全策略插件 **visudo**:sudoers文件编辑工具 正常情况下,我们使用sudo 命令需要输入密码,在输入密码后sudo会记住你的密码15分钟(默认)。我们可以通过修改sudoers文件来免密执行sudo、授权普通用户使用sudo或者修改sudo命令过期时间。 在某些特定的情况下我们不想执行输入密码的操作,比如: - 在IOS测试`(XCTest)`中想要使用shell命令`(setairportnetwork)`控制网络的切换 - 在IOS测试`(XCTest)`中想要使用shell命令`(ifconfig)`控制网络接口的开关 > 以上的操作在终端中可以使用`"|"`管道来提前设置密码,但是在XCTest`(Swift)`中执行shell命令无法使用`"|"`管道 > > 我目前没有找到方法实现这一目的,如果你知道,请在下方评论留言,多谢。 这时候我们就可以通过修改`/etc/sudoers` 文件配置,来达成我们的目的。 ## 1. 修改sudo命令过期时间 默认超时时间`sudo`为 15 分钟;也就是说,sudo默认情况下会记住你的密码 15 分钟。我们可以通过修改`sudoers`文件来修改超时时间。 直接使用`visudo`命令修改`sudoers`文件: ```shell sudo visudo ``` > 输入`sudo visudo`一个终端。这将打开(实际上是一个临时)文件供我们使用您首选的编辑器进行编辑。 > > **注意:**如果您是`visudo`第一次使用,系统会询问您想使用哪个编辑器,因此请选择您的编辑器。没有“更好”的编辑器,但我更喜欢`nano`. 如果您之前已经使用`visudo`并选择了一个编辑器,但您暂时想使用另一个编辑器,您可以`sudo EDITOR=vi visudo`使用`vi`,或者将其更改`nano`为使用`nano`。如果要永久更改首选编辑器,请执行`sudo update-alternatives --config editor`。 > > 此处引用自:[智问智达](https://qa.1r1g.cn/askubuntu/ask/21644171/ "visudo原理") ```shell # 修改文件中的下面这一句 Defaults env_rese # 修改为 Defaults env_reset,timestamp_timeout=1 # 修改格式为:timestamp_timeout=X # X为以分钟为单位的时间 # timestamp_timeout=0 :每次都需要输入密码 # timestamp_timeout=-n (n != 0) :超时时间将被设置为永远 ``` ## 2. 免密执行sudo 切记,不可通过编辑器修改sudosers文件。因为这样做会导致sudosers文件的权限发生改变,之后又要很麻烦的去处理。 如果你还是去这样做了,并且出现了如下报错: > sudo: /etc/sudoers is owned by uid 501, should be 0 那么解决方案奉上:[修改sudoers文件导致sudo无法使用的解决方案](https://blog.csdn.net/zhangtao0417/article/details/105668313 "修改sudoers文件导致sudo无法使用的解决方案") 使用命令修改sudosers文件是最为稳妥的方式。 ### 2.1 通过vim命令修改`/etc/sudoers` 文件 #### 2.1.1 查看sudoers文件权限 执行命令: ```shell ls -l /etc/sudoers ``` > // 命令执行结果:sudoers文件为只读文件 > -r--r----- 1 root wheel 1563 5 10 05:30 /etc/sudoers #### 2.1.2 给sudoers文件添加权限可**写权限** ```shell sudo chmod +w /etc/sudoers ls -l /etc/sudoers ``` > // 命令执行结果:sudoers文件增加写权限 > -rw-r----- 1 root wheel 1563 5 10 05:30 /etc/sudoers #### 2.1.3 修改sudoers文件内容 ```shell sudo vi /etc/sudoers ``` ```shell # 注释下面这一句 # %admin ALL=(ALL) ALL # 添加下面这一句 # 效果为admin组内的所有用户都可以不需要输入密码执行sudo %admin ALL=(ALL) NOPASSWD: ALL # 如果你只想让一个管理员用户可以不需要输入密码执行sudo # 那么就不要注释上面第一句,然后添加下面这一句 adminName ALL=(ALL) NOPASSWD: ALL ```  #### 2.1.4 恢复sudoers文件的初始权限状态(删除写权限)2.1.2 给sudoers文件添加权限可**写权限** ```shell sudo chmod -w /etc/sudoers ls -l /etc/sudoers ``` > // 命令执行结果:sudoers文件删除写权限 > -r--r----- 1 root wheel 1597 6 4 01:07 /etc/sudoers **2.1.4 **这一步是可选的,在 **2.1.3** 执行完毕后就可以在对应的用户下免密执行sudo命令了。 ### 2.2 通过visudo命令直接编辑sudoers文件 直接使用visudo命令修改文件: ```shell sudo visudo ``` ```shell # 修改方式与 1.1.3 相同,此处不在重诉。 ``` **这种修改方式是最安全的!** ## 3. 授权普通用户使用sudo 最近需要在Mac的普通用户环境下进行测试,而测试中又需要root权限,因此需要对普通用户进行sudo授权。实际上和上面的操作差不多,只需要改一句sudoers文件中的代码就行了。 使用visudo命令: ```shell sudo visudo ``` ```shell # 在文件中添加下面这句代码,即可获得root权限 OrdinaryUserName ALL=(ALL) ALL ``` 最后修改:2022 年 06 月 09 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏