Landlock(7) Miscellaneous Information Manual Landlock(7) - . (LSM) . . ( ) . : o landlock_create_ruleset(2) o landlock_add_rule(2) o landlock_restrict_self(2) . . Landlock . " " (ruleset) (thread) . : . ( ABI v4) TCP . . . landlock_add_rule(2) landlock_create_ruleset(2) . : LANDLOCK_ACCESS_FS_EXECUTE . LANDLOCK_ACCESS_FS_WRITE_FILE . LANDLOCK_ACCESS_FS_TRUNCATE. ( creat(2)). LANDLOCK_ACCESS_FS_READ_FILE . LANDLOCK_ACCESS_FS_TRUNCATE truncate(2) ftruncate(2) creat(2) open(2) O_TRUNC. ABI . LANDLOCK_ACCESS_FS_IOCTL_DEV ioctl(2) . ioctl(2) . IOCTL LANDLOCK_ACCESS_FS_IOCTL_DEV: o IOCTL (FIOCLEX FIONCLEX) o IOCTL (FIONBIO FIOASYNC) o IOCTL (FIFREEZE FITHAW FIGETBSZ FS_IOC_GETFSUUID FS_IOC_GETFSSYSFSPATH) o IOCTL (FS_IOC_FIEMAP FICLONE FICLONERANGE FIDEDUPERANGE) Landlock . ftruncate(2) ioctl(2) open(2) open(2) LANDLOCK_ACCESS_FS_READ_FILE LANDLOCK_ACCESS_FS_WRITE_FILE. . : LANDLOCK_ACCESS_FS_READ_DIR . : LANDLOCK_ACCESS_FS_REMOVE_DIR . LANDLOCK_ACCESS_FS_REMOVE_FILE ( ) . LANDLOCK_ACCESS_FS_MAKE_CHAR ( ) . LANDLOCK_ACCESS_FS_MAKE_DIR ( ) . LANDLOCK_ACCESS_FS_MAKE_REG ( ) . LANDLOCK_ACCESS_FS_MAKE_SOCK ( ) . LANDLOCK_ACCESS_FS_MAKE_FIFO ( ) . LANDLOCK_ACCESS_FS_MAKE_BLOCK ( ) . LANDLOCK_ACCESS_FS_MAKE_SYM ( ) . LANDLOCK_ACCESS_FS_REFER ( ). Landlock . . . Landlock Landlock . LANDLOCK_ACCESS_FS_REFER : o . EXDEV. o LANDLOCK_ACCESS_FS_MAKE_* . EACCES. o LANDLOCK_ACCESS_FS_REMOVE_* . EACCES. EACCES EXDEV. . 4 Landlock . TCP: LANDLOCK_ACCESS_NET_BIND_TCP TCP . LANDLOCK_ACCESS_NET_CONNECT_TCP TCP . (IPC). Landlock . Landlock ABI 6. : LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET UNIX Landlock ( ). LANDLOCK_SCOPE_SIGNAL . Landlock . . . . ( DAC LSM ). (Bind mounts) OverlayFS Landlock ( mount_namespaces(7)) OverlayFS. . Landlock . . OverlayFS . . . Landlock OverlayFS . OverlayFS . Landlock . clone(2) Landlock . seccomp(2) LSM credentials(7) . Landlock ( POSIX nptl(7)). . . Ptrace . ptrace(2) (tracee) (tracer). IPC Ptrace (sandboxes) . Landlock Landlock Landlock (""). : LANDLOCK_SCOPE_SIGNAL Landlock . LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET unix(7) connect(2) Landlock . sendto(2) connect(2) Landlock . sendto(2) . . IPC landlock_add_rule(2). . LANDLOCK_ACCESS_FS_WRITE_FILE LANDLOCK_ACCESS_FS_TRUNCATE . . creat(2). . . LANDLOCK_ACCESS_FS_WRITE_FILE. truncate(2) open(2) O_RDONLY | O_TRUNC. LANDLOCK_ACCESS_FS_TRUNCATE ftruncate(2). open(2) read(2) write(2) . . Landlock Landlock . Landlock 5.13. Landlock ABI Landlock: +----+--------------------------------+--------------------------------+ |ABI | | | | | | | | | | | +----+--------------------------------+--------------------------------+ | 1 | 5.13 | LANDLOCK_ACCESS_FS_EXECUTE | | | | LANDLOCK_ACCESS_FS_WRITE_FILE | | | | LANDLOCK_ACCESS_FS_READ_FILE | | | | LANDLOCK_ACCESS_FS_READ_DIR | | | | LANDLOCK_ACCESS_FS_REMOVE_DIR | | | | LANDLOCK_ACCESS_FS_REMOVE_FILE | | | | LANDLOCK_ACCESS_FS_MAKE_CHAR | | | | LANDLOCK_ACCESS_FS_MAKE_DIR | | | | LANDLOCK_ACCESS_FS_MAKE_REG | | | | LANDLOCK_ACCESS_FS_MAKE_SOCK | | | | LANDLOCK_ACCESS_FS_MAKE_FIFO | | | | LANDLOCK_ACCESS_FS_MAKE_BLOCK | | | | LANDLOCK_ACCESS_FS_MAKE_SYM | +----+--------------------------------+--------------------------------+ | 2 | 5.19 | LANDLOCK_ACCESS_FS_REFER | +----+--------------------------------+--------------------------------+ | 3 | 6.2 | LANDLOCK_ACCESS_FS_TRUNCATE | +----+--------------------------------+--------------------------------+ | 4 | 6.7 | LANDLOCK_ACCESS_NET_BIND_TCP | | | | LANDLOCK_ACCESS_NET_CONNECT_TCP | +----+--------------------------------+--------------------------------+ | 5 | 6.10 | LANDLOCK_ACCESS_FS_IOCTL_DEV | +----+--------------------------------+--------------------------------+ | 6 | 6.12 | LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET | | | | LANDLOCK_SCOPE_SIGNAL | +----+--------------------------------+--------------------------------+ | 7 | 6.15 | LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF | | | | LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON | | | | LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF | +----+--------------------------------+--------------------------------+ | 8 | 7.0 | LANDLOCK_RESTRICT_SELF_TSYNC | +----+--------------------------------+--------------------------------+ Landlock (ABI) . . (backported) . Landlock ABI LANDLOCK_CREATE_RULESET_VERSION landlock_create_ruleset(2). LANDLOCK_ACCESS_FS_REFER: ABI v1 Landlock ABI v2 . Landlock CONFIG_SECURITY_LANDLOCK. lsm=lsm1,...,lsmN Linux. landlock Landlock. security= CONFIG_LSM. Landlock landlock: Up and running. . : chdir(2) stat(2) flock(2) chmod(2) chown(2) setxattr(2) utime(2) fcntl(2) access(2). Landlock . . . . DESCRIPTION . struct landlock_ruleset_attr attr = {0}; int ruleset_fd; attr.handled_access_fs = LANDLOCK_ACCESS_FS_EXECUTE | LANDLOCK_ACCESS_FS_WRITE_FILE | LANDLOCK_ACCESS_FS_READ_FILE | LANDLOCK_ACCESS_FS_READ_DIR | LANDLOCK_ACCESS_FS_REMOVE_DIR | LANDLOCK_ACCESS_FS_REMOVE_FILE | LANDLOCK_ACCESS_FS_MAKE_CHAR | LANDLOCK_ACCESS_FS_MAKE_DIR | LANDLOCK_ACCESS_FS_MAKE_REG | LANDLOCK_ACCESS_FS_MAKE_SOCK | LANDLOCK_ACCESS_FS_MAKE_FIFO | LANDLOCK_ACCESS_FS_MAKE_BLOCK | LANDLOCK_ACCESS_FS_MAKE_SYM | LANDLOCK_ACCESS_FS_REFER | LANDLOCK_ACCESS_FS_TRUNCATE | LANDLOCK_ACCESS_FS_IOCTL_DEV; ABI Landlock : /* * Table of available file system access rights by ABI version, * numbers hardcoded to keep the example short. */ __u64 landlock_fs_access_rights[] = { (LANDLOCK_ACCESS_FS_MAKE_SYM << 1) - 1, /* v1 */ (LANDLOCK_ACCESS_FS_REFER << 1) - 1, /* v2: add "refer" */ (LANDLOCK_ACCESS_FS_TRUNCATE << 1) - 1, /* v3: add "truncate" */ (LANDLOCK_ACCESS_FS_TRUNCATE << 1) - 1, /* v4: TCP support */ (LANDLOCK_ACCESS_FS_IOCTL_DEV << 1) - 1, /* v5: add "ioctl_dev" */ }; int abi = landlock_create_ruleset(NULL, 0, LANDLOCK_CREATE_RULESET_VERSION); if (abi == -1) { /* * Kernel too old, not compiled with Landlock, * or Landlock was not enabled at boot time. */ perror("Unable to use Landlock"); return; /* Graceful fallback: Do nothing. */ } abi = MIN(abi, 3); /* Only use the available rights in the ruleset. */ attr.handled_access_fs &= landlock_fs_access_rights[abi - 1]; ABI VERSIONS. (LANDLOCK_ACCESS_FS_REFER) : Landlock ABI 1. Landlock ABI 1 . Landlock landlock_create_ruleset(2): ruleset_fd = landlock_create_ruleset(&attr, sizeof(attr), 0); if (ruleset_fd == -1) { perror("Failed to create a ruleset"); exit(EXIT_FAILURE); } . attr.handled_access_fs . /usr. . /usr O_PATH struct landlock_path_beneath_attr . struct landlock_path_beneath_attr path_beneath = {0}; int err; path_beneath.allowed_access = LANDLOCK_ACCESS_FS_EXECUTE | LANDLOCK_ACCESS_FS_READ_FILE | LANDLOCK_ACCESS_FS_READ_DIR; path_beneath.parent_fd = open("/usr", O_PATH | O_CLOEXEC); if (path_beneath.parent_fd == -1) { perror("Failed to open file"); close(ruleset_fd); exit(EXIT_FAILURE); } err = landlock_add_rule(ruleset_fd, LANDLOCK_RULE_PATH_BENEATH, &path_beneath, 0); close(path_beneath.parent_fd); if (err) { perror("Failed to update ruleset"); close(ruleset_fd); exit(EXIT_FAILURE); } /usr . ( set-user-ID). if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) { perror("Failed to restrict privileges"); close(ruleset_fd); exit(EXIT_FAILURE); } . if (landlock_restrict_self(ruleset_fd, 0)) { perror("Failed to enforce ruleset"); close(ruleset_fd); exit(EXIT_FAILURE); } close(ruleset_fd); landlock_restrict_self(2) . Landlock . Landlock ( ) . landlock_create_ruleset(2), landlock_add_rule(2), landlock_restrict_self(2) 3 . . : . 6.18 21 2026 Landlock(7)