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 (sau yum 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, faci ls -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 cu setenforce 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.