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!?
[[email protected] yum.repos.d]# service mongod status
Redirecting to /bin/systemctl status mongod.service
Failed to get properties: Access denied
[[email protected] yum.repos.d]# exit
logout
[[email protected] ~]$ sudo su -
[[email protected] ~]# 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
[[email protected] log]# ls -ltr /var/lib/ | grep mongo
drwxr-xr-x. 3 mongod mongod 49 Nov 13 23:00 mongo
[[email protected] log]# ls -ltr /var/log/ | grep mongo
drwxr-xr-x. 2 mongod mongod 23 Nov 13 23:00 mongodb
[[email protected] log]# ls -ltr /var/log/mongodb/
total 57488
-rw-r-----. 1 mongod mongod 58859656 Jan 15 16:56 mongod.log
[[email protected] log]# vi /var/log/mongodb/
[[email protected] log]# ls -ltrZ /var/log/mongodb/
-rw-r-----. mongod mongod system_u:object_r:mongod_log_t:s0 mongod.log
[[email protected] log]# pwd
/var/log
[[email protected] log]# ls -ltrZ /var/lib/ | grep mongo
drwxr-xr-x. mongod mongod system_u:object_r:mongod_var_lib_t:s0 mongo
[[email protected] log]# cd /etc/
- faci un find în /etc/* după mongo*.service nu găsești nimic:
[[email protected] 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
)
[[email protected] etc]# systemctl list-
list-dependencies list-jobs list-sockets list-timers list-unit-files list-units
[[email protected] etc]# systemctl list-units | grep mongo
● mongod.service loaded failed failed SYSV: Mongo is a scalable, document-oriented database.
[[email protected] etc]# systemctl list-unit-files | grep mongo
mongod.service disabled
[[email protected] etc]# systemctl enable mongod.service
Failed to execute operation: Access denied
# ----------------- AICI ERA FAZA BAI FRATE, mai SUS -----------------------------
[[email protected] etc]# setenforce 0
[[email protected] etc]# systemctl enable mongod.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.
[[email protected] etc]# setenforce -?
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[[email protected] etc]# setenforce 1
[[email protected] etc]# systemctl list-unit-files | grep mongo
mongod.service enabled
- așa da, mai avem un pic și intrăm în normal:
[[email protected] ~]# 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.
[[email protected] ~]# sudo service mongod start
Redirecting to /bin/systemctl start mongod.service
[[email protected] ~]# 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.
[[email protected] ~]#
Î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.