Linuxã»ãã¥ãªãã£ã¢ãžã¥ãŒã«ãšSELinuxã®èæ¯
Security Enhanced Linuxã¯ãLinuxã·ã¹ãã ãæœåšçãªè åšããä¿è·ããåŸæ¥ã®Unixã»ãã¥ãªãã£ã·ã¹ãã ã§ããDiscretionary Access ControlïŒDACïŒã®æ¬ é¥ãä¿®æ£ããããã®ãå¿ é ã®åœ¹å²ããŒã¹ã®ã¢ã¯ã»ã¹ã¢ãã«ã«åºã¥ãäžé£ã®ã«ãŒã«ãšã¢ã¯ã»ã¹ã¡ã«ããºã ã§ãããã®ãããžã§ã¯ãã¯ãäž»ã«è«è² æ¥è ã§ããSecure Computing CorporationãšMITREãããã³å€ãã®ç ç©¶æãéçºã«çŽæ¥é¢äžãããç±³åœåœå®¶å®å šä¿éå±ã®è žããå§ãŸããŸããã

Linuxã»ãã¥ãªãã£ã¢ãžã¥ãŒã«
Linus Torvaldsã¯ãã¢ããã¹ããªãŒã Linuxã«ãŒãã«ã«å«ããããšãã§ããããã«ãæ°ããNSAéçºã«ã€ããŠå€ãã®ã³ã¡ã³ããããŸããã圌ã¯ããªããžã§ã¯ãã䜿çšããæäœã管çããããã®äžé£ã®ã€ã³ã¿ãŒã»ãã¿ãŒãšã察å¿ãã屿§ãæ ŒçŽããããã®ã«ãŒãã«ããŒã¿æ§é å ã®äžé£ã®ä¿è·ãã£ãŒã«ããåããäžè¬çãªç°å¢ã«ã€ããŠèª¬æããŸãããæ¬¡ã«ããã®ç°å¢ãããŒãå¯èœãªã«ãŒãã«ã¢ãžã¥ãŒã«ã§äœ¿çšããŠãä»»æã®ã»ãã¥ãªãã£ã¢ãã«ãå®è£ ã§ããŸãã LSMã¯ã2003幎ã«Linuxv2.6ã«ãŒãã«ã«å®å šã«çµã¿èŸŒãŸããŸããã
LSMãã¬ãŒã ã¯ãŒã¯ã«ã¯ãããŒã¿æ§é å ã®ã¬ãŒããã£ãŒã«ããšãã«ãŒãã«ã³ãŒãã®éèŠãªãã€ã³ãã§é¢æ°ãã€ã³ã¿ãŒã»ããããŠãããã管çããã¢ã¯ã»ã¹å¶åŸ¡ãå®è¡ããããã®åŒã³åºããå«ãŸããŠããŸãããŸããã»ãã¥ãªãã£ã¢ãžã¥ãŒã«ãç»é²ããããã®æ©èœã远å ãããŸãã/ sys / kernel / security / lsmã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯ãã·ã¹ãã äžã®ã¢ã¯ãã£ããªã¢ãžã¥ãŒã«ã®ãªã¹ããå«ãŸããŠããŸããLSMããã¯ã¯ãªã¹ãã«æ ŒçŽãããCONFIG_LSMã§æå®ãããé åºã§åŒã³åºãããŸãã詳现ãªããã¯ããã¥ã¡ã³ãã¯ãinclude / linux /lsm_hooks.hããããŒãã¡ã€ã«ã«å«ãŸããŠããŸãã
LSMãµãã·ã¹ãã ã«ãããåãå®å®ããLinuxã«ãŒãã«v2.6ã®å®å šãªSELinuxçµ±åãå¯èœã«ãªããŸãããã»ãŒããã«ãSELinuxã¯å®å šãªLinuxç°å¢ã®äºå®äžã®æšæºãšãªããæã人æ°ã®ãããã£ã¹ããªãã¥ãŒã·ã§ã³ã®äžéšã«ãªããŸããïŒRedHat Enterprise LinuxãFedoraãDebianãUbuntuã
SELinuxçšèªé
- â SELinux , Unix/Linux user id, , . Linux SELinux. SELinux , , â .
- â SELinux , . . . , . â , . : sysadm_t , user_t, . init init_t, named named_t.
- â , SELinux. , . . Role Based Access Control (RBAC), SELinux.
- â Type Enforcement, , . , , , , , , . .
- â , . : , , ., , , â .
- SELinux â SELinux . SELinux , â â . , . .
LSM SELinux
ååã«ãããããããLSMã¯äžè¬çã«LinuxããŒãå¯èœã¢ãžã¥ãŒã«ã§ã¯ãããŸããããã ããSELinuxãšåæ§ã«ãã«ãŒãã«ã«çŽæ¥çµ±åãããŠããŸãã LSMãœãŒã¹ã³ãŒãã倿Žããã«ã¯ãæ°ããã«ãŒãã«ã®ã³ã³ãã€ã«ãå¿ èŠã§ãã察å¿ãããªãã·ã§ã³ãã«ãŒãã«èšå®ã§æå¹ã«ããå¿ èŠããããŸããæå¹ã«ããªããšãèµ·ååŸã«LSMã³ãŒããã¢ã¯ãã£ãåãããŸãããããã§ããOSããŒãããŒããŒãªãã·ã§ã³ã§æå¹ã«ããããšãã§ããŸãã

LSMãã§ãã¯ã¹ã¿ãã¯
LSMã«ã¯ããã§ãã¯ã«é¢é£ããå¯èœæ§ã®ããã³ã¢ã³ã¢æ©èœã®ããã¯ãè£ åãããŠããŸãã LSMã®äž»ãªæ©èœã®1ã€ã¯ãããããã¹ã¿ãã¯ãããŠããããšã§ãããããã£ãŠãæšæºã®ãã§ãã¯ã¯åŒãç¶ãå®è¡ãããåLSMã¬ã€ã€ãŒã¯è¿œå ã®ã³ã³ãããŒã«ãšã³ã³ãããŒã«ã®ã¿ã远å ããŸããããã¯ãçŠæ¢ãããŒã«ããã¯ã§ããªãããšãæå³ããŸãããããå³ã«ç€ºããŸãã宿çãªDACãã§ãã¯ã®çµæã倱æããå ŽåãLSMããã¯ã«ãå°éããŸããã
SELinuxã¯ãFlukeãªãµãŒããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®Flaskã»ãã¥ãªãã£ã¢ãŒããã¯ãã£ãç¹ã«æå°ç¹æš©ã®ååãæ¡çšããŠããŸãããã®æŠå¿µã®æ¬è³ªã¯ããã®ååã瀺ãããã«ãæå³ããã¢ã¯ã·ã§ã³ãå®è¡ããããã«å¿ èŠãªæš©éã®ã¿ããŠãŒã¶ãŒã«ä»äžããããåŠçããããšã§ãããã®ååã¯ãã¢ã¯ã»ã¹ã®åŒ·å¶åä»ãã䜿çšããŠå®è£ ããããããSELinuxã¢ãããã·ã§ã³å¶åŸ¡ã¯ãã¡ã€ã³=>åã¢ãã«ã«åºã¥ããŠããŸãã
ã¢ã¯ã»ã¹ã®åŒ·å¶å ¥åã«ãããSELinuxã«ã¯ãUnix / LinuxOSã§äœ¿çšãããåŸæ¥ã®DACã¢ãã«ãããã¯ããã«éèŠãªã¢ã¯ã»ã¹å¶åŸ¡æ©èœããããŸããããšãã°ãftpãµãŒããŒã§çºçãããããã¯ãŒã¯ããŒãçªå·ãå¶éããããç¹å®ã®ãã©ã«ããŒå ã®ãã¡ã€ã«ã®æžã蟌ã¿ãšå€æŽãèš±å¯ããããåé€ãããããããšã¯ã§ããŸããã
SELinuxã®äž»ãªã³ã³ããŒãã³ãã¯æ¬¡ã®ãšããã§ãã
- Policy EnforcementServer-ã¢ã¯ã»ã¹å¶åŸ¡ãæŽçããããã®äž»èŠãªã¡ã«ããºã ã
- ã·ã¹ãã ã»ãã¥ãªãã£ããªã·ãŒã®ããŒã¿ããŒã¹ã
- LSMã€ãã³ãã€ã³ã¿ãŒã»ãã¿ãŒãšã®çžäºäœçšã
- Selinuxfs -Pseudo-FSã/ procãšåãã§ã/ sys / fs / selinuxã«ããŠã³ããããŸããå®è¡æã«Linuxã«ãŒãã«ã«ãã£ãŠåçã«å ¥åãããSELinuxã¹ããŒã¿ã¹æ å ±ãå«ããã¡ã€ã«ãå«ãŸããŸãã
- ã¢ã¯ã»ã¹ãã¯ã¿ãŒãã£ãã·ã¥-ããã©ãŒãã³ã¹ãã«ããŒã

SELinuxã®ããã¿
ããã¯ãã¹ãŠæ¬¡ã®ããã«æ©èœããŸãã
- äžã®å³ã«ç€ºãããã«ãç¹å®ã®ãµããžã§ã¯ãã¯ãSELinuxã®çšèªã§ã¯ãDACãã§ãã¯åŸã«ãªããžã§ã¯ãã«å¯ŸããŠèš±å¯ãããã¢ã¯ã·ã§ã³ãå®è¡ããŸããæäœãå®è¡ãããã®èŠæ±ã¯ãLSMã€ãã³ãã€ã³ã¿ãŒã»ãã¿ãŒã«éä¿¡ãããŸãã
- ããããããµããžã§ã¯ãããã³ãªããžã§ã¯ãã®ã»ãã¥ãªãã£ã³ã³ããã¹ããšãšãã«ãèŠæ±ã¯ãLSMãšã®å¯Ÿè©±ãæ åœããSELinuxæœè±¡åããã³ããã¯ããžãã¯ã¢ãžã¥ãŒã«ã«æž¡ãããŸãã
- Policy Enforcement Serverã¯ããªããžã§ã¯ããžã®ãµããžã§ã¯ãã®ã¢ã¯ã»ã¹ã決å®ããããã®ã€ã³ã¹ã¿ã³ã¹ã§ãããSELinuxAnHLããã®ããŒã¿ãããã«å±ããŸãã
- ã¢ã¯ã»ã¹ãŸãã¯æåŠã«ã€ããŠæ±ºå®ãäžãããã«ãPolicy Enforcement Serverã¯ãæã䜿çšãããŠããAccess Vector CacheïŒAVCïŒã«ãŒã«ã®ãã£ãã·ã³ã°ãµãã·ã¹ãã ãåç §ããŸãã
- 察å¿ããã«ãŒã«ã®è§£æ±ºçããã£ãã·ã¥ã«èŠã€ãããªãå ŽåãèŠæ±ã¯ã»ãã¥ãªãã£ããªã·ãŒããŒã¿ããŒã¹ã«æž¡ãããŸãã
- DBããã³AVCããã®æ€çŽ¢çµæã¯ãããªã·ãŒå®æœãµãŒããŒã«è¿ãããŸãã
- èŠã€ãã£ãããªã·ãŒãèŠæ±ãããã¢ã¯ã·ã§ã³ãšäžèŽããå Žåãæäœã¯èš±å¯ãããŸãããã以å€ã®å Žåãæäœã¯çŠæ¢ãããŠããŸãã
SELinuxèšå®ã®ç®¡ç
SELinuxã¯ã次ã®3ã€ã®ã¢ãŒãã®ããããã§åäœããŸãã
- æœè¡-ã»ãã¥ãªãã£ããªã·ãŒã®å³æ Œãªé å®ã
- 蚱容-å¶éã®éåã¯èš±å¯ããã察å¿ããããŒã¯ããã°ã«èšé²ãããŸãã
- ç¡å¹-ã»ãã¥ãªãã£ããªã·ãŒã¯æå¹ã§ã¯ãããŸããã
次ã®ã³ãã³ãã䜿çšããŠãSELinuxãã©ã®ã¢ãŒãã«ãããã確èªã§ããŸãã
[admin@server ~]$ getenforce
Permissive
åèµ·åããåã«ã¢ãŒãã倿Žãããããšãã°ã匷å¶ãŸãã¯1ã«èšå®ããŸããpermissiveãã©ã¡ãŒã¿ã¯æ°å€ã³ãŒã0ã«å¯Ÿå¿ããŸãã
[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #
ãã¡ã€ã«ãç·šéããŠã¢ãŒãã倿Žããããšãã§ããŸãã
[admin@server ~]$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE = targete setenfoceãš
ã®éãã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èµ·åæã«ãæ§æãã¡ã€ã«ã®SELINUXãã©ã¡ãŒã¿ãŒã®å€ã«åŸã£ãŠSELinuxã¢ãŒããèšå®ãããããšã§ããããã«ã<=>ãç¡å¹ã«ãã倿Žã¯ã/ etc / selinux / configãã¡ã€ã«ãç·šéããŠåèµ·åããåŸã«ã®ã¿æå¹ã«ãªããŸãã
ç°¡åãªã¹ããŒã¿ã¹ã¬ããŒãã衚瀺ããŸãã
[admin@server ~]$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
äžéšã®ãã€ãã£ããŠãŒãã£ãªãã£ã¯ã-Zãã©ã¡ãŒã¿ã䜿çšããŠSELinux屿§ã衚瀺ããŸãã
[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL PID TTY TIME CMD
system_u:system_r:httpd_t:s0 2914 ? 00:00:04 httpd
system_u:system_r:httpd_t:s0 2915 ? 00:00:00 httpd
system_u:system_r:httpd_t:s0 2916 ? 00:00:00 httpd
system_u:system_r:httpd_t:s0 2917 ? 00:00:00 httpd
...
system_u:system_r:httpd_t:s0 2918 ? 00:00:00 httpd
éåžžã®ls-låºåãšæ¯èŒãããšã次ã®åœ¢åŒã®è¿œå ãã£ãŒã«ããããã€ããããŸãã
<user>:<role>:<type>:<level>
æåŸã®ãã£ãŒã«ãã¯ãç§å¯ã¹ã¿ã³ãã®ãããªãã®ã瀺ãã2ã€ã®èŠçŽ ã®çµã¿åããã§æ§æãããŸãã
- s0-éèŠåºŠãäœã¬ãã«-é«ã¬ãã«ééãšã衚èš
- c0ãc1âŠc1023-ã«ããŽãªã
ã¢ã¯ã»ã¹æ§æã®å€æŽ
semoduleã䜿çšããŠSELinuxã¢ãžã¥ãŒã«ãããŒããããããã远å ããã³åé€ããŸãã
[admin@server ~]$ semodule -l |wc -l #
408
[admin@server ~]$ semodule -e abrt #enable -
[admin@server ~]$ semodule -d accountsd #disable -
[admin@server ~]$ semodule -r avahi #remove -
æåã®ã³ãã³ãsemanageloginã¯ãSELinuxãŠãŒã¶ãŒããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŠãŒã¶ãŒã«ãã€ã³ããã2çªç®ã®ã³ãã³ãã¯ããããªã¹ãããŸããæåŸã«ã-rã¹ã€ãããæå®ããæåŸã®ã³ãã³ãã¯ãSELinuxãŠãŒã¶ãŒããOSã¢ã«ãŠã³ããžã®ãããã³ã°ãåé€ããŸããMLS / MCSç¯å²å€ã®æ§æã®èª¬æã¯åã®ã»ã¯ã·ã§ã³ã«ãããŸãã
[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol
semanage userã³ãã³ãããSELinuxã®ãŠãŒã¶ãŒãšããŒã«éã®ãããã³ã°ã管çããããã«äœ¿çšãããŸãã
[admin@server ~]$ semanage user -l
Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles
guest_u user s0 s0 guest_r
staff_u staff s0 s0-s0:c0.c1023 staff_r sysadm_r
...
user_u user s0 s0 user_r
xguest_u user s0 s0 xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u
ã³ãã³ããã©ã¡ãŒã¿ïŒ
- -ã«ã¹ã¿ã ããŒã«ãããã³ã°ãšã³ããªã远å ããŸãã
- -lãŠãŒã¶ãŒãšåœ¹å²ã®éã®å¯Ÿå¿ã®ãªã¹ãã
- -dãŠãŒã¶ãŒå®çŸ©ã®åœ¹å²ãããã³ã°ãšã³ããªãåé€ããŸãã
- -RãŠãŒã¶ãŒã«å²ãåœãŠããã圹å²ã®ãªã¹ãã
ãã¡ã€ã«ãããŒããããŒã«
åSELinuxã¢ãžã¥ãŒã«ã«ã¯ããã¡ã€ã«ãããŒã¯ããããã®äžé£ã®ã«ãŒã«ãçšæãããŠããŸãããå¿ èŠã«å¿ããŠç¬èªã®ã«ãŒã«ã远å ããããšãã§ããŸããããšãã°ãWebãµãŒããŒã«/ srv / wwwãã©ã«ããŒãžã®ã¢ã¯ã»ã¹æš©ãæãããããšããŸãã
[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/
æåã®ã³ãã³ãã¯æ°ããããŒãã³ã°ã«ãŒã«ãç»é²ãã2çªç®ã®ã³ãã³ãã¯çŸåšã®ã«ãŒã«ã«åŸã£ãŠãã¡ã€ã«ã¿ã€ãããªã»ãããŸãã¯èšå®ããŸãã
åæ§ã«ãTCP / UDPããŒãã¯ã察å¿ãããµãŒãã¹ã®ã¿ããªãã¹ã³ã§ããããã«ããŒã¯ãããŠããŸããããšãã°ãWebãµãŒããŒãããŒã8080ã§ãªãã¹ã³ããã«ã¯ãã³ãã³ããå®è¡ããå¿ èŠããããŸãã
[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080
ããªãã®æ°ã®SELinuxã¢ãžã¥ãŒã«ã«ã¯ãããŒã«å€ããšãããšãã§ãããã©ã¡ãŒã¿ãŒããããŸãããã®ãããªãã©ã¡ãŒã¿ã®å šãªã¹ãã¯ãgetsebool-aã§ç¢ºèªã§ããŸããããªãã¯setseboolã§ããŒã«å€ã倿Žããããšãã§ããŸãã
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off
ã¯ãŒã¯ã·ã§ãããPgadmin-webã€ã³ã¿ãŒãã§ãŒã¹ã«ã¢ã¯ã»ã¹
å®éã®äŸãèããŠã¿ãŸããããPostgreSQLããŒã¿ããŒã¹ç®¡ççšã«RHEL7.6pgadmin4-webã«ã€ã³ã¹ããŒã«ããŸãããpg_hba.confãpostgresql.confãããã³config_local.pyãæ§æãããã©ã«ããŒãžã®æš©éãèšå®ããpipããæ¬ èœããŠããPythonã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ãããšããå°ããªæ¢æ±ãè¡ããŸããããã¹ãŠã®æºåãæŽããŸãããå®è¡ãããšã500 InternalServerãšã©ãŒãçºçããŸãã

å žåçãªå®¹çè ããå§ããŠã/ var / log / httpd / error_logããã§ãã¯ããŸããããã«ã¯ããã€ãã®è峿·±ããšã³ããªããããŸãã ãã®æç¹ã§ãã»ãšãã©ã®Linux管çè ã¯setencorce0ãå®è¡ããããªãã§ããããããã ãã§ããççŽã«èšã£ãŠãç§ãåããŠããããããšãããã¡ãããããã解決çã§ãããæåãšã¯èšããŸããã
[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.
æ§æãããã°ãã«ãããããããSELinuxã¯ãŠãŒã¶ãŒãã¬ã³ããªãŒã§ããsetroubleshootããã±ãŒãžãã€ã³ã¹ããŒã«ããã·ã¹ãã ãã°ã衚瀺ããã ãã§ååã§ãã OSã«systemdãååšããå Žåã§ããsystemctlã䜿çšããã«ããã®æ¹æ³ã§auditdãµãŒãã¹ãåèµ·åããå¿ èŠãããããšã«æ³šæããŠãã ãããã·ã¹ãã ãã°ã«ã¯ããããã¯ã®äºå®ã ãã§ãªããçŠæ¢ãå æããçç±ã𿹿³ã瀺ãããŸãã æ¬¡ã®ã³ãã³ããå®è¡ããŸã ãpgadmin4-webWebããŒãžãžã®ã¢ã¯ã»ã¹ã確èªãããã¹ãŠãæ©èœããŸãã
[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

