polkit 是linux系统中的一个身份认证管理工具 (Authorization Manager ),在启动一些服务时,有可能会遇到 polkit 不能正常启动运行的情况,会报出以下之类错误:

此时发现polkit并没有处于正常的激活状态,由此可能会导致其他一些服务也不能正常启动。

#查看 polkit 状态
systemctl status polkit

#启动 polkit
systemctl start polkit

#检查是否安装了 polkit
yum list installed | grep polkit

#安装 polkit
yum install polkit

#查看报错信息
journalctl -xe

1. 加载共享库时出错

1.1 错误表现

  • 查看polkit的运行状态发现是failed,且报错是加载共享库时出错:libstdc++.so.6:无法从共享对象映射段:权限被拒绝

1.2 解决办法

1.2.1 查看 libstdc++.so.6 库

find / -name libstdc++.so.6

ll -n /usr/lib64/libstdc++.so.6

1.2.2 如果没有安装 libstdc++.so.6 库

  • 查看哪个安装包有这个库文件
yum whatprovides libstdc++.so.6

  • 安装库
yum -y install libstdc++-4.8.5-44.el7.i686

  • 新安装的 libstdc++.so.6 库路径是 /usr/lib/libstdc++.so.6

注:libstdc++.so.6 库有一个就可以

1.2.3 切换 libstdc++.so.6 链接库

# 进入lib64库
cd /usr/lib64/

# 查看libstdc++.so.6 链接库
ll

本次报的 加载共享库时出错:libstdc++.so.6:无法从共享对象映射段:权限被拒绝 错误是因为 libstdc++.so.6.0.25 库有问题,这个库不知道是怎么多出来的,切换回 libstdc++.so.6.0.19 就可以

  • 修改软连接
rm -rf libstdc++.so.6

ln -s libstdc++.so.6.0.19 libstdc++.so.6

ll -n libstdc++.so.6

1.2.4 启动 polkit

1.2.4.1 运气好的话可能直接就成功了
systemctl start polkit.service

systemctl status polkit.service

1.2.4.2 但也有可能完全没用,此时先尝试手动重启
/usr/lib/polkit-1/polkitd --no-debug &

systemctl start polkit

启动命令是可以执行的,不会再报原来的错,但其实只有手动重启的那一下成功了,程序并不会持续运行,查看运行状态的话发现不再是 failed,变成了 inactive (dead)

  • 此时需要先启动 dbus 服务,保证正常运行
systemctl restart dbus.service

systemctl status dbus

  • 然后再尝试启动polkit,应该就可以正常运行了
systemctl start polkit.service

此时再尝试启动其他受影响的服务就可以了。

2. 重装polkit再启动

yum reinstall polkit

systemctl start polkit.service

3. 解决办法

  • 确保存在polkitd系统用户和组
#检查并有条件的创建用户/组
getent group polkitd >/dev/null && echo -e "\e[1;32mpolkitd group already exists\e[0m" || { groupadd -r polkitd && echo -e "\e[1;33mAdded missing polkitd group\e[0m" || echo -e "\e[1;31mAdding polkitd group FAILED\e[0m"; }

getent passwd polkitd >/dev/null && echo -e "\e[1;32mpolkitd user already exists\e[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "User for polkitd" polkitd && echo -e "\e[1;33mAdded missing polkitd user\e[0m" || echo -e "\e[1;31mAdding polkitd user FAILED\e[0m"; }

#检查并有条件的重置用户/组和所有权
rpm -Va polkit\* && echo -e "\e[1;32mpolkit* rpm verification passed\e[0m" || { echo -e "\e[1;33mResetting polkit* rpm user/group ownership & perms\e[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; }

#重启机器,并确保polkit已重新连接到dbus
/usr/lib/polkit-1/polkitd --no-debug &

reboot
  • 重启之后,发现还是存在问题,去卸载polkit包
查看polkit安装版本
yum list installed | grep polkit

rpm -ef polkit.x86_64 --nodeps

  • 卸载掉包之后重装polkit包,重新加载服务
yum -y install polkit
systemctl daemon-reload
#如果正常的话说明问题解决了
#如果还是报错,就尝试将polkit包卸载不重装,然后在重新加载服务试试**

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐