docker.if 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. ## <summary>The open-source application container engine.</summary>
  2. ########################################
  3. ## <summary>
  4. ## Execute docker in the docker domain.
  5. ## </summary>
  6. ## <param name="domain">
  7. ## <summary>
  8. ## Domain allowed to transition.
  9. ## </summary>
  10. ## </param>
  11. #
  12. interface(`docker_domtrans',`
  13. gen_require(`
  14. type docker_t, docker_exec_t;
  15. ')
  16. corecmd_search_bin($1)
  17. domtrans_pattern($1, docker_exec_t, docker_t)
  18. ')
  19. ########################################
  20. ## <summary>
  21. ## Execute docker in the caller domain.
  22. ## </summary>
  23. ## <param name="domain">
  24. ## <summary>
  25. ## Domain allowed to transition.
  26. ## </summary>
  27. ## </param>
  28. #
  29. interface(`docker_exec',`
  30. gen_require(`
  31. type docker_exec_t;
  32. ')
  33. corecmd_search_bin($1)
  34. can_exec($1, docker_exec_t)
  35. ')
  36. ########################################
  37. ## <summary>
  38. ## Search docker lib directories.
  39. ## </summary>
  40. ## <param name="domain">
  41. ## <summary>
  42. ## Domain allowed access.
  43. ## </summary>
  44. ## </param>
  45. #
  46. interface(`docker_search_lib',`
  47. gen_require(`
  48. type docker_var_lib_t;
  49. ')
  50. allow $1 docker_var_lib_t:dir search_dir_perms;
  51. files_search_var_lib($1)
  52. ')
  53. ########################################
  54. ## <summary>
  55. ## Execute docker lib directories.
  56. ## </summary>
  57. ## <param name="domain">
  58. ## <summary>
  59. ## Domain allowed access.
  60. ## </summary>
  61. ## </param>
  62. #
  63. interface(`docker_exec_lib',`
  64. gen_require(`
  65. type docker_var_lib_t;
  66. ')
  67. allow $1 docker_var_lib_t:dir search_dir_perms;
  68. can_exec($1, docker_var_lib_t)
  69. ')
  70. ########################################
  71. ## <summary>
  72. ## Read docker lib files.
  73. ## </summary>
  74. ## <param name="domain">
  75. ## <summary>
  76. ## Domain allowed access.
  77. ## </summary>
  78. ## </param>
  79. #
  80. interface(`docker_read_lib_files',`
  81. gen_require(`
  82. type docker_var_lib_t;
  83. ')
  84. files_search_var_lib($1)
  85. read_files_pattern($1, docker_var_lib_t, docker_var_lib_t)
  86. ')
  87. ########################################
  88. ## <summary>
  89. ## Read docker share files.
  90. ## </summary>
  91. ## <param name="domain">
  92. ## <summary>
  93. ## Domain allowed access.
  94. ## </summary>
  95. ## </param>
  96. #
  97. interface(`docker_read_share_files',`
  98. gen_require(`
  99. type docker_share_t;
  100. ')
  101. files_search_var_lib($1)
  102. read_files_pattern($1, docker_share_t, docker_share_t)
  103. ')
  104. ########################################
  105. ## <summary>
  106. ## Manage docker lib files.
  107. ## </summary>
  108. ## <param name="domain">
  109. ## <summary>
  110. ## Domain allowed access.
  111. ## </summary>
  112. ## </param>
  113. #
  114. interface(`docker_manage_lib_files',`
  115. gen_require(`
  116. type docker_var_lib_t;
  117. ')
  118. files_search_var_lib($1)
  119. manage_files_pattern($1, docker_var_lib_t, docker_var_lib_t)
  120. manage_lnk_files_pattern($1, docker_var_lib_t, docker_var_lib_t)
  121. ')
  122. ########################################
  123. ## <summary>
  124. ## Manage docker lib directories.
  125. ## </summary>
  126. ## <param name="domain">
  127. ## <summary>
  128. ## Domain allowed access.
  129. ## </summary>
  130. ## </param>
  131. #
  132. interface(`docker_manage_lib_dirs',`
  133. gen_require(`
  134. type docker_var_lib_t;
  135. ')
  136. files_search_var_lib($1)
  137. manage_dirs_pattern($1, docker_var_lib_t, docker_var_lib_t)
  138. ')
  139. ########################################
  140. ## <summary>
  141. ## Create objects in a docker var lib directory
  142. ## with an automatic type transition to
  143. ## a specified private type.
  144. ## </summary>
  145. ## <param name="domain">
  146. ## <summary>
  147. ## Domain allowed access.
  148. ## </summary>
  149. ## </param>
  150. ## <param name="private_type">
  151. ## <summary>
  152. ## The type of the object to create.
  153. ## </summary>
  154. ## </param>
  155. ## <param name="object_class">
  156. ## <summary>
  157. ## The class of the object to be created.
  158. ## </summary>
  159. ## </param>
  160. ## <param name="name" optional="true">
  161. ## <summary>
  162. ## The name of the object being created.
  163. ## </summary>
  164. ## </param>
  165. #
  166. interface(`docker_lib_filetrans',`
  167. gen_require(`
  168. type docker_var_lib_t;
  169. ')
  170. filetrans_pattern($1, docker_var_lib_t, $2, $3, $4)
  171. ')
  172. ########################################
  173. ## <summary>
  174. ## Read docker PID files.
  175. ## </summary>
  176. ## <param name="domain">
  177. ## <summary>
  178. ## Domain allowed access.
  179. ## </summary>
  180. ## </param>
  181. #
  182. interface(`docker_read_pid_files',`
  183. gen_require(`
  184. type docker_var_run_t;
  185. ')
  186. files_search_pids($1)
  187. read_files_pattern($1, docker_var_run_t, docker_var_run_t)
  188. ')
  189. ########################################
  190. ## <summary>
  191. ## Execute docker server in the docker domain.
  192. ## </summary>
  193. ## <param name="domain">
  194. ## <summary>
  195. ## Domain allowed to transition.
  196. ## </summary>
  197. ## </param>
  198. #
  199. interface(`docker_systemctl',`
  200. gen_require(`
  201. type docker_t;
  202. type docker_unit_file_t;
  203. ')
  204. systemd_exec_systemctl($1)
  205. init_reload_services($1)
  206. systemd_read_fifo_file_passwd_run($1)
  207. allow $1 docker_unit_file_t:file read_file_perms;
  208. allow $1 docker_unit_file_t:service manage_service_perms;
  209. ps_process_pattern($1, docker_t)
  210. ')
  211. ########################################
  212. ## <summary>
  213. ## Read and write docker shared memory.
  214. ## </summary>
  215. ## <param name="domain">
  216. ## <summary>
  217. ## Domain allowed access.
  218. ## </summary>
  219. ## </param>
  220. #
  221. interface(`docker_rw_sem',`
  222. gen_require(`
  223. type docker_t;
  224. ')
  225. allow $1 docker_t:sem rw_sem_perms;
  226. ')
  227. #######################################
  228. ## <summary>
  229. ## Read and write the docker pty type.
  230. ## </summary>
  231. ## <param name="domain">
  232. ## <summary>
  233. ## Domain allowed access.
  234. ## </summary>
  235. ## </param>
  236. #
  237. interface(`docker_use_ptys',`
  238. gen_require(`
  239. type docker_devpts_t;
  240. ')
  241. allow $1 docker_devpts_t:chr_file rw_term_perms;
  242. ')
  243. #######################################
  244. ## <summary>
  245. ## Allow domain to create docker content
  246. ## </summary>
  247. ## <param name="domain">
  248. ## <summary>
  249. ## Domain allowed access.
  250. ## </summary>
  251. ## </param>
  252. #
  253. interface(`docker_filetrans_named_content',`
  254. gen_require(`
  255. type docker_var_lib_t;
  256. type docker_share_t;
  257. type docker_log_t;
  258. type docker_var_run_t;
  259. type docker_home_t;
  260. ')
  261. files_pid_filetrans($1, docker_var_run_t, file, "docker.pid")
  262. files_pid_filetrans($1, docker_var_run_t, sock_file, "docker.sock")
  263. files_pid_filetrans($1, docker_var_run_t, dir, "docker-client")
  264. files_var_lib_filetrans($1, docker_var_lib_t, dir, "docker")
  265. filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "config.env")
  266. filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "hosts")
  267. filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "hostname")
  268. filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "resolv.conf")
  269. filetrans_pattern($1, docker_var_lib_t, docker_share_t, dir, "init")
  270. userdom_admin_home_dir_filetrans($1, docker_home_t, dir, ".docker")
  271. ')
  272. ########################################
  273. ## <summary>
  274. ## Connect to docker over a unix stream socket.
  275. ## </summary>
  276. ## <param name="domain">
  277. ## <summary>
  278. ## Domain allowed access.
  279. ## </summary>
  280. ## </param>
  281. #
  282. interface(`docker_stream_connect',`
  283. gen_require(`
  284. type docker_t, docker_var_run_t;
  285. ')
  286. files_search_pids($1)
  287. stream_connect_pattern($1, docker_var_run_t, docker_var_run_t, docker_t)
  288. ')
  289. ########################################
  290. ## <summary>
  291. ## Connect to SPC containers over a unix stream socket.
  292. ## </summary>
  293. ## <param name="domain">
  294. ## <summary>
  295. ## Domain allowed access.
  296. ## </summary>
  297. ## </param>
  298. #
  299. interface(`docker_spc_stream_connect',`
  300. gen_require(`
  301. type spc_t, spc_var_run_t;
  302. ')
  303. files_search_pids($1)
  304. files_write_all_pid_sockets($1)
  305. allow $1 spc_t:unix_stream_socket connectto;
  306. ')
  307. ########################################
  308. ## <summary>
  309. ## All of the rules required to administrate
  310. ## an docker environment
  311. ## </summary>
  312. ## <param name="domain">
  313. ## <summary>
  314. ## Domain allowed access.
  315. ## </summary>
  316. ## </param>
  317. #
  318. interface(`docker_admin',`
  319. gen_require(`
  320. type docker_t;
  321. type docker_var_lib_t, docker_var_run_t;
  322. type docker_unit_file_t;
  323. type docker_lock_t;
  324. type docker_log_t;
  325. type docker_config_t;
  326. ')
  327. allow $1 docker_t:process { ptrace signal_perms };
  328. ps_process_pattern($1, docker_t)
  329. admin_pattern($1, docker_config_t)
  330. files_search_var_lib($1)
  331. admin_pattern($1, docker_var_lib_t)
  332. files_search_pids($1)
  333. admin_pattern($1, docker_var_run_t)
  334. files_search_locks($1)
  335. admin_pattern($1, docker_lock_t)
  336. logging_search_logs($1)
  337. admin_pattern($1, docker_log_t)
  338. docker_systemctl($1)
  339. admin_pattern($1, docker_unit_file_t)
  340. allow $1 docker_unit_file_t:service all_service_perms;
  341. optional_policy(`
  342. systemd_passwd_agent_exec($1)
  343. systemd_read_fifo_file_passwd_run($1)
  344. ')
  345. ')
  346. interface(`domain_stub_named_filetrans_domain',`
  347. gen_require(`
  348. attribute named_filetrans_domain;
  349. ')
  350. ')
  351. interface(`lvm_stub',`
  352. gen_require(`
  353. type lvm_t;
  354. ')
  355. ')
  356. interface(`staff_stub',`
  357. gen_require(`
  358. type staff_t;
  359. ')
  360. ')
  361. interface(`virt_stub_svirt_sandbox_domain',`
  362. gen_require(`
  363. attribute svirt_sandbox_domain;
  364. ')
  365. ')
  366. interface(`virt_stub_svirt_sandbox_file',`
  367. gen_require(`
  368. type svirt_sandbox_file_t;
  369. ')
  370. ')
  371. interface(`fs_dontaudit_remount_tmpfs',`
  372. gen_require(`
  373. type tmpfs_t;
  374. ')
  375. dontaudit $1 tmpfs_t:filesystem remount;
  376. ')
  377. interface(`dev_dontaudit_list_all_dev_nodes',`
  378. gen_require(`
  379. type device_t;
  380. ')
  381. dontaudit $1 device_t:dir list_dir_perms;
  382. ')
  383. interface(`kernel_unlabeled_entry_type',`
  384. gen_require(`
  385. type unlabeled_t;
  386. ')
  387. domain_entry_file($1, unlabeled_t)
  388. ')
  389. interface(`kernel_unlabeled_domtrans',`
  390. gen_require(`
  391. type unlabeled_t;
  392. ')
  393. read_lnk_files_pattern($1, unlabeled_t, unlabeled_t)
  394. domain_transition_pattern($1, unlabeled_t, $2)
  395. type_transition $1 unlabeled_t:process $2;
  396. ')
  397. interface(`files_write_all_pid_sockets',`
  398. gen_require(`
  399. attribute pidfile;
  400. ')
  401. allow $1 pidfile:sock_file write_sock_file_perms;
  402. ')
  403. interface(`dev_dontaudit_mounton_sysfs',`
  404. gen_require(`
  405. type sysfs_t;
  406. ')
  407. dontaudit $1 sysfs_t:dir mounton;
  408. ')