~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/userspace-api/landlock.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/userspace-api/landlock.rst (Version linux-6.12-rc7) and /Documentation/userspace-api/landlock.rst (Version linux-5.2.21)


  1 .. SPDX-License-Identifier: GPL-2.0               
  2 .. Copyright © 2017-2020 Mickaël Salaün <mic    
  3 .. Copyright © 2019-2020 ANSSI                   
  4 .. Copyright © 2021-2022 Microsoft Corporatio    
  5                                                   
  6 =====================================             
  7 Landlock: unprivileged access control             
  8 =====================================             
  9                                                   
 10 :Author: Mickaël Salaün                         
 11 :Date: September 2024                             
 12                                                   
 13 The goal of Landlock is to enable to restrict     
 14 filesystem or network access) for a set of pro    
 15 is a stackable LSM, it makes possible to creat    
 16 security layers in addition to the existing sy    
 17 kind of sandbox is expected to help mitigate t    
 18 unexpected/malicious behaviors in user space a    
 19 any process, including unprivileged ones, to s    
 20                                                   
 21 We can quickly make sure that Landlock is enab    
 22 looking for "landlock: Up and running" in kern    
 23 ``dmesg | grep landlock || journalctl -kb -g l    
 24 Developers can also easily check for Landlock     
 25 :ref:`related system call <landlock_abi_versio    
 26 If Landlock is not currently supported, we nee    
 27 :ref:`configure the kernel appropriately <kern    
 28                                                   
 29 Landlock rules                                    
 30 ==============                                    
 31                                                   
 32 A Landlock rule describes an action on an obje    
 33 perform.  A set of rules is aggregated in a ru    
 34 the thread enforcing it, and its future childr    
 35                                                   
 36 The two existing types of rules are:              
 37                                                   
 38 Filesystem rules                                  
 39     For these rules, the object is a file hier    
 40     and the related filesystem actions are def    
 41     `filesystem access rights`.                   
 42                                                   
 43 Network rules (since ABI v4)                      
 44     For these rules, the object is a TCP port,    
 45     and the related actions are defined with `    
 46                                                   
 47 Defining and enforcing a security policy          
 48 ----------------------------------------          
 49                                                   
 50 We first need to define the ruleset that will     
 51                                                   
 52 For this example, the ruleset will contain rul    
 53 read actions and establish a specific TCP conn    
 54 actions and other TCP actions will be denied.     
 55                                                   
 56 The ruleset then needs to handle both these ki    
 57 required for backward and forward compatibilit    
 58 space may not know each other's supported rest    
 59 to be explicit about the denied-by-default acc    
 60                                                   
 61 .. code-block:: c                                 
 62                                                   
 63     struct landlock_ruleset_attr ruleset_attr     
 64         .handled_access_fs =                      
 65             LANDLOCK_ACCESS_FS_EXECUTE |          
 66             LANDLOCK_ACCESS_FS_WRITE_FILE |       
 67             LANDLOCK_ACCESS_FS_READ_FILE |        
 68             LANDLOCK_ACCESS_FS_READ_DIR |         
 69             LANDLOCK_ACCESS_FS_REMOVE_DIR |       
 70             LANDLOCK_ACCESS_FS_REMOVE_FILE |      
 71             LANDLOCK_ACCESS_FS_MAKE_CHAR |        
 72             LANDLOCK_ACCESS_FS_MAKE_DIR |         
 73             LANDLOCK_ACCESS_FS_MAKE_REG |         
 74             LANDLOCK_ACCESS_FS_MAKE_SOCK |        
 75             LANDLOCK_ACCESS_FS_MAKE_FIFO |        
 76             LANDLOCK_ACCESS_FS_MAKE_BLOCK |       
 77             LANDLOCK_ACCESS_FS_MAKE_SYM |         
 78             LANDLOCK_ACCESS_FS_REFER |            
 79             LANDLOCK_ACCESS_FS_TRUNCATE |         
 80             LANDLOCK_ACCESS_FS_IOCTL_DEV,         
 81         .handled_access_net =                     
 82             LANDLOCK_ACCESS_NET_BIND_TCP |        
 83             LANDLOCK_ACCESS_NET_CONNECT_TCP,      
 84         .scoped =                                 
 85             LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKE    
 86             LANDLOCK_SCOPE_SIGNAL,                
 87     };                                            
 88                                                   
 89 Because we may not know on which kernel versio    
 90 executed, it is safer to follow a best-effort     
 91 should try to protect users as much as possibl    
 92 using.                                            
 93                                                   
 94 To be compatible with older Linux versions, we    
 95 version, and only use the available subset of     
 96                                                   
 97 .. code-block:: c                                 
 98                                                   
 99     int abi;                                      
100                                                   
101     abi = landlock_create_ruleset(NULL, 0, LAN    
102     if (abi < 0) {                                
103         /* Degrades gracefully if Landlock is     
104         perror("The running kernel does not en    
105         return 0;                                 
106     }                                             
107     switch (abi) {                                
108     case 1:                                       
109         /* Removes LANDLOCK_ACCESS_FS_REFER fo    
110         ruleset_attr.handled_access_fs &= ~LAN    
111         __attribute__((fallthrough));             
112     case 2:                                       
113         /* Removes LANDLOCK_ACCESS_FS_TRUNCATE    
114         ruleset_attr.handled_access_fs &= ~LAN    
115         __attribute__((fallthrough));             
116     case 3:                                       
117         /* Removes network support for ABI < 4    
118         ruleset_attr.handled_access_net &=        
119             ~(LANDLOCK_ACCESS_NET_BIND_TCP |      
120               LANDLOCK_ACCESS_NET_CONNECT_TCP)    
121         __attribute__((fallthrough));             
122     case 4:                                       
123         /* Removes LANDLOCK_ACCESS_FS_IOCTL_DE    
124         ruleset_attr.handled_access_fs &= ~LAN    
125         __attribute__((fallthrough));             
126     case 5:                                       
127         /* Removes LANDLOCK_SCOPE_* for ABI <     
128         ruleset_attr.scoped &= ~(LANDLOCK_SCOP    
129                                  LANDLOCK_SCOP    
130     }                                             
131                                                   
132 This enables to create an inclusive ruleset th    
133                                                   
134 .. code-block:: c                                 
135                                                   
136     int ruleset_fd;                               
137                                                   
138     ruleset_fd = landlock_create_ruleset(&rule    
139     if (ruleset_fd < 0) {                         
140         perror("Failed to create a ruleset");     
141         return 1;                                 
142     }                                             
143                                                   
144 We can now add a new rule to this ruleset than    
145 descriptor referring to this ruleset.  The rul    
146 file hierarchy ``/usr``.  Without another rule    
147 denied by the ruleset.  To add ``/usr`` to the    
148 ``O_PATH`` flag and fill the &struct landlock_    
149 descriptor.                                       
150                                                   
151 .. code-block:: c                                 
152                                                   
153     int err;                                      
154     struct landlock_path_beneath_attr path_ben    
155         .allowed_access =                         
156             LANDLOCK_ACCESS_FS_EXECUTE |          
157             LANDLOCK_ACCESS_FS_READ_FILE |        
158             LANDLOCK_ACCESS_FS_READ_DIR,          
159     };                                            
160                                                   
161     path_beneath.parent_fd = open("/usr", O_PA    
162     if (path_beneath.parent_fd < 0) {             
163         perror("Failed to open file");            
164         close(ruleset_fd);                        
165         return 1;                                 
166     }                                             
167     err = landlock_add_rule(ruleset_fd, LANDLO    
168                             &path_beneath, 0);    
169     close(path_beneath.parent_fd);                
170     if (err) {                                    
171         perror("Failed to update ruleset");       
172         close(ruleset_fd);                        
173         return 1;                                 
174     }                                             
175                                                   
176 It may also be required to create rules follow    
177 for the ruleset creation, by filtering access     
178 ABI version.  In this example, this is not req    
179 ``allowed_access`` rights are already availabl    
180                                                   
181 For network access-control, we can add a set o    
182 number for a specific action: HTTPS connection    
183                                                   
184 .. code-block:: c                                 
185                                                   
186     struct landlock_net_port_attr net_port = {    
187         .allowed_access = LANDLOCK_ACCESS_NET_    
188         .port = 443,                              
189     };                                            
190                                                   
191     err = landlock_add_rule(ruleset_fd, LANDLO    
192                             &net_port, 0);        
193                                                   
194 The next step is to restrict the current threa    
195 (e.g. through a SUID binary).  We now have a r    
196 allowing read access to ``/usr`` while denying    
197 the filesystem, and a second rule allowing HTT    
198                                                   
199 .. code-block:: c                                 
200                                                   
201     if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)    
202         perror("Failed to restrict privileges"    
203         close(ruleset_fd);                        
204         return 1;                                 
205     }                                             
206                                                   
207 The current thread is now ready to sandbox its    
208                                                   
209 .. code-block:: c                                 
210                                                   
211     if (landlock_restrict_self(ruleset_fd, 0))    
212         perror("Failed to enforce ruleset");      
213         close(ruleset_fd);                        
214         return 1;                                 
215     }                                             
216     close(ruleset_fd);                            
217                                                   
218 If the ``landlock_restrict_self`` system call     
219 now restricted and this policy will be enforce    
220 children as well.  Once a thread is landlocked    
221 security policy; only adding more restrictions    
222 now in a new Landlock domain, merge of their p    
223 ruleset.                                          
224                                                   
225 Full working code can be found in `samples/lan    
226                                                   
227 Good practices                                    
228 --------------                                    
229                                                   
230 It is recommended setting access rights to fil    
231 possible.  For instance, it is better to be ab    
232 read-only hierarchy and ``~/tmp/`` as a read-w    
233 ``~/`` as a read-only hierarchy and ``~/tmp/``    
234 Following this good practice leads to self-suf    
235 depend on their location (i.e. parent director    
236 relevant when we want to allow linking or rena    
237 access rights per directory enables to change     
238 without relying on the destination directory a    
239 are required for this operation, see ``LANDLOC    
240 documentation).                                   
241                                                   
242 Having self-sufficient hierarchies also helps     
243 rights to the minimal set of data.  This also     
244 i.e.  directories where data can be linked to     
245 this depends on data organization, which might    
246 In this case, granting read-write access to ``    
247 access, would potentially allow to move ``~/tm    
248 and still keep the ability to list the content    
249                                                   
250 Layers of file path access rights                 
251 ---------------------------------                 
252                                                   
253 Each time a thread enforces a ruleset on itsel    
254 with a new layer of policy.  Indeed, this comp    
255 the potentially other rulesets already restric    
256 thread can then safely add more constraints to    
257 ruleset.                                          
258                                                   
259 One policy layer grants access to a file path     
260 encountered on the path grants the access.  A     
261 a file path if all its enforced policy layers     
262 the other system access controls (e.g. filesys    
263 etc.).                                            
264                                                   
265 Bind mounts and OverlayFS                         
266 -------------------------                         
267                                                   
268 Landlock enables to restrict access to file hi    
269 access rights can be propagated with bind moun    
270 Documentation/filesystems/sharedsubtree.rst) b    
271 Documentation/filesystems/overlayfs.rst.          
272                                                   
273 A bind mount mirrors a source file hierarchy t    
274 hierarchy is then composed of the exact same f    
275 be tied, either via the source or the destinat    
276 access when they are encountered on a path, wh    
277 access to multiple file hierarchies at the sam    
278 are the result of bind mounts or not.             
279                                                   
280 An OverlayFS mount point consists of upper and    
281 combined in a merge directory, result of the m    
282 may include files from the upper and lower lay    
283 on the merge hierarchy only reflects on the up    
284 policy point of view, each OverlayFS layers an    
285 standalone and contains their own set of files    
286 different from bind mounts.  A policy restrict    
287 restrict the resulted merged hierarchy, and vi    
288 then only think about file hierarchies they wa    
289 of the underlying filesystem.                     
290                                                   
291 Inheritance                                       
292 -----------                                       
293                                                   
294 Every new thread resulting from a :manpage:`cl    
295 restrictions from its parent.  This is similar    
296 Documentation/userspace-api/seccomp_filter.rst    
297 task's :manpage:`credentials(7)`.  For instanc    
298 Landlock rules to itself, but they will not be    
299 sibling threads (unlike POSIX thread credentia    
300 :manpage:`nptl(7)`).                              
301                                                   
302 When a thread sandboxes itself, we have the gu    
303 policy will stay enforced on all this thread's    
304 creating standalone and modular security polic    
305 automatically be composed between themselves a    
306 policies.                                         
307                                                   
308 Ptrace restrictions                               
309 -------------------                               
310                                                   
311 A sandboxed process has less privileges than a    
312 then be subject to additional restrictions whe    
313 To be allowed to use :manpage:`ptrace(2)` and     
314 process, a sandboxed process should have a sub    
315 which means the tracee must be in a sub-domain    
316                                                   
317 IPC scoping                                       
318 -----------                                       
319                                                   
320 Similar to the implicit `Ptrace restrictions`_    
321 interactions between sandboxes. Each Landlock     
322 for a set of actions by specifying it on a rul    
323 sandboxed process should not be able to :manpa    
324 non-sandboxed process through abstract :manpag    
325 specify such restriction with ``LANDLOCK_SCOPE    
326 Moreover, if a sandboxed process should not be    
327 non-sandboxed process, we can specify this res    
328 ``LANDLOCK_SCOPE_SIGNAL``.                        
329                                                   
330 A sandboxed process can connect to a non-sandb    
331 not scoped. If a process's domain is scoped, i    
332 created by processes in the same scope.           
333 Moreover, If a process is scoped to send signa    
334 only send signals to processes in the same sco    
335                                                   
336 A connected datagram socket behaves like a str    
337 scoped, meaning if the domain is scoped after     
338 still :manpage:`send(2)` data just like a stre    
339 scenario, a non-connected datagram socket cann    
340 :manpage:`sendto(2)`) outside its scope.          
341                                                   
342 A process with a scoped domain can inherit a s    
343 process. The process cannot connect to this so    
344 domain.                                           
345                                                   
346 IPC scoping does not support exceptions, so if    
347 be added to allow access to resources or proce    
348                                                   
349 Truncating files                                  
350 ----------------                                  
351                                                   
352 The operations covered by ``LANDLOCK_ACCESS_FS    
353 ``LANDLOCK_ACCESS_FS_TRUNCATE`` both change th    
354 overlap in non-intuitive ways.  It is recommen    
355 these together.                                   
356                                                   
357 A particularly surprising example is :manpage:    
358 that this system call requires the rights to c    
359 it also requires the truncate right if an exis    
360 already present.                                  
361                                                   
362 It should also be noted that truncating files     
363 ``LANDLOCK_ACCESS_FS_WRITE_FILE`` right.  Apar    
364 system call, this can also be done through :ma    
365 ``O_RDONLY | O_TRUNC``.                           
366                                                   
367 The truncate right is associated with the open    
368                                                   
369 Rights associated with file descriptors           
370 ---------------------------------------           
371                                                   
372 When opening a file, the availability of the `    
373 ``LANDLOCK_ACCESS_FS_IOCTL_DEV`` rights is ass    
374 file descriptor and will be used for subsequen    
375 using :manpage:`ftruncate(2)` and :manpage:`io    
376 to opening a file for reading or writing, wher    
377 :manpage:`open(2)`, but not during the subsequ    
378 :manpage:`write(2)` calls.                        
379                                                   
380 As a consequence, it is possible that a proces    
381 descriptors referring to the same file, but La    
382 when operating with these file descriptors.  T    
383 ruleset gets enforced and the process keeps fi    
384 both before and after the enforcement.  It is     
385 descriptors between processes, keeping their L    
386 of the involved processes do not have an enfor    
387                                                   
388 Compatibility                                     
389 =============                                     
390                                                   
391 Backward and forward compatibility                
392 ----------------------------------                
393                                                   
394 Landlock is designed to be compatible with pas    
395 kernel.  This is achieved thanks to the system    
396 associated bitflags, particularly the ruleset'    
397 handled access right explicit enables the kern    
398 contract with each other.  This is required to    
399 get stricter with a system update, which could    
400                                                   
401 Developers can subscribe to the `Landlock mail    
402 <https://subspace.kernel.org/lists.linux.dev.h    
403 test their applications with the latest availa    
404 users, and because they may use different kern    
405 encouraged to follow a best-effort security ap    
406 ABI version at runtime and only enforcing the     
407                                                   
408 .. _landlock_abi_versions:                        
409                                                   
410 Landlock ABI versions                             
411 ---------------------                             
412                                                   
413 The Landlock ABI version can be read with the     
414 system call:                                      
415                                                   
416 .. code-block:: c                                 
417                                                   
418     int abi;                                      
419                                                   
420     abi = landlock_create_ruleset(NULL, 0, LAN    
421     if (abi < 0) {                                
422         switch (errno) {                          
423         case ENOSYS:                              
424             printf("Landlock is not supported     
425             break;                                
426         case EOPNOTSUPP:                          
427             printf("Landlock is currently disa    
428             break;                                
429         }                                         
430         return 0;                                 
431     }                                             
432     if (abi >= 2) {                               
433         printf("Landlock supports LANDLOCK_ACC    
434     }                                             
435                                                   
436 The following kernel interfaces are implicitly    
437 version.  Features only supported from a speci    
438 as such.                                          
439                                                   
440 Kernel interface                                  
441 ================                                  
442                                                   
443 Access rights                                     
444 -------------                                     
445                                                   
446 .. kernel-doc:: include/uapi/linux/landlock.h     
447     :identifiers: fs_access net_access scope      
448                                                   
449 Creating a new ruleset                            
450 ----------------------                            
451                                                   
452 .. kernel-doc:: security/landlock/syscalls.c      
453     :identifiers: sys_landlock_create_ruleset     
454                                                   
455 .. kernel-doc:: include/uapi/linux/landlock.h     
456     :identifiers: landlock_ruleset_attr           
457                                                   
458 Extending a ruleset                               
459 -------------------                               
460                                                   
461 .. kernel-doc:: security/landlock/syscalls.c      
462     :identifiers: sys_landlock_add_rule           
463                                                   
464 .. kernel-doc:: include/uapi/linux/landlock.h     
465     :identifiers: landlock_rule_type landlock_    
466                   landlock_net_port_attr          
467                                                   
468 Enforcing a ruleset                               
469 -------------------                               
470                                                   
471 .. kernel-doc:: security/landlock/syscalls.c      
472     :identifiers: sys_landlock_restrict_self      
473                                                   
474 Current limitations                               
475 ===================                               
476                                                   
477 Filesystem topology modification                  
478 --------------------------------                  
479                                                   
480 Threads sandboxed with filesystem restrictions    
481 topology, whether via :manpage:`mount(2)` or :    
482 However, :manpage:`chroot(2)` calls are not de    
483                                                   
484 Special filesystems                               
485 -------------------                               
486                                                   
487 Access to regular files and directories can be    
488 according to the handled accesses of a ruleset    
489 come from a user-visible filesystem (e.g. pipe    
490 accessed through ``/proc/<pid>/fd/*``, cannot     
491 restricted.  Likewise, some special kernel fil    
492 be accessed through ``/proc/<pid>/ns/*``, cann    
493 restricted.  However, thanks to the `ptrace re    
494 sensitive ``/proc`` files are automatically re    
495 hierarchies.  Future Landlock evolutions could    
496 restrict such paths with dedicated ruleset fla    
497                                                   
498 Ruleset layers                                    
499 --------------                                    
500                                                   
501 There is a limit of 16 layers of stacked rules    
502 task willing to enforce a new ruleset in compl    
503 rulesets.  Once this limit is reached, sys_lan    
504 E2BIG.  It is then strongly suggested to caref    
505 life of a thread, especially for applications     
506 that may also want to sandbox themselves (e.g.    
507 etc.).                                            
508                                                   
509 Memory usage                                      
510 ------------                                      
511                                                   
512 Kernel memory allocated to create rulesets is     
513 by the Documentation/admin-guide/cgroup-v1/mem    
514                                                   
515 IOCTL support                                     
516 -------------                                     
517                                                   
518 The ``LANDLOCK_ACCESS_FS_IOCTL_DEV`` right res    
519 :manpage:`ioctl(2)`, but it only applies to *n    
520 means specifically that pre-existing file desc    
521 stderr are unaffected.                            
522                                                   
523 Users should be aware that TTY devices have tr    
524 other processes on the same TTY through the ``    
525 commands.  Both of these require ``CAP_SYS_ADM    
526 the behavior is configurable for ``TIOCSTI``.     
527                                                   
528 On older systems, it is therefore recommended     
529 descriptors, or to reopen them from ``/proc/se    
530 ``LANDLOCK_ACCESS_FS_IOCTL_DEV`` right, if pos    
531                                                   
532 Landlock's IOCTL support is coarse-grained at     
533 fine-grained in the future.  Until then, users    
534 guarantees that they need through the file hie    
535 ``LANDLOCK_ACCESS_FS_IOCTL_DEV`` right on file    
536                                                   
537 Previous limitations                              
538 ====================                              
539                                                   
540 File renaming and linking (ABI < 2)               
541 -----------------------------------               
542                                                   
543 Because Landlock targets unprivileged access c    
544 handle composition of rules.  Such property al    
545 Properly handling multiple layers of rulesets,    
546 restrict access to files, also implies inherit    
547 from a parent to its hierarchy.  Because files    
548 their hierarchy, moving or linking a file from    
549 propagation of the hierarchy constraints, or r    
550 according to the potentially lost constraints.    
551 escalations through renaming or linking, and f    
552 Landlock previously limited linking and renami    
553 Starting with the Landlock ABI version 2, it i    
554 control renaming and linking thanks to the new    
555 access right.                                     
556                                                   
557 File truncation (ABI < 3)                         
558 -------------------------                         
559                                                   
560 File truncation could not be denied before the    
561 always allowed when using a kernel that only s    
562                                                   
563 Starting with the Landlock ABI version 3, it i    
564 truncation thanks to the new ``LANDLOCK_ACCESS    
565                                                   
566 Network support (ABI < 4)                         
567 -------------------------                         
568                                                   
569 Starting with the Landlock ABI version 4, it i    
570 bind and connect actions to only a set of allo    
571 ``LANDLOCK_ACCESS_NET_BIND_TCP`` and ``LANDLOC    
572 access rights.                                    
573                                                   
574 IOCTL (ABI < 5)                                   
575 ---------------                                   
576                                                   
577 IOCTL operations could not be denied before th    
578 :manpage:`ioctl(2)` is always allowed when usi    
579 earlier ABI.                                      
580                                                   
581 Starting with the Landlock ABI version 5, it i    
582 :manpage:`ioctl(2)` using the new ``LANDLOCK_A    
583                                                   
584 Abstract UNIX socket scoping (ABI < 6)            
585 --------------------------------------            
586                                                   
587 Starting with the Landlock ABI version 6, it i    
588 connections to an abstract :manpage:`unix(7)`     
589 ``LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET`` to the    
590                                                   
591 Signal scoping (ABI < 6)                          
592 ------------------------                          
593                                                   
594 Starting with the Landlock ABI version 6, it i    
595 :manpage:`signal(7)` sending by setting ``LAND    
596 ``scoped`` ruleset attribute.                     
597                                                   
598 .. _kernel_support:                               
599                                                   
600 Kernel support                                    
601 ==============                                    
602                                                   
603 Build time configuration                          
604 ------------------------                          
605                                                   
606 Landlock was first introduced in Linux 5.13 bu    
607 time with ``CONFIG_SECURITY_LANDLOCK=y``.  Lan    
608 time as the other security modules.  The list     
609 default is set with ``CONFIG_LSM``.  The kerne    
610 contains ``CONFIG_LSM=landlock,[...]`` with ``    
611 potentially useful security modules for the ru    
612 ``CONFIG_LSM`` help).                             
613                                                   
614 Boot time configuration                           
615 -----------------------                           
616                                                   
617 If the running kernel does not have ``landlock    
618 enable Landlock by adding ``lsm=landlock,[...]    
619 Documentation/admin-guide/kernel-parameters.rs    
620 configuration.                                    
621                                                   
622 For example, if the current built-in configura    
623                                                   
624 .. code-block:: console                           
625                                                   
626     $ zgrep -h "^CONFIG_LSM=" "/boot/config-$(    
627     CONFIG_LSM="lockdown,yama,integrity,apparm    
628                                                   
629 ...and if the cmdline doesn't contain ``landlo    
630                                                   
631 .. code-block:: console                           
632                                                   
633     $ sed -n 's/.*\(\<lsm=\S\+\).*/\1/p' /proc    
634     lsm=lockdown,yama,integrity,apparmor          
635                                                   
636 ...we should configure the boot loader to set     
637 list with the ``landlock,`` prefix::              
638                                                   
639   lsm=landlock,lockdown,yama,integrity,apparmo    
640                                                   
641 After a reboot, we can check that Landlock is     
642 kernel logs:                                      
643                                                   
644 .. code-block:: console                           
645                                                   
646     # dmesg | grep landlock || journalctl -kb     
647     [    0.000000] Command line: [...] lsm=lan    
648     [    0.000000] Kernel command line: [...]     
649     [    0.000000] LSM: initializing lsm=lockd    
650     [    0.000000] landlock: Up and running.      
651                                                   
652 The kernel may be configured at build time to     
653 ``capability`` LSMs.  In that case, these LSMs    
654 the ``LSM: initializing`` log line as well, ev    
655 the boot loader.                                  
656                                                   
657 Network support                                   
658 ---------------                                   
659                                                   
660 To be able to explicitly allow TCP operations     
661 ``LANDLOCK_ACCESS_NET_BIND_TCP``), the kernel     
662 (``CONFIG_INET=y``).  Otherwise, sys_landlock_    
663 ``EAFNOSUPPORT`` error, which can safely be ig    
664 operation is already not possible.                
665                                                   
666 Questions and answers                             
667 =====================                             
668                                                   
669 What about user space sandbox managers?           
670 ---------------------------------------           
671                                                   
672 Using user space process to enforce restrictio    
673 to race conditions or inconsistent evaluations    
674 the OS code and state                             
675 <https://www.ndss-symposium.org/ndss2003/traps    
676                                                   
677 What about namespaces and containers?             
678 -------------------------------------             
679                                                   
680 Namespaces can help create sandboxes but they     
681 access-control and then miss useful features f    
682 fine-grained restrictions).  Moreover, their c    
683 issues, especially when untrusted processes ca    
684 `Controlling access to user namespaces <https:    
685                                                   
686 Additional documentation                          
687 ========================                          
688                                                   
689 * Documentation/security/landlock.rst             
690 * https://landlock.io                             
691                                                   
692 .. Links                                          
693 .. _samples/landlock/sandboxer.c:                 
694    https://git.kernel.org/pub/scm/linux/kernel    
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php