Tråd bedømmelse:
  • 1 Stemmer - 5 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
Install & config af SELinux på Debian Linux 7 (Wheezy)
14-12-2014, 04:42 (Denne besked var sidst ændret: 14-12-2014, 04:42 af iTick.)
#1
Install & config af SELinux på Debian Linux 7 (Wheezy)
Citer:Selinux 4 access control forms:
- Targeted Enforcement (TE) - Common
- Strict - (TE bare mere strict)
- Role Based Access Control (RBAC)
- Multi-Level Access (MLS)

MCS er Multi Category System, og er en arveart af MLS, med lidt ekstra på.
Denne guide viser hvordan TE sættes op, da det er det mest brugte.

Citer:apt-get install selinux-basics # for check-selinux-installation og selinux-activate
apt-get install auditd # for /var/log/audit/audit.log
apt-get install rcconf # Valgfrit. Bruges til at ændre initscripts i den aktuelle runlevel.
OBS: selinux-policy-default og policycoreutils kommer automatisk med, på grund af package dependencies, så der er ingen grund til at angive dem.

Vi kan starte med at bekræfte at SELinux ikke kører:
Citer:root@selinux:~# sestatus
SELinux status: disabled
root@selinux:~#

For at kontrollere, om SELinux er klar til at blive startet, udføres følgende:

Citer:root@selinux:~# check-selinux-installation
getfilecon: getfilecon(/proc/1) failed
SELinux is not enabled.
Could not read the domain of PID 1.
/etc/pam.d/login is not SELinux enabled
FSCKFIX is not enabled - not serious, but could prevent system from booting...
root@selinux:~#

Der er nogle ting som skal ordnes, før vi kan aktivere SELinux:
"FSCKFIX is not enabled" klares som følgende:
I filen /etc/default/rcS skal vi have sat FSCKFIX til yes i stedet for no.

Den er normalt bare en kommentar:
Citer:...
# automatically repair filesystems with inconsistencies during boot
#FSCKFIX=no
...

Ret den til følgende:
Citer:...
# automatically repair filesystems with inconsistencies during boot
FSCKFIX=yes
...

Så kontrollerer vi installationen igen:
Citer:root@selinux:~# check-selinux-installation
getfilecon: getfilecon(/proc/1) failed
SELinux is not enabled.
Could not read the domain of PID 1.
/etc/pam.d/login is not SELinux enabled
root@selinux:~#

Det er de færreste programmer, som behøver blive ændret eller recompiled, for at køre i et SELinux miljø.
Disse få, er dog ret vigtige. Nogle af de programmer som er "SELinux Aware" er:
login, sshd, cron etc.

Lad os se på følgende fejl:
/etc/pam.d/login is not SELinux enabled

Disse PAM moduler, bliver automatisk rettet, når man kører "selinux-activate".
Det samme gælder opsætningen i grub.
Når denne kommando gives, bliver filen "/.autorelabel" også dannet.
Hvis denne fil findes, når en SELinux installation booter, vil der blive dannet Labels, og dette kan tage en del tid.

Så lad os prøve at aktivere SELinux, og se om det går godt:
Citer:root@selinux:~# selinux-activate
Activating SE Linux
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
done
SE Linux is activated. You may need to reboot now.
root@selinux:~#

Og efterfølgende, rebooter vi linux:
Citer:root@selinux:~# reboot
root@selinux:~#

Dette kan tage lidt tid, så opstarten vil ikke være så hurtig som normalt.
Når vi har bootet, kan vi kontrollere om SELinux er aktiveret:

Citer:root@selinux:~# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: default
Current mode: permissive
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: denied
Max kernel policy version: 26
root@selinux:~#

Og vi kan kontrollere om installationen er, som den skal være:
Citer:root@selinux:~# check-selinux-installation

/etc/pam.d/login is not SELinux enabled
root@selinux:~#

Lige nu kører vi i Permissive Mode, hvilket betyder at vi stadig kan alt hvad vi kunne før, vi får dog nu, alarmer når vi gør noget vi ikke må.
Faktisk lige som når man kører DAC (Discresionary Access Mode), som man gør uden SELinux.
Permissive mode, er kun til at teste om alt virker. Dvs. om vi kan det vi skal kunne, så vi ikke ender med at lukke os selv ude.

For at køre i MAC (Mandatory Access Control) mode, skal vi have sat SELinux i Enforcing mode i stedet for Permissive Mode.

Inden vi gør det, kan det være en god idé at kigge i audit.log, som SELinux lægger sine log entries i.
Citer:root@selinux:~# tail /var/log/audit/audit.log
type=SYSCALL msg=audit(1418501038.226:9): arch=c000003e syscall=42 success=yes exit=0 a0=3 a1=7fc5ff434e50 a2=6e a3=0 items=0 ppid=2440 pid=2441 auid=4294967295 uid=104 gid=108 euid=104 suid=104 fsuid=104 egid=108 sgid=108 fsgid=108 tty=(none) ses=4294967295 comm="psql" exe="/usr/lib/postgresql/9.1/bin/psql" subj=system_u:system_r:postgresql_t:s0 key=(null)
type=AVC msg=audit(1418501042.669:10): avc: denied { search } for pid=2713 comm="exim4" name="crypto" dev=proc ino=6740 scontext=system_u:system_r:exim_t:s0 tcontext=system_u:object_r:sysctl_crypto_t:s0 tclass=dir
type=AVC msg=audit(1418501042.669:10): avc: denied { read } for pid=2713 comm="exim4" name="fips_enabled" dev=proc ino=6741 scontext=system_u:system_r:exim_t:s0 tcontext=system_u:object_r:sysctl_crypto_t:s0 tclass=file
type=AVC msg=audit(1418501042.669:10): avc: denied { open } for pid=2713 comm="exim4" name="fips_enabled" dev=proc ino=6741 scontext=system_u:system_r:exim_t:s0 tcontext=system_u:object_r:sysctl_crypto_t:s0 tclass=file
type=SYSCALL msg=audit(1418501042.669:10): arch=c000003e syscall=2 success=yes exit=4 a0=7fe1a790ab10 a1=0 a2=1b6 a3=0 items=0 ppid=2712 pid=2713 auid=4294967295 uid=101 gid=104 euid=101 suid=101 fsuid=101 egid=104 sgid=104 fsgid=104 tty=(none) ses=4294967295 comm="exim4" exe="/usr/sbin/exim4" subj=system_u:system_r:exim_t:s0 key=(null)
type=AVC msg=audit(1418501042.669:11): avc: denied { getattr } for pid=2713 comm="exim4" path="/proc/sys/crypto/fips_enabled" dev=proc ino=6741 scontext=system_u:system_r:exim_t:s0 tcontext=system_u:object_r:sysctl_crypto_t:s0 tclass=file
type=SYSCALL msg=audit(1418501042.669:11): arch=c000003e syscall=5 success=yes exit=0 a0=4 a1=7fff95fbae00 a2=7fff95fbae00 a3=0 items=0 ppid=2712 pid=2713 auid=4294967295 uid=101 gid=104 euid=101 suid=101 fsuid=101 egid=104 sgid=104 fsgid=104 tty=(none) ses=4294967295 comm="exim4" exe="/usr/sbin/exim4" subj=system_u:system_r:exim_t:s0 key=(null)
type=LOGIN msg=audit(1418501049.988:12): login pid=2749 uid=0 old auid=4294967295 new auid=0 old ses=4294967295 new ses=1
type=LOGIN msg=audit(1418501074.436:13): login pid=2799 uid=0 old auid=4294967295 new auid=0 old ses=4294967295 new ses=2
type=LOGIN msg=audit(1418501821.801:14): login pid=2864 uid=0 old auid=4294967295 new auid=0 old ses=4294967295 new ses=3
root@selinux:~#

Her kan det ses, at exim4, forsøger at gøre nogle ting, som ikke ville være tilladt, hvis SELinux var i Enforcing mode.
Man kan vælge at rette den policy, exim4 bruger, men exim4 skal alligevel ikke bruges, så denne fjernes med kommandoen rcconf:
Citer:root@selinux:~# rcconf --off exim4
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: start runlevel arguments (none) do not match exim4 Default-Start values (2 3 4 5)
update-rc.d: warning: stop runlevel arguments (0 1 2 3 4 5 6) do not match exim4 Default-Stop values (0 1 6)
root@selinux:~#

Og så stopper vi exim4 processen:
Citer:root@selinux:~# service exim4 stop
[ ok ] Stopping MTA: exim4_listener.
root@selinux:~#

For en sikkerheds skyld, kan vi kontrollere at alt har fået labels:
Citer:root@selinux:~# fixfiles relabel

Files in the /tmp directory may be labeled incorrectly, this command
can remove all files in /tmp. If you choose to remove files from /tmp,
a reboot will be required after completion.

Do you wish to clean out the /tmp directory [N]? n
Relabeling / /dev /dev/pts /run /run/lock /run/shm /sys
**************************************************************
find: unknown predicate `-context'
find: unknown predicate `-context'
find: unknown predicate `-context'
find: unknown predicate `-context'
root@selinux:~#

De fire "find: unknown predicate `-context'" er harmløse.

Lad os sætte SELinux i Enforcing mode:
Citer:root@selinux:~# setenforce enforcing
root@selinux:~# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: default
Current mode: enforcing
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: denied
Max kernel policy version: 26
root@selinux:~#

Nu er SELinux kørende i Enforcing mode.
Som man kan se i ovenstående, er vores Current mode Enforcing, men Mode from config file, er Permissive.
Dette hjælper også med, ikke at få lukket sig selv ude, hvis man får lavet noget, for restriktivt.
Det sker dog normalt ikke, når man kører i Targeted Enforcement (TE) mode, hvor brugere generelt set, stadig får lov at være brugere.
Root er stadig root.

For at gøre dette permanent, skal man rette /etc/selinux/config, så man kører enforcing, også efter en reboot:
Citer:root@selinux:/etc/selinux# cat 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=permissive
# SELINUXTYPE= can take one of these two values:
# default - equivalent to the old strict and targeted policies
# mls - Multi-Level Security (for military and educational use)
# src - Custom policy built from source
SELINUXTYPE=default

# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0
root@selinux:/etc/selinux#
Sæt SELINUX til enforcing, SELINUX=enforcing i /etc/selinux/config

For at være sikker på, ingen retter i denne, kan man sætte filen til at være immutable, så ikke engang root kan ændre eller slette filen:
Citer:root@selinux:/etc/selinux# chattr +i /etc/selinux/config
root@selinux:/etc/selinux# lsattr /etc/selinux/
-------------e-- /etc/selinux/semanage.conf
-------------e-- /etc/selinux/default
----i--------e-- /etc/selinux/config
-------------e-- /etc/selinux/restorecond_user.conf
-------------e-- /etc/selinux/restorecond.conf
root@selinux:/etc/selinux#

Done! God fornøjelse.
---
Writing a shellcode decoder stub in assembly is like talking gibberish in such a way that it is still perfectly intelligible. - iTick
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
14-12-2014, 10:52 (Denne besked var sidst ændret: 14-12-2014, 10:53 af Doctor Blue.)
#2
RE: Install & config af SELinux på Debian Linux 7 (Wheezy)
Fed tekst du har fået lavet der. SELinux er ikke noget jeg er så latterligt bekendt med, men burde tjekke ud.
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
14-12-2014, 14:06
#3
RE: Install & config af SELinux på Debian Linux 7 (Wheezy)
Det er heldigvis ikke så slemt at rode med, som det var før i tiden. Det er blevet en hel del lettere.
Det er så nok også derfor, jeg har givet mig i kast med det. :)
---
Writing a shellcode decoder stub in assembly is like talking gibberish in such a way that it is still perfectly intelligible. - iTick
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »




User(s) browsing this thread: 1 Gæst(er)