mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-10 03:22:44 +00:00
refactor: harden safe-bin trusted dir diagnostics
This commit is contained in:
@@ -6,7 +6,12 @@ import {
|
||||
type SafeBinProfileFixture,
|
||||
type SafeBinProfileFixtures,
|
||||
} from "./exec-safe-bin-policy.js";
|
||||
import { getTrustedSafeBinDirs, normalizeTrustedSafeBinDirs } from "./exec-safe-bin-trust.js";
|
||||
import {
|
||||
getTrustedSafeBinDirs,
|
||||
listWritableExplicitTrustedSafeBinDirs,
|
||||
normalizeTrustedSafeBinDirs,
|
||||
type WritableTrustedSafeBinDir,
|
||||
} from "./exec-safe-bin-trust.js";
|
||||
|
||||
export type ExecSafeBinConfigScope = {
|
||||
safeBins?: string[] | null;
|
||||
@@ -99,12 +104,14 @@ export function resolveMergedSafeBinProfileFixtures(params: {
|
||||
export function resolveExecSafeBinRuntimePolicy(params: {
|
||||
global?: ExecSafeBinConfigScope | null;
|
||||
local?: ExecSafeBinConfigScope | null;
|
||||
onWarning?: (message: string) => void;
|
||||
}): {
|
||||
safeBins: Set<string>;
|
||||
safeBinProfiles: Readonly<Record<string, SafeBinProfile>>;
|
||||
trustedSafeBinDirs: ReadonlySet<string>;
|
||||
unprofiledSafeBins: string[];
|
||||
unprofiledInterpreterSafeBins: string[];
|
||||
writableTrustedSafeBinDirs: ReadonlyArray<WritableTrustedSafeBinDir>;
|
||||
} {
|
||||
const safeBins = resolveSafeBins(params.local?.safeBins ?? params.global?.safeBins);
|
||||
const safeBinProfiles = resolveSafeBinProfiles(
|
||||
@@ -116,17 +123,35 @@ export function resolveExecSafeBinRuntimePolicy(params: {
|
||||
const unprofiledSafeBins = Array.from(safeBins)
|
||||
.filter((entry) => !safeBinProfiles[entry])
|
||||
.toSorted();
|
||||
const explicitTrustedSafeBinDirs = [
|
||||
...normalizeTrustedSafeBinDirs(params.global?.safeBinTrustedDirs),
|
||||
...normalizeTrustedSafeBinDirs(params.local?.safeBinTrustedDirs),
|
||||
];
|
||||
const trustedSafeBinDirs = getTrustedSafeBinDirs({
|
||||
extraDirs: [
|
||||
...normalizeTrustedSafeBinDirs(params.global?.safeBinTrustedDirs),
|
||||
...normalizeTrustedSafeBinDirs(params.local?.safeBinTrustedDirs),
|
||||
],
|
||||
extraDirs: explicitTrustedSafeBinDirs,
|
||||
});
|
||||
const writableTrustedSafeBinDirs = listWritableExplicitTrustedSafeBinDirs(
|
||||
explicitTrustedSafeBinDirs,
|
||||
);
|
||||
if (params.onWarning) {
|
||||
for (const hit of writableTrustedSafeBinDirs) {
|
||||
const scope =
|
||||
hit.worldWritable || hit.groupWritable
|
||||
? hit.worldWritable
|
||||
? "world-writable"
|
||||
: "group-writable"
|
||||
: "writable";
|
||||
params.onWarning(
|
||||
`exec: safeBinTrustedDirs includes ${scope} directory '${hit.dir}'; remove trust or tighten permissions (for example chmod 755).`,
|
||||
);
|
||||
}
|
||||
}
|
||||
return {
|
||||
safeBins,
|
||||
safeBinProfiles,
|
||||
trustedSafeBinDirs,
|
||||
unprofiledSafeBins,
|
||||
unprofiledInterpreterSafeBins: listInterpreterLikeSafeBins(unprofiledSafeBins),
|
||||
writableTrustedSafeBinDirs,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user