systemd-nspawn을 사용하여 제한적인 시스템 호출의 *화이트리스트*를 만드는 방법은 무엇입니까?

systemd-nspawn을 사용하여 제한적인 시스템 호출의 *화이트리스트*를 만드는 방법은 무엇입니까?

잠금장치를 사용하려고 systemd-nspawn하는데오직특정 시스템 호출을 화이트리스트에 추가할 수 있도록 허용합니다. 모든문서, 기본적으로 상당히 느슨한 필터를 가지고 있으며, 수백 개의 서로 다른 시스템 호출로 구성된 대규모 화이트리스트로 구성되어 있습니다. SystemCallFilter=특정 통화를 블랙리스트 또는 화이트리스트에 추가할 수 있다고 주장하는 장치 옵션이 있습니다 . 나는 이것을 시도했고 거기에 시스템 호출을 넣고 완전한 실패를 예상했습니다.

[Exec]
...
# We use way more syscalls than this! This whitelist should fail, but it doesn't because it's not a real whitelist.
SystemCallFilter=open,write,close
...

대신 프로그램이 잘 실행됩니다. 사용 중인 시스템 호출을 명시적으로 비활성화하면 실패할 수 있습니다.

[Exec]
...
# This actually fails, because open's been explicitly blacklisted.
SystemCallFilter=~open,~write
...

또한 블랙리스트는 "화이트리스트"보다 우선하므로 모든 것을 비활성화하고 필요한 것만 켤 수는 없습니다. 화이트리스트는 무시됩니다.

[Exec]
...
# Doesn't work, as ~@default takes precedence over the allowlist so *nothing* is allowed
SystemCallFilter=~@default
# full list is much longer and generated automatically from a docker seccomp .json
SystemCallFilter=open,write,close,...

내가 원하는 것을 달성할 수 있는 방법이 있나요? 저는 기본 화이트리스트에 수백 개의 시스템 호출을 모두 포함하는 블랙리스트를 유지하고 싶지 않습니다. 현재로서는 이것이 유일한 방법인 것 같습니다.

답변1

먼저 seccomp가 활성화되어 있는지 확인하십시오. systemd-exec에 따르면 특정 호출은 항상 허용됩니다. 실행, 쓰기, 열기, 읽기 및 기타 많은 호출이 허용됩니다. SystemCallFilter=는 유효하며 인생에서 SystemCallLog=~chown알 수 없는 것을 쉽게 추가할 수 있도록 해줍니다. 사용법 시스템 호출과 사용된 모든 시스템 호출이 기록됩니다. 에서 검색해 보세요 journalctl _AUDIT_TYPE_NAME=SECCOMP.

귀하의 답변에 대한 자세한 내용은 여기에서 확인하실 수 있습니다.

--system-call-filter=

    Alter the system call filter applied to containers. Takes a space-separated list of system call names or group names (the latter prefixed with "@", as listed by the syscall-filter command of systemd-analyze(1)). Passed system calls will be permitted. The list may optionally be prefixed by "~", in which case all listed system calls are prohibited. If this command line option is used multiple times the configured lists are combined. If both a positive and a negative list (that is one system call list without and one with the "~" prefix) are configured, the negative list takes precedence over the positive list. Note that systemd-nspawn always implements a system call allow list (as opposed to a deny list!), and this command line option hence adds or removes entries from the default allow list, depending on the "~" prefix. Note that the applied system call filter is also altered implicitly if additional capabilities are passed using the --capabilities=.`enter code here

https://www.freedesktop.org/software/systemd/man/latest/systemd-nspawn.html

관련 정보