首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在需要根权限的命令自动完成时禁用身份验证提示

在需要根权限的命令自动完成时禁用身份验证提示
EN

Unix & Linux用户
提问于 2016-11-06 19:01:28
回答 2查看 1.6K关注 0票数 3

当我使用例如防火墙-cmd(正确地需要根权限来执行)时,当我试图自动完成一个选项(例如写"--perm“并点击TAB)时,会在一个窗口(在终端中不像sudo那样)提示我提供密码。每次我使用自动完成时都会发生这种情况,即使我在使用sudo之前输入了密码并/或运行了命令(该命令被配置为在一定时间内不提示我第二次提示)。

是否有任何方法使输入密码永久一段时间,或完全禁用身份验证仅仅是自动完成(我仍然希望认证的实际运行程序)?

显而易见的解决方案是以root身份登录(使用su或sudo -i),但我想避免这样做。

我使用的是bash和.bashrc源代码,这是Debian中随bash-completion包附带的标准bash_completion文件。

我可以用. /etc/bash_completion在我的.bashrc中复制这个。

运行complete -p firewall-cmd将导致

bash: complete: firewall-cmd: no completion specification

我认为polkit涉及到(请参阅原始标记)的原因是,当我中止身份验证对话时,我在stdout上得到了以下内容:

代码语言:javascript
运行
复制
Authorization failed.
    Make sure polkit agent is running or run the application as superuser.
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2016-11-12 22:03:17

通常,要查看与防火墙-cmd这样的命令相关联的完成,人们将使用complete -p firewall-cmd,并期望看到类似于complete -F _firewall_cmd firewall-cmd的东西返回。然后将使用_firewall_cmd检查type _firewall_cmd函数。

Debian的bash完成包使用一个complete -D命令来设置一个默认的完成函数,该函数的目的是查看第一次使用时是否有特定的完成,如果有,则加载它。

因此,在查看如何设置完成之前,尝试完成一次是很重要的。

对于firewall-cmd,这个文件定义了当前启动的完成函数

代码语言:javascript
运行
复制
_firewall_cmd()
{
    local cur prev words cword split
    _init_completion -s || return
    firewall-cmd --state 1> /dev/null || return

/usr/bin/firewall程序本身是一个python脚本,它最终需要根权限并请求身份验证。如果防火墙正在运行,则对firewall-cmd --state的调用返回true。因此,如果防火墙没有运行,完成代码的意图似乎是不完成。但是,编写它是为了需要特权来查看防火墙是否正在运行,这将导致不必要的提示。

从完成函数中删除firwall-cmd --state 1> /dev/null || return行使完成速度更快,不提示输入密码,以及其他一般优点。

票数 3
EN

Unix & Linux用户

发布于 2016-11-06 19:14:48

您可以使用sudo的nopasswd选项。只需在suoders文件中为用户添加nopasswd选项即可。

例如,如果您的用户名是imosdin,那么通过执行命令visduo修改sudoers中的条目,然后添加/修改下面提到的条目。

代码语言:javascript
运行
复制
imsodin ALL=(ALL) NOPASSWD: ALL

现在,系统将允许imsodin用户通过sudo执行任何命令,而无需提示密码。

票数 -2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/321478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档