Blog Post

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!?
[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, faci ls -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 cu setenforce 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.