闲着没事一番研究,原来可以拦截 getrandom 这个函数的调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <errno.h>
ssize_t getrandom(void *buf, size_t buflen, unsigned int flags) { int fd = open("/dev/urandom", O_RDONLY); if (fd < 0) { errno = EIO; return -1; } ssize_t res = read(fd, buf, buflen); close(fd); return res; }
|
docker中编译这段代码,几分钟搞定,只是docker hub难搞。
1 2
| docker run --rm -v "$(pwd)":/work -w /work ubuntu:latest bash -c \ "apt-get update && apt-get install -y gcc && gcc -fPIC -shared -o getrandom_fallback.so getrandom_fallback.c"
|
gitea/runner-images 中使用 .so 需要两步
- 编辑 .gitea/workflows/docker.yml
1 2 3 4 5 6 7 8 9
| jobs: build: runs-on: ubuntu-latest container: volumes: - /volume1/docker/gitea-runner/getrandom_fallback.so:/usr/local/lib/getrandom_fallback.so:ro env: LD_PRELOAD: /usr/local/lib/getrandom_fallback.so ...
|
- act-runner config.yaml 中加白名单
1 2 3
| container: valid_volumes: - /volume1/docker/gitea-runner/getrandom_fallback.so
|
gitea 中使用 .so 可以在DSM Container Manager中改配置,存储空间和环境变量增加如上配置。