pkexec执行命令时始终要求输入首个创建用户密码的问题咨询
pkexec执行命令时始终要求输入首个创建用户密码的问题咨询
你好,我来帮你梳理下这个问题~
首先先确认下你的场景是不是这样:
- 系统初始化阶段创建了用户
test1 - 之后又新增了用户
newUser1 - 当
newUser1执行pkexec somecommand时,系统却弹出要求输入test1的密码,而不是newUser1自己的
这其实是Polkit(pkexec依赖的权限管理工具)的默认规则导致的:
- 管理员组权限限制:默认情况下,只有属于管理员组(大部分Linux发行版是
wheel组,Debian/Ubuntu系可能是sudo组)的用户,才有资格通过pkexec执行特权命令。系统初始化时创建的第一个用户(也就是你的test1)会被自动加入这个管理员组,但后续手动添加的用户newUser1,默认是不会自动加入的。 - pkexec的 fallback 逻辑:当当前执行命令的用户没有管理员权限时,pkexec会自动寻找系统中已有的管理员用户,这时候
test1作为第一个被创建的管理员用户,就会被选中,所以系统会要求输入test1的密码。
至于你提到的/etc/polkit-1/下没有配置文件,这是正常的——默认的Polkit规则都存放在系统目录(比如/usr/share/polkit-1/rules.d/或/usr/share/polkit-1/actions/)里,/etc/polkit-1/是用来存放自定义规则的,默认就是空的。
下面给你两个解决方向:
方法一:给newUser1添加管理员权限
把newUser1加入管理员组(以wheel组为例),执行以下命令:usermod -aG wheel newUser1执行完后,让
newUser1重新登录系统,之后再执行pkexec somecommand,就会要求输入newUser1自己的密码了。方法二:自定义Polkit规则(谨慎使用)
如果你想让newUser1不需要管理员权限也能执行特定命令,可以在/etc/polkit-1/rules.d/目录下创建自定义规则文件,比如90-custom-pkexec.rules,写入以下内容:polkit.addRule(function(action, subject) { // 允许newUser1执行所有pkexec命令,可根据需求修改action.id来限制特定命令 if (action.id == "org.freedesktop.policykit.exec" && subject.user == "newUser1") { return polkit.Result.YES; } });注意:这种方式会直接授予
newUser1执行特权命令的权限,没有密码验证,一定要根据实际需求调整规则,避免过度授权带来安全风险。
你的理解其实没问题——正常情况下,有管理员权限的用户执行pkexec确实应该要求输入自己的密码,问题核心就是newUser1默认没获得管理员组的权限。
备注:内容来源于stack exchange,提问作者materna-stackoverflow
相关产品推荐
相关产品推荐

