/etc/polkit-1/rules.d/50-custom.rules
polkit.addRule(function(action, subject) {
// 1. root 用户直接放行,不受后续规则限制
if (subject.user === "root") {
return polkit.Result.YES;
}
// 2. 禁用电源操作(关机/重启/挂起/休眠)
if (action.id.indexOf("power-off") !== -1 ||
action.id.indexOf("reboot") !== -1 ||
action.id.indexOf("suspend") !== -1 ||
action.id.indexOf("hibernate") !== -1 ||
action.id.indexOf("hybrid-sleep") !== -1) {
return polkit.Result.NO;
}
// 3. 活动本地用户 操作磁盘 udisks2 放行
if (action.id.match("org.freedesktop.udisks2")) {
if (subject.local && subject.active) {
return polkit.Result.YES;
} else {
return polkit.Result.AUTH_ADMIN;
}
}
// 4.1. 活动本地用户 wifi 扫描 放行
if (action.id === "org.freedesktop.NetworkManager.wifi.scan") {
if (subject.local && subject.active) {
return polkit.Result.YES; // 本地活动用户直接放行
}
}
// 4.2 活动本地用户 启用/禁用设备统计 放行
if (action.id === "org.freedesktop.NetworkManager.enable-disable-statistics") {
if (subject.local && subject.active) {
return polkit.Result.YES;
}
}
// 5.严格网络限制
var networkActions = [
// NetworkManager
"org.freedesktop.NetworkManager.checkpoint-rollback",
"org.freedesktop.NetworkManager.enable-disable-connectivity-check",
"org.freedesktop.NetworkManager.enable-disable-network",
"org.freedesktop.NetworkManager.enable-disable-statistics",
"org.freedesktop.NetworkManager.enable-disable-wifi",
"org.freedesktop.NetworkManager.enable-disable-wimax",
"org.freedesktop.NetworkManager.enable-disable-wwan",
"org.freedesktop.NetworkManager.network-control",
"org.freedesktop.NetworkManager.reload",
"org.freedesktop.NetworkManager.settings.modify.global-dns",
"org.freedesktop.NetworkManager.settings.modify.hostname",
"org.freedesktop.NetworkManager.settings.modify.own",
"org.freedesktop.NetworkManager.settings.modify.system",
"org.freedesktop.NetworkManager.sleep-wake",
"org.freedesktop.NetworkManager.wifi.scan",
"org.freedesktop.NetworkManager.wifi.share.open",
"org.freedesktop.NetworkManager.wifi.share.protected",
// systemd-networkd
"org.freedesktop.network1.forcerenew",
"org.freedesktop.network1.reconfigure",
"org.freedesktop.network1.reload",
"org.freedesktop.network1.renew",
"org.freedesktop.network1.revert-dns",
"org.freedesktop.network1.revert-ntp",
"org.freedesktop.network1.set-default-route",
"org.freedesktop.network1.set-dns-over-tls",
"org.freedesktop.network1.set-dns-servers",
"org.freedesktop.network1.set-dnssec",
"org.freedesktop.network1.set-dnssec-negative-trust-anchors",
"org.freedesktop.network1.set-domains",
"org.freedesktop.network1.set-llmnr",
"org.freedesktop.network1.set-mdns",
"org.freedesktop.network1.set-ntp-servers",
"org.freedesktop.network1.set-persistent-storage",
// systemd-resolved
"org.freedesktop.resolve1.dump-cache",
"org.freedesktop.resolve1.dump-server-state",
"org.freedesktop.resolve1.dump-statistics",
"org.freedesktop.resolve1.register-service",
"org.freedesktop.resolve1.reset-statistics",
"org.freedesktop.resolve1.revert",
"org.freedesktop.resolve1.set-default-route",
"org.freedesktop.resolve1.set-dns-over-tls",
"org.freedesktop.resolve1.set-dns-servers",
"org.freedesktop.resolve1.set-dnssec",
"org.freedesktop.resolve1.set-dnssec-negative-trust-anchors",
"org.freedesktop.resolve1.set-domains",
"org.freedesktop.resolve1.set-llmnr",
"org.freedesktop.resolve1.set-mdns",
"org.freedesktop.resolve1.subscribe-query-results",
"org.freedesktop.resolve1.unregister-service",
// ConnMan
"net.connman.modify",
"net.connman.secret",
"net.connman.vpn.modify",
"net.connman.vpn.secret",
// 飞行模式 / rfkill
"org.freedesktop.urfkill.block",
"org.freedesktop.urfkill.blockidx",
"org.freedesktop.urfkill.flight_mode",
// ModemManager
"org.freedesktop.ModemManager1.Contacts",
"org.freedesktop.ModemManager1.Control",
"org.freedesktop.ModemManager1.Device.Control",
"org.freedesktop.ModemManager1.Firmware",
"org.freedesktop.ModemManager1.Location",
"org.freedesktop.ModemManager1.Messaging",
"org.freedesktop.ModemManager1.Time",
"org.freedesktop.ModemManager1.USSD",
"org.freedesktop.ModemManager1.Voice",
// FirewallD
"org.fedoraproject.FirewallD1.all",
"org.fedoraproject.FirewallD1.config",
"org.fedoraproject.FirewallD1.config.info",
"org.fedoraproject.FirewallD1.direct",
"org.fedoraproject.FirewallD1.direct.info",
"org.fedoraproject.FirewallD1.info",
"org.fedoraproject.FirewallD1.policies",
"org.fedoraproject.FirewallD1.policies.info"
];
if (networkActions.indexOf(action.id) !== -1) {
return polkit.Result.AUTH_ADMIN; // 所有用户操作网络都需管理员密码
}
});
// ==================== 强制仅 root 视为管理员 ====================
polkit.addAdminRule(function(action, subject) {
return ["root"]; // 只有 root 用户能通过 AUTH_ADMIN 认证
});
/etc/systemd/system/remove-kvm-intel.service
[Unit]
Description=Remove kvm_intel kernel module at boot
After=local-fs.target sysinit.target
Before=multi-user.target
[Service]
Type=oneshot
ExecStart=/sbin/modprobe -r kvm_intel
RemainAfterExit=no
# 如果模块未加载,忽略错误
SuccessExitStatus=0 1
[Install]
WantedBy=multi-user.target