sudo网络权限

背景

  对于设置了网络代理的服务器,在当前用户下执行网络访问没有问题,但通过sudo执行命令时,就会出现“无网络连接”的错误。

普通权限下,wget成功。
# wget https://github.com
--2016-12-08 09:00:43--  https://github.com/
Connecting to 109.105.113.200:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html2016-12-08 09:01:03 (1.33 KB/s) - ‘index.html’ saved [25692]

使用sudo命令后,连接失败。
# sudo wget https://github.com
--2016-12-08 09:01:41--  https://github.com/
Resolving github.com (github.com)... failed: Name or service not known.
wget: unable to resolve host address ‘github.com

解决方案

  出现这种情况的原因,是因为sudo命令的作用是为了允许普通用户使用超级用户权限的工具,但却没有继承来自环境变量。而网络代理的设置,是通过设置http_proxy,https_proxy等环境变量来实现的。因此,sudo后也就失去了网络代理,自然也就没有了网络连接。为了解决该问题,我们需要修改sudo的配置文件。修改sudo的配置文件有特殊的命令和方法,具体参考http://blog.163.com/clevertanglei900@126/blog/static/111352259201142621547160/,我这里不做详细介绍了。
  在sudo的配置文件中,增加Defaults env_keep += “http_proxy https_proxy”。该行表示使用sudo命令时,保存后面列出的环境变量。

增加配置后,sudo可访问网络。
# sudo wget https://github.com
--2016-12-08 09:02:52--  https://github.com/
Connecting to 109.105.113.200:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.12016-12-08 09:02:56 (20.1 KB/s) - ‘index.html.1’ saved [25692]
### 正确使用和配置sudo权限的方法 #### 1. 确保安装sudo包 在CentOS系统中,确保系统已安装`sudo`包。如果未安装,可以通过以下命令进行安装: ```bash yum install sudo ``` 这一步是为了确保系统支持`sudo`功能[^2]。 #### 2. 编辑sudoers文件 `/etc/sudoers`文件用于定义哪些用户或组可以使用`sudo`命令以及它们的权限范围。此文件只能通过`visudo`命令编辑,以避免语法错误导致系统无法正常运行。`visudo`会在保存时检查文件语法,并在发现错误时阻止保存[^1]。 #### 3. 配置普通用户的sudo权限 为了给某个用户(例如`alice`)赋予sudo权限,需要通过`visudo`命令打开`/etc/sudoers`文件并添加类似以下内容: ```plaintext alice ALL=(ALL) ALL ``` 上述配置表示用户`alice`可以在任何主机上以任意用户身份执行任何命令。 #### 4. 为特定用户设置无密码sudo权限 如果希望用户在执行sudo命令时不被要求输入密码,可以在配置中加入`NOPASSWD`选项。例如: ```plaintext alice ALL=(ALL) NOPASSWD: ALL ``` 这样,用户`alice`执行sudo命令时无需输入密码即可获得root权限[^4]。 #### 5. 限制sudo权限范围 为了提高系统安全性,可以限制用户只能执行某些特定命令。例如,允许用户`alice`仅能重启网络服务: ```plaintext alice ALL=/sbin/service network restart ``` 这样,`alice`只能通过sudo执行`/sbin/service network restart`命令,而无法执行其他命令[^2]。 #### 6. 赋予特定用户sudo权限的示例 假设需要为`mysql`用户赋予sudo权限,使其能够执行某些需要root权限的操作,可以在`/etc/sudoers`文件中添加如下内容: ```plaintext mysql ALL=(root) NOPASSWD: /usr/bin/apt-get, /usr/bin/yum ``` 这表示`mysql`用户可以无密码执行`apt-get`或`yum`命令,但不能执行其他命令[^3]。 #### 7. 测试sudo配置 完成配置后,切换到目标用户并测试sudo功能是否正常工作。例如: ```bash su - alice sudo whoami ``` 如果输出为`root`,则说明配置成功[^1]。 #### 注意事项 - 在编辑`/etc/sudoers`文件时务必小心,错误的配置可能导致系统无法正常使用`sudo`命令。 - 推荐在生产环境中限制用户的sudo权限范围,以降低潜在的安全风险。 ```python # 示例:验证sudo权限 import os def test_sudo(user): command = f"su - {user} -c 'sudo whoami'" result = os.popen(command).read().strip() return result == "root" print(test_sudo("alice")) # 输出 True 或 False ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值