Alte "probleme" cu SELinux
Jan. 14, 2019, 1:18 p.m. linux centos selinux
Salut si LMA 2019!
Am vrut să aduc la zi un server care rula un mongod 2.6. Am respectat instrucțiunile din documentația oficială:
- adaugă noul repo cu versiunea dorită în
/etc/yum.repos.d/mongodb.repo
, - execută
yum update
(sauyum install -y mongodb-org
, cum spun ei, pentru că dacă ai o versiune veche de mongo instalată cu yum o să facă tot update - asta îmi și doresc) - dacă ești aiurit și ai uitat să oprești serviciul mongod înainte, faci
ps -def | grep mongod
și kill PID-ul mongod service mongod restart
- whaaaat!?
Access Denied
service mongod status
- whaaat!?
[root@spaceport yum.repos.d]# service mongod status
Redirecting to /bin/systemctl status mongod.service
Failed to get properties: Access denied
[root@spaceport yum.repos.d]# exit
logout
[somelinuxuser@spaceport ~]$ sudo su -
[root@spaceport ~]# sudo service mongod start
Redirecting to /bin/systemctl start mongod.service
Failed to start mongod.service: Access denied
See system logs and 'systemctl status mongod.service' for details.
- te uiți la permisiuni de fisiere, stergi
/var/lib/mongo/mongod.lock
, verifici permisiunile la directoarele mongo, nimic - îți amintești de SELinux, te uiti în
/var/log/audit/audit.log
, și nu-ți spune nimic - citești vechiul articol despre SELinux, încerci
audit2why
dar nu prea merge, facils -lZ
pe unde apuci
[root@spaceport log]# ls -ltr /var/lib/ | grep mongo
drwxr-xr-x. 3 mongod mongod 49 Nov 13 23:00 mongo
[root@spaceport log]# ls -ltr /var/log/ | grep mongo
drwxr-xr-x. 2 mongod mongod 23 Nov 13 23:00 mongodb
[root@spaceport log]# ls -ltr /var/log/mongodb/
total 57488
-rw-r-----. 1 mongod mongod 58859656 Jan 15 16:56 mongod.log
[root@spaceport log]# vi /var/log/mongodb/
[root@spaceport log]# ls -ltrZ /var/log/mongodb/
-rw-r-----. mongod mongod system_u:object_r:mongod_log_t:s0 mongod.log
[root@spaceport log]# pwd
/var/log
[root@spaceport log]# ls -ltrZ /var/lib/ | grep mongo
drwxr-xr-x. mongod mongod system_u:object_r:mongod_var_lib_t:s0 mongo
[root@spaceport log]# cd /etc/
- faci un find în /etc/* după mongo*.service nu găsești nimic:
[root@spaceport etc]# find . -name mongod.service
- "WTF unde a dispărut?", serviciul chiar trebuia să fie în
etc
. Ciudat, sapi pe direcția asta: - cauți documentație, cauți stackoverflow, cu sudoarea vei face iar
setenforce 0
pentru ca repede, repede, repede, repede să rulezi comenzile problemă (ca să poți activa iar SELinux cusetenforce 1
)
[root@spaceport etc]# systemctl list-
list-dependencies list-jobs list-sockets list-timers list-unit-files list-units
[root@spaceport etc]# systemctl list-units | grep mongo
● mongod.service loaded failed failed SYSV: Mongo is a scalable, document-oriented database.
[root@spaceport etc]# systemctl list-unit-files | grep mongo
mongod.service disabled
[root@spaceport etc]# systemctl enable mongod.service
Failed to execute operation: Access denied
# ----------------- AICI ERA FAZA BAI FRATE, mai SUS -----------------------------
[root@spaceport etc]# setenforce 0
[root@spaceport etc]# systemctl enable mongod.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.
[root@spaceport etc]# setenforce -?
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@spaceport etc]# setenforce 1
[root@spaceport etc]# systemctl list-unit-files | grep mongo
mongod.service enabled
- așa da, mai avem un pic și intrăm în normal:
[root@spaceport ~]# sudo service mongod status
Redirecting to /bin/systemctl status mongod.service
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2019-01-15 16:56:10 EET; 44min ago
Docs: https://docs.mongodb.org/manual
Main PID: 5837 (code=exited, status=0/SUCCESS)
Jan 13 00:32:00 spaceport systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Jan 13 00:32:00 spaceport runuser[4133]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Jan 13 00:32:37 spaceport runuser[4133]: pam_unix(runuser:session): session closed for user mongod
Jan 13 00:32:37 spaceport mongod[4077]: Starting mongod: [ OK ]
Jan 13 00:32:37 spaceport systemd[1]: Started SYSV: Mongo is a scalable, document-oriented database..
Jan 15 16:56:10 spaceport systemd[1]: mongod.service: control process exited, code=exited status=203
Jan 15 16:56:10 spaceport systemd[1]: Unit mongod.service entered failed state.
Jan 15 16:56:10 spaceport systemd[1]: mongod.service failed.
[root@spaceport ~]# sudo service mongod start
Redirecting to /bin/systemctl start mongod.service
[root@spaceport ~]# sudo service mongod status
Redirecting to /bin/systemctl status mongod.service
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-01-15 17:40:37 EET; 6s ago
Docs: https://docs.mongodb.org/manual
Process: 13752 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
Process: 13750 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 13747 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 13744 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Main PID: 13755 (mongod)
Tasks: 17
CGroup: /system.slice/mongod.service
└─13755 /usr/bin/mongod -f /etc/mongod.conf
Jan 15 17:40:36 spaceport systemd[1]: Starting High-performance, schema-free document-oriented database...
Jan 15 17:40:36 spaceport mongod[13752]: about to fork child process, waiting until server is ready for connections.
Jan 15 17:40:36 spaceport mongod[13752]: forked process: 13755
Jan 15 17:40:37 spaceport systemd[1]: Started High-performance, schema-free document-oriented database.
[root@spaceport ~]#
În concluzie, upgrade-ul de la MongoDB 2.6 la 3.6 (inițial am dorit la 3.4, dar după toată bătaia de cap am spus că măcar să incrementez +1) este practic "painless", dacă nu ești paranoic și ai SELinux activat și "enforced" (atenție informații despre configurarea SEL găsiți și în documentația MongoDB).
Însă la fel de clar este că SEL își face treaba, și anume te încurcă la maxim când apar schimbări. Ăsta este însă rolul lui. Nu este invulnerabil - este greu de spus dacă este posibilă o configurație garantat impenetrabilă a unui server, mai ales cu access la "internet" - însă te ajută la reducerea vectorilor de atac și îți oferă timp.
Întrucât nu mai am timp, o să-ți mai spun ce cred că poți face cu acest timp căștigat mai sus, într-un articol următor.