Правильная настройка SELinux для работы с сертификатами

Написал Igor Gnatenko . Опубликовано в Без рубрики просмотров 486

Так себеПойдетХорошоПонравилосьОтличный пост (3 votes, average: 5,00 out of 5)
Загрузка...

Привет всем,
что-то давно я ничего не писал. Пришло время исправить это!

Сегодня расскажу о том, как я поборол небольшую проблему в SELinux с доступом к моим сертификатам VPN.
Никогда не отключайте SELinux!
Небольшая история:
Все сертификаты/конфиги от OpenVPN у меня хранятся в ~/Documents/VPN/*/
Когда я подключаюсь через NetworkManager используя сертификаты в этих директориях SELinux орёт, что мол контекст не тот.
Можно, конечно, прописывать контексты через semanage для каждого файла отдельно, но в моём случае это не очень удобно по причине часто добавляющихся конфигов/сертификатов.

Из документации я открыл для себя интересную фичу. semanage умеет в regexp!

Issue:

[[email protected] Home]$ sealert -l 37cd2ab2-75ec-4cf7-97b5-129f27936501
SELinux is preventing /usr/sbin/openvpn from open access on the file .

***** Plugin openvpn (47.5 confidence) suggests ***************************

If you want to mv to standard location so that openvpn can have open access
Then you must move the cert file to the ~/.cert directory
Do
# mv ~/.cert
# restorecon -R -v ~/.cert

***** Plugin openvpn (47.5 confidence) suggests ***************************

If you want to modify the label on so that openvpn can have open access on it
Then you must fix the labels.
Do
# semanage fcontext -a -t home_cert_t
# restorecon -R -v

***** Plugin catchall (6.38 confidence) suggests **************************

If you believe that openvpn should be allowed open access on the file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep openvpn /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

Additional Information:
Source Context system_u:system_r:openvpn_t:s0
Target Context unconfined_u:object_r:user_home_t:s0
Target Objects [ file ]
Source openvpn
Source Path /usr/sbin/openvpn
Port
Host X1Carbon.localdomain
Source RPM Packages openvpn-2.3.2-4.fc21.x86_64
Target RPM Packages
Policy RPM selinux-policy-3.13.1-43.fc21.noarch
Selinux Enabled True
Policy Type targeted
Enforcing Mode Enforcing
Host Name X1Carbon.localdomain
Platform Linux X1Carbon.localdomain
3.15.0-0.rc0.git7.1.fc21.x86_64 #1 SMP Thu Apr 3
01:09:55 UTC 2014 x86_64 x86_64
Alert Count 3
First Seen 2014-04-04 00:11:44 MSK
Last Seen 2014-04-05 22:03:57 MSK
Local ID 37cd2ab2-75ec-4cf7-97b5-129f27936501

Raw Audit Messages
type=AVC msg=audit(1396721037.684:1027): avc: denied { open } for pid=17141 comm="openvpn" path="/home/brain/Documents/VPN/Home/pfSense-udp-1194-brain.p12" dev="dm-2" ino=9964060 scontext=system_u:system_r:openvpn_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file

type=SYSCALL msg=audit(1396721037.684:1027): arch=x86_64 syscall=open success=no exit=EACCES a0=7fff12422f42 a1=0 a2=1b6 a3=7f5ec04aef7c items=0 ppid=17135 pid=17141 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=openvpn exe=/usr/sbin/openvpn subj=system_u:system_r:openvpn_t:s0 key=(null)

Hash: openvpn,openvpn_t,user_home_t,file,open

Fix:

# semanage fcontext -a -t home_cert_t "/home/brain/Documents/VPN(/.*)?/(.*).key"
# semanage fcontext -a -t home_cert_t "/home/brain/Documents/VPN(/.*)?/(.*).p12"
# semanage fcontext -a -t home_cert_t "/home/brain/Documents/VPN(/.*)?/(.*).crt"
# semanage fcontext -a -t home_cert_t "/home/brain/Documents/VPN(/.*)?/(.*).pem"
# restorecon -R -v /home/brain/Documents/VPN/

P.S. Все кастомные контексты хранятся в /etc/selinux/targeted/contexts/files/file_contexts.local

Trackback from your site.

Igor Gnatenko

Руководитель IT отдела / Системный Администратор

Leave a comment