Enterprise Linux
HOGENT applied computer science
Set up the test environment
$ cd elnx-syllabus/demo
$ vagrant up web db
[...]
Interrupt me if you have remarks/questions!
Two VirtualBox VMs, set up with Vagrant
Host | IP | Service |
---|---|---|
web |
192.168.56.72 | http, https (Apache) |
db |
192.168.56.73 | mysql (MariaDB) |
web
, a PHP app runs a query on the db
db
is set up correctly, web
is not$ ./query_db.sh
+ mysql --host=192.168.56.73 --user=demo_user \
+ --password=ArfovWap_OwkUfeaf4 demo \
+ '--execute=SELECT * FROM demo_tbl;'
+----+-------------------+
| id | name |
+----+-------------------+
| 1 | Tuxedo T. Penguin |
| 2 | Bobby Tables |
+----+-------------------+
+ set +x
Should work from
/vagrant/query_db.sh
)TCP/IP protocol stack
Layer | Protocols | Keywords |
---|---|---|
Application | HTTP, DNS, SMB, FTP, … | |
Transport | TCP, UDP | sockets, port numbers |
Internet | IP, ICMP | routing, IP address |
Network access | Ethernet | switch, MAC address |
Physical | cables |
ip link
Know the expected values!
Checking Local network configuration:
ip a
ip r
/etc/resolv.conf
ip address
/etc/sysconfig/network-scripts/ifcfg-*
Example: DHCP
[vagrant@db ~]$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
[...]
Example: Static IP
$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.56.73
NETMASK=255.255.255.0
DEVICE=enp0s8
[...]
Watch the logs: sudo journalctl -f
ip route
/etc/resolv.conf
nameserver
option present?Checking routing within the LAN:
dig
, nslookup
, getent
)ping
ping 192.168.56.72
ping 192.168.56.1
ping 10.0.2.2
ping 10.0.2.3
Remark: some routers block ICMP!
dig icanhazip.com
nslookup icanhazip.com
getent ahosts icanhazip.com
Next step: routing beyond GW
sudo systemctl status SERVICE
sudo ss -tulpn
sudo firewall-cmd --list-all
systemctl status httpd.service
active (running)
vs. inactive (dead)
systemctl start httpd
enabled
vs. disabled
systemctl enable httpd
ss
(not netstat
)
sudo ss -tlnp
sudo ss -ulnp
/etc/services
sudo firewall-cmd --list-all
--add-service
if possible
--get-services
--add-service
and --add-port
--permanent
--reload
firewall rules$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
$ sudo firewall-cmd --reload
journalctl
curl
, smbclient
(Samba), dig
(DNS), etc.ncat
, nc
)journalctl
: journalctl -f -u httpd.service
/var/log/
:
tail -f /var/log/httpd/error_log
apachectl configtest
getsebool
, setsebool
ls -Z
, chcon
, restorecon
sepolicy
ls -Z /var/www/html
sudo restorecon -R /var/www/
sudo chcon -t httpd_sys_content_t test.php
getsebool -a | grep http
sudo setsebool -P httpd_can_network_connect_db on
Let’s try to set DocumentRoot "/vagrant/www"
$ sudo vi /etc/httpd/conf/httpd.conf
$ ls -Z /vagrant/www/
-rw-rw-r--. vagrant vagrant system_u:object_r:vmblock_t:s0 test.php
$ sudo chcon -R -t httpd_sys_content_t /vagrant/www/
chcon: failed to change context of ‘test.php’ to ‘system_u:object_r:httpd_sys_content_t:s0’: Operation not supported
chcon: failed to change context of ‘/vagrant/www/’ to ‘system_u:object_r:httpd_sys_content_t:s0’: Operation not supported
Instead of setting the files to the expected context, allow httpd to access files with vmblock_t
context
Allow Apache to run in “permissive” mode:
$ sudo semanage permissive -a httpd_t
Generate “Type Enforcement” file (.te)
$ sudo audit2allow -a -m httpd-vboxsf > httpd-vboxsf.te
If necessary, edit the policy
$ sudo vi httpd-vboxsf.te
Convert to policy module (.pp)
$ checkmodule -M -m -o httpd-vboxsf.mod httpd-vboxsf.te
$ semodule_package -o httpd-vboxsf.pp -m httpd-vboxsf.mod
Install module
$ sudo semodule -i httpd-vboxsf.pp
Remove permissive domain exception
$ sudo semanage permissive -d httpd_t
Tip: automate this!
E.g. https://github.com/HoGentTIN/elnx-sme/blob/master/test/pu001/lamp.bats