RHCE Cheat Sheet

I created the notes beneath for preparing myself for the RHCE exam; please note that they do not contain questions/content of the exam. Talking about formal or technical details of the exam is strictly forbidden by Red Hat.

The notes are partly in German and badly formatted. Sorry about that, I just copied and pasted this stuff from my private wiki. Enjoy!

==== 1 - Systemkonfiguration und -verwaltung ====
=== 1.1 - IP-Verkehr umleiten und statische Routen erstellen ===
  * route -n und netstat -rn zeigen die aktuelle Routing-Tabelle.
  * route add default gw 10.0.2.1
  * route add default gw 10.0.2.1 dev eth1
  * Default-Route reboot-fest hinterlegen, in dem ein GW unter system-config-network eingetragen wird.
  * nm-connection-editor = Network-Manager -> Hier können ebenfalls IPs hinterlegt werden
  * Der Network-Manager erstellt Einträge in /etc/sysconfig/network-scripts
  * Nach dem Neustart des Netzwerk-Services finden sich dann entsprechende Änderungen in der Routing-Tabelle wieder.

=== 1.2 - IP-Tabellen zur Implementierung der Paketfilterung und NAT-Konfiguration (Network Address Translation) verwenden ===
  * Philosophie hinter IPTABLES: chains (also Ketten, sets of Rules) being applied to each network packet
  * Jede Rolle legt eine Bedingung fest, die auf das Paket zutreffen soll und spezifiziert die Aktion für dieses Paket.
  * Pattern eines IPTABLES-Kommandos: iptables - <tabletype> <action direction> <packet pattern> -j <what to do>
  * tabletype: filter oder nat; default is "filter"
  * action direction: -A (appends a rule to the end of the chain), -D (deletes a rule from the chain), -L (lists the rules of the chain), -F (flushes the rules in the current chain)
  * directions: INPUT, OUTPUT, FORWARD
  * packet pattern: -s <ip>, -d <ip>, -p tcp --dport <port> etc.
  *  -j <what to do>: DROP, REJECT (error is sent), ACCEPT
  * iptables -L: list current configuration 
  * Hierarchie: Eine Chain (z. B. INPUT) enthält mehrere Regeln
  * /etc/init.d/iptables start und chkconfig iptables on
  * Rules sind hier abgelegt: /etc/sysconfig/iptables
  * state: ESTABLISHED, RELATED (für follow-on network traffic, such as FTP)
  * system-config-firewall
  * system-config-firewall-tui
  * Beispiel: iptables -t filter -A INPUT -p tcp -sport 22 -j ACCEPT
  * nmap und telnet zum Verifizieren von Regeln verwenden
  * Beispiel für eine SSH-Chain:
  * -N SSH_CHAIN 
  * -A input -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j SSH_CHAIN 
  * -A SSH_CHAIN  -m recent --set --name SSH 
  * -A SSH_CHAIN -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP
  * Es gibt POSTROUTING, MASQUERADE, NAT...IP Forwarding (= Routing)
  * IP Forwarding aktivieren mit vim /etc/sysctl.conf -> 0 durch die 1 austauschen, Reboot
  * Oder: echo 1 > /proc/sys/net/ipv4/ip_forward
  * Im RHCE: Wenn IP Forwarding aktiviert wird, sollte es auch entsprechend in der IPTABLES-Konfiguration berücksichtigt werden
  * Beispiel: iptables -A FORWARD -o eth0 -j accept
  * system-config-firewall -> Neues Network-Device adden -> -A INPUT -i eth0+ -j accept
  * Achtung: Das "+" ist eine Art Wildcard, also wirkt wie das Sternchen ("*")
  * Custom-Rules erstellen, z. B. in /root/iptables-custom -> system-config-firewall, "Custom Rules" -> Regeln hinzufügen, danach sind sie in /etc/sysconfig/iptables sichtbar
  * xinetd kann dran kommen, siehe Beispiele unter /etc/xine...

=== 1.3 - Mit „/proc/sys“ und „sysctl“ Kernel-Laufzeitparameter ändern und festlegen ===
  * Kernel run-time Parameter beziehen sich im RHCE auf Dateien in /proc/sys und das sysctl-Kommando.
  * Dazu gehört auch die Datei /etc/sysctl.conf, die während des Boot-Vorgangs ausgewertet wird, um /proc/sys zu erweitern.
  * Beispielinhalt von /etc/sysctl.conf: net.ipv4.ip_forward = 0 -> Muss im RHCE häufig auf "1" gesetzt werden.
  * Die Config /etc/sysctl.conf neu einlesen lassen: sysctl -p
  * Die Variable net.ipv4.ip_forward findet sich in der Proc-Partition hier: /proc/sys/net/ipv4/ip_forward
  * IPv6-Forwarding aktivieren: net.ipv6.conf.all.forwarding=1 in /etc/sysctl.conf
  * net.ipv4.conf.default.rp_filter = 1 -> Stellt sicher, dass externe Pakete auch wirklich "extern" sind.

=== 1.4 - Ein Authentifizierungssystem unter Verwendung von LDAP konfigurieren ===
  * yum install nss-pam-ldapd
  * system-config-authentication = authconfig-gtk
  * Alternative zur GUI: authconfig-tui

=== 1.5 - Einfache RPM mit einer einzelnen Datei erstellen ===
  * Wenn Paket-Sourcen als unpriviligierter User herunter geladen werden, sind sie im Home zu finden: /home/<user>rpmbuild
  * Source-Pakete können beispielsweise fon ftp.redhat.com bezogen werden (Download mit lftp).
  * Bsp.: get fsvtpd-2.2.2-6.el6.src.rpm
  * Entpacken eines RPM-Pakets: rpm -ivh vsftpd*.src.rpm -> Liegt dann unter $HOME/rpmbuild
  * yum install rpm-build rpmdevtools
  * Paket bauen: Z. B. mit rpmbuild -ba oder rpmbuild -bb (ba=binary and source package; bb=binary package)
  * Beim Paketbau gehen die Tools davon aus, dass sich unter rpmbuild/SPECS eine Datei mit den Build-Anweisungen befindet.
  * Bauen mit: rpmbuild -ba rpmbuild/SPECS/vsftpd.spec -> RPM-Tools machen auf unerfüllte Abhängigkeiten aufmerksam
  * Nachinstallieren mit: yum install gcc pam-devel ...
  * Nach dem Build-Vorgang befindet sich das RPM-Paket unter $HOME/rpmbuild/RPMs/i386
  * Unter $HOME/custom/ den Ordner vho-1.0 erstellt (1.0 für die Paketversion). Darin eine Datei abgelegt und die leere Datei configure erstellt (mit +x).
  * tar czvf vho-1.0.tar.gz /root/custom/vho-1.0 -> Archiv erstellen und nach $HOME/rpmbuild/SOURCES verschieben
  * Paket fakeroot muss installiert sein
  * Folgende Kommandos sind nun wichtig: rpmdev-setuptree (erstellt das rpmbuild-Verzeichnis) und rpmdev-newspec (erstellt ein neues Paket-Spec-File)
  * Im RHCE also tun: rpmdev-setuptree -> gzip nach rpmbuild/SOURCES kopieren -> Spec-File erstellen mit rpmdev-newspec
  * Im lokalen Verzeichnis liegt nun ein Spec-File -> umbennennen nach vho.spec
  * --------------------------------------------------------------
  * Name: vho
  * Version: 1.0
  * Summary: Beschreibung..
  * Group: Miscellaneous
  * License: GPL
  * URL: http...
  * Source0: vho-1.0.tar.gz
  * #BuildRequires <-- Auskommentieren
  * #Requires <-- Auskommentieren
  * #configure <-- Auskommentieren
  * # make.. <-- Auskommentieren
  * #make install <-- Auskommentieren
  * Unter %install und rm -rf ..
  * install -d -m 0755 $RPM_BUILD_ROOT/opt/vho-1.0
  * install -m 0644 dmesg $RPM_BUILD_ROOT/opt/vho-1.0/dmesg
  * Unter %doc am Ende..
  * /opt/vho-1.0/dmesg
  * --------------------------------------------------------------
  * cp vho.spec /root/rpmbuild/SPECS
  * Bauen mit rpmbuild -ba /root/rpmbuild/SPECS/vho.spec
  * Das nun erzeugte Paket ist unter /root/rpmbuild/RPMS/i386/vho-1.0-1.el6.i386.rpm zu finden.rpm
  * rpm -qi gibt vho-1.0 gibt Aufschluss über ein installiertes Paket; die Ausgabe zeigt den formatierten Inhalt des Spec-Files.

=== 1.6 - Ein System als iSCSI-Initiator konfigurieren, der ein iSCSI-Ziel beständig bereitstellt ===
  * yum groupinstall "iSCSI Storage Client"
  * chckconfig iscsi on und chkconfig iscsid on
  * Nach der Konfiguration sollte sich die Datei /etc/nsswitch.conf verändert haben (z. B. bei Zeile "passwd").
  * iSCSI initiator = iSCSI client
  * iSCSI-CLI-SRV-Kommunikation via Port 3260
  * yum install iscsi-initiator-utils
  * iscsiadm -m disverydb -t st -p 10.0.2.1 -D sucht nach ISCSI-Targets
  * Wenn was gefunden wurde -> /etc/init.d/iscsi start
  * /etc/init.d/iscsi status zeigt Status
  * In /var/log/messages taucht das neue Ziel dann als Platte auf (z. B. /dev/sg3)
  * Diese Platte kann als lokale Platte behandelt werden.
  * chkconfig iscsi on
  * iSCSI-Platte formatieren und mit UUIDs in /etc/fstab einbinden
  * yum search iscsi -> yum install iscsi-initi*
  * man iscsiadm
  * /dev/sdd1 /mnt/iscsi ext4 _netdev 0 0 -> Nachsehen mit man 8 mount

  * icsciadm --mode discoverydb --type sendtargets --portal 172.29.88.145 --discover
  * falls das noch nicht ausreicht:
  * iscsiadm --mode node --targetname coreboso-zarafa.coreboso.de:storage.lun1 --portal 172.29.88.145:3260 --login
  * Danach taucht in /var/log/messages auf "[sda] Attached SCSI disk"

=== 1.7 - Berichte zur Systemauslastung generieren und bereitstellen (Prozessor, Arbeitsspeicher, Festplatte und Netzwerk) ===
  * U.a. sar
  * top
  * atop
  * dstat
  * yum install sysstat
  * chkconfig sysstat on
  * sadf
  * sadf -s 00:00:01 -e 23:59:59 /var/log/sa/sa08 >activity08 -> Report für den 8. Tag im Monat
  * sadf -d /var/log/sa/sa07 -- -r -n DEV -> Report based on memory, swap space and network statistics
  * Bericht zur Systemauslastung generieren (CPU, RAM, HD, Netzwerk:
      * sadf -f /var/log/sa/sa08 -- -u -r -dp -n DEV
  * -- = sar switches
  * -u = CPU
  * -r = block device
  * -dp = block devices with more familiar lock, such as /dev/sda
  * -n DEV = network statistics

=== 1.8 - Shell-Scripting zur Automatisierung von Systemverwaltungsaufgaben einsetzen ===
  * Ausgabeumleitung: blabla >/dev/null 2>&amp;amp;1 leitet stdout und stderr nach /dev/null um.
  * Die Shell-Variable $? enthält den Exit-Code.
  * Der Exit-Code 0 bedeutet "alles ok", während "1" fast immer ein Fehler ist.
  * Beispiel: if [ $? != 0 ]; then echo "bla"; fi
  * Beispiel: if [ ! -f /var/log/mesages ]; then... -> Checkt, ob die Datei messages keine Datei ist
  * Beispiel: if [ -e /var/log/messages ]; then .. -> Checkt, ob die Datei existiert
  * Aktionen für mehrere Einträge wiederholen, z. B.: ll /var/{cache,log}
  * Beispiel: find /var/log -type f -exec grep bla {} +
  * in-out-Script mit -z $1 und [ $1 != "in" ] &amp;amp;&amp;amp; [ $1 != "out" ]; then...

=== 1.9 - Ein System für die Anmeldung bei einem Remote-System konfigurieren ===
  * Kerberos
  * Dateien /etc/sssd und /etc/nsswitch.conf sichern vor Änderungen
  * sssd = System Security Services Daemon
  * Bei der Konfiguration eines Kerberos-Servers muss Port 88 in der FW geöffnet sein.
  * yum install nss-pam-ldapd
  * system-config-authentication = authconfig-gtk
  * yum install pam_krb5
  * Alternative zur GUI: authconfig-tui
  * Nach der Konfiguration sollte sich die Datei /etc/nsswitch.conf verändert haben (z. B. bei Zeile "passwd").
  * Nach der Konfiguration zur Verifikation in /etc/sssd/sssd.conf rein blicken.

=== 1.10 - Ein System für das Protokollieren von einem Remote-System konfigurieren ===
  * Port 518 (UDP) muss in der FW geöffnet sein
  * chkconfig rsyslog on
  * Module für den rsyslogd können in folgende Kategorien unterteilt werden: input, output, library
  * yum install rsyslog
  * 
  * vim /etc/rsyslog.conf <-- Server-Config
      * #$ModLoad imudp <<-- Kommentar entfernen
      * #$UDPServerRun 514 <<-- Kommentar entfernen
  * /etc/init.d/rsyslog restart
  * vim /etc/rsyslog.conf <-- Client-Config
      * *.* @@10.0.2.15:514 am Ende der Datei


==== 2 - Netzwerkservices ====
=== 2.1 - Installieren der für die Bereitstellung der Services erforderlichen Pakete ===
  * yum install ...

=== 2.2 - Konfigurieren von SELinux für die Unterstützung des Services ===
  * getsebool <boolean name> -> Aktuelle Einstellung ausgeben lassen
  * chcon
  * ls -Z
  * system-config-selinux -> erst vorhanden, wenn yum install policycoreutils-gui ausgeführt wird
  * cat /selinux/booleans/ftp_home_dir etc.. gibt "0 0" aus - eine Null für die aktuelle Einstellung, eine für die permanente
  * setsebool ftp_home_dir 1 pder togglesebool ftp_home_dir  würden beide diese Boolean bis zum Reboot aktivieren
  * setsebool -P <boolean> <Wert> setzt die Einstellung permanent.
  * /selinux/booleans enthält die Dateien mit den Selinux-Booleans
  * semanage boolean -l zeigt diese Dateien auch an; entspricht quasi einem getsebool *
  * semanage steht erst zur Verfügung, wenn das entsprechende Paket nachinstalliert wird: yum install policycoreutils-python
  * Einige Selinux-Booleans funktionieren nur, wenn der entsprechende Selinux file context gesetzt ist.
  * Beispiel: allow_http_anon_write funktioniert nur, wenn /var/www/html/files mit public_content_rw_type gesetzt ist.
  * Beispiel: chcon -R -t public_content_rw_type /var/www/html/files
  * Es gibt keine Selinux-Booleans für den NTP-Dienst
  * Achtung: Wenn man das Selinux-Boolean httpd_enable_homedirs setzt, muss man immer noch die Datei /etc/httpd/conf/httpd.conf anpassen und den Zugriff auf User-Homes zulassen.
  * Selinux geht bei HTTP-Booleans davon aus, dass man den Apache verwendet.
  * BIND: Berkeley Internet Name Domain
  * Bei der Verwendung von BIND sollte das Selinux-Boolean named_write_master_zones aktiviert werden.
  * Selinux geht davon aus, dass man den vsFTPd verwendet.
  * Bei der Verwendung von vsftpd und Selinux müssen die ganzen Booleans noch aktiviert werden. Vermutlich muss man auch den entsprechenden Selinux file context setzen...
  * Die wichtigsten/einzigen FTP-Booleans: allow_ftpd_anon_write (File-Context setzen!), allow_ftpd_full_access, allow_ftpd_use_cifs, allow_ftpd_use_nfs, ftpd_connect_db, ftp_home_dir (allow access to user home directories).
  * Bei der Verwendung von NFS mit Selinux sind die meisten Booleans bereits aktiviert.
  * Die NFS-Booleans: cdrecord_read_content, nfs_export_all_ro, nfs_export_all_rw, qemu_use_nfs, use_nfs_home_dirs, virt_use_nfs.
  * Bei der Verwendung von Samba und Selinux muss man die entsprechenden Booleans erst aktivieren.
  * Die Samba-Booleans: allow_smbd_anon_write (Achtung, File-Context setzen!), samba_create_home_dir, samba_domain_controller, samba_enable_home_dirs, samba_export_all_ro, samba_export_all_rw, samba_run_unconfined (Achtung, Label!), samba_share_fusefs, samba_share_nfs, use_samba_home_dirs, virt_use_samba.
  * Red Hat verwendet den Postfix als SMTP-Server.
  * In Verbindung mit SMTP existieren folgende zwei Booleans: allow_postfix_local_write_mail_spool und httpd_can_sendmail.
  * Exim brächte übrigens ebenfalls eigene Booleans mit.
  * SSH bringt diese Booleans mit, die üblicherweise nicht aktiviert werden: allow_ssh_keysign (host-based auth.) und ssh_sysadmin_log (supports access by users configured with the sysadm_r role).
  * SELinux File Contexts: Änderungen via chcon sind nur temporär, da sie zwar einen Reboot, nicht aber jedoch das Relabeling überstehen.
  * restorecon relabels a targeted directory.
  * Die SELinux-Kontexte sind in /etc/selinux/targeted/contexts/files abgespeichert.
  * Via semanage kann man die chcon-Änderungen permanent schreiben lassen.
  * Beispiel: semanage fcontext -a -s system_u -t httpd_sys_content_t /www/ * <-- Funktioniert nur ohne Stern?
  * Das obere Kommando erstellt eine Datei namens file_contexts.local unter /etc/selinux/targeted/contexts/files.

=== 2.3 - Konfiguration des Services, sodass er beim Systemstart gestartet wird ===
  * chkconfig <bla> on

=== 2.4 - Konfiguration des Services für den einfachen Betrieb ===
  * PAM - /etc/pam.d/..
  * vim /etc/bla/bla.conf

=== 2.5 - Konfiguration von Host-basierten und benutzerbasierten Sicherheitstechniken für den Service ===
  * ldd /path/binary |grep libwrap.0.so -> Ist für diesen Dienst der TCP-Wrapper nutzbar?
  * vim /etc/hosts.allow und /etc/hosts.deny
  * Beispiel: sshd: 192.168.122.50
  * /etc/hosts.allow hat immer Vorrang
  * Auf /etc/nologin achten!
  * Auf SELinux-Booleans bei SSH achten!
  * Generell: Siehe SSH-Confgi!
  * "HostBasedAuthentication yes" in /etc/sshd_config, z. B..
  * "AllowUsers michael donna valentin" in /etc/sshd_config.
  * /etc/hosts.allow -> sshd:  127.  192.168.122. -> /etc/hosts.deny -> sshd:  ALL


==== 3 - HTTP/HTTPS ====
=== 3.1 - Einen virtuellen Host konfigurieren. ===
  * yum install httpd oder yum groupinstall "Web Server"
  * yum install httpd-manual
  * chkconfig httpd on
  * system-config-firewall -> Port 80 und 443
  * SELinux?
  * elinks ist ein schicker Web-Browser für die Shell.
  * /etc/httpd/conf/httpd.conf
  * /etc/httpd/conf/ssl.conf
  * SELinux File-Kontext setzen: chcon -R -u system_u /var/www/
  * und chcon -R -t httpd_sys_content_t /var/www/
  * semanage fcontext -a -s system_u -t httpd_sys_content_t /var/www/
  * httpd.conf: ServerToken OS -> Apache-Banner
  * httpd.conf: Order deny, allow und Deny from 127.262.126.125/24  -> Host-basierte Zugriffsrechte
  * SELinux-Boolean httpd_enable_homedirs aktivieren: setbool -P httpd_enable_homedirs 1
  * httpd.conf: #UserDir disabled
  * httpd.conf: UserDir public_html
  * chmod 701 /home/<user>/ und chmod 701 /home/<user>public_html
  * Weiter absichern mit setfacl -m u:apache:x /home/michael
  * Weiter absichern mit setfacl -m u:apache:x /home/michael/public_html
  * httpd.conf: Sektion mit <Directory /home/*/... aktivieren
  * Apache2 restart
  * Richtig: /etc/httpd/conf/httpd.conf öffnen
  * Den Virtual-Host-Block am Ende des Dokuments auskommentieren und wie gewünscht abändern
  * Beispiel:
<code>
<Virtual Host *:80>
  ServerAdmin valentin@xenuser.org
  DocumentRoot /var/www/html/bla
  ServerName haha.example.com
   [...]
</VirtualHost>
</code>

  * Mit chcon und semanage dafür sorgen, dass /var/www/html/bla den richten File-Kontext besitzt.
  * Config überprüfen mit httpd -t oder httpd -S oder httpd -D DUMP_VHOSTS
  * service httpd restart
  * In /etc/hosts den ServerName eintragen, also z. B. "127.0.0.1 haha.localdomain"
  * Ggf. yum install mod_ssl für HTTPS-Vhosts
  * /etc/httpd/conf.d/ssl.conf: HTTPS-Settings mit vordefiniertem VHost
  * Zusätzlich die Optionen DocumentRoot und ServerName setzen -> SELinux beachten und httpd-Restart!
  * Neues Zertifikat generieren: cd /etc/pki/tls/certs &amp;amp;&amp;amp; genkey vhostname.domain.tld -> 512, No (no encryption, no passprase... Done
  * httpd-Restart
  * Scho gehts 🙂

=== 3.2 - Private Verzeichnisse konfigurieren ===
  * vim /etc/http/conf/httpd.conf:
<code>

<Directory "/var/www/hmtl/bla"> <-- Achtung, bestehender Vhost!
  AuthType Basic
  AuthName "bla"
  AuthUserFile /ec/httpd/webpass
  Require user valentin
  AllowOverride Options
</Directory>

</code>
  * htpasswd -c /etc/httpd/webpass valentin
  * mkdir /var/www/html/help
  * Bei Bedarf: chcon -R -u system_u /var/www/html/bla
  * Bei Bedarf: semanage fcontext -a -s system_u -t httpd_sys_content_t /var/www/html/bla

=== 3.3 - Eine einfache CGI-Anwendung bereitstellen ===
  * chcon -R -u system_u /var/www/cgi-bin
  * chcon -R -t httpd_sys_script_exec_t /var/www/cgi-bin
  * semanage fcontext -a -s system_u -t httpd_sys_script_exec_t /var/www/cgi-bin
  * SELinux-Boolean httpd_enable_cgi aktivieren
  * vim /etc/httpd/conf/httpd.conf -> cgi-bind-VHost anpassen:
    * Options ExecCGI
    * AddHandler cgi-script .pl
  * Im eigenen VHost haha die folgende Zeile einfügen:
    * ScriptAlias /cgi-bin /var/www/cgi-bin/
  * http://haha.localdomain/cgi-bin/hello.pl funktioniert! 🙂

=== 3.4 - Von der Gruppe verwaltete Inhalte konfigurieren ===
  * /etc/httpd/conf/httpd.conf: UserDir disabled <-- Kommentieren
  * httpd.conf: UserDir public_html <-- Auskommentieren
  * service httpd restart
  * SELinux-Boolean httpd_enable_homedirs aktivieren: setbool -P httpd_enable_homedirs 1
  * chmod 701 /home/<user>/ und chmod 701 /home/<user>public_html
  * Weiter absichern mit setfacl -m u:apache:x /home/michael
  * Weiter absichern mit setfacl -m u:apache:x /home/michael/public_html
  * httpd.conf: Sektion mit <Directory /home/*/public_html... aktivieren
  * Achtung, Selinux! chcon -u system_u /home/<user>/public_html
  * chcon -R -t httpd_sys_content_t /home/<user>/public_html
  * semange fcontext -a -s system_u -t httpd_sys_content_t /home/<user>/public_html
  -> Stimmt alles nicht 🙁
  * Siehe auch: http://rhce.dposs.org/index.php?title=Configure_group-managed_content
Create a regular user support and make other users member of that group. Set up permissions for directory /home/support like 2771.
#chmod  -R 2771 /home/support
Log in as a user member of the new group. Create new file in the public_html subdirectory. Check the ownership of the file. Make sure Apache can read that file


==== 4 - DNS ====
Hinweis: Es wird nicht erwartet, dass ein Master- oder Slave-DNS-Server konfiguriert wird.
  * yum groupinstall "Network Infrastructure Server" bzw. yum install bind
  * chkconfig named on
  * Die wichtigsten Pakete: bind, bind-chroot, bind-devel, bind-dyndb-ldap, bind-libs, bind-sdb, bind-utils
  * Vier verschiedene Arten von DNS-Server:
      * Master DNS Server: Authorative for at least one domain, includes host records for that domain
      * Slave DNS SErver: Relies on a master DNS server for data, can be used in place of that master DNS
      * Caching-Only DNS server: Stores recent requests like a proxy server
      * Forwarding-only DNS server: Refers all requests to other DNS servers
  * Die wichtigsten Dateien
      * /etc/sysconfig/named
      * /etc/named.conf -> root:named  system_u:object_r:named_conf_t:s0
      * /etc/named.iscdlv.key
      * /etc/named.rfc1912.zones
      * /etc/rdnc.key
      * /var/named/named.empty
      * /var/named/named.localhost
      * /var/named/named.loopback
  * forward only; könnte in /etc/named.conf gesetzt werden, falls man einen forward-only konfigurieren müsste.
  * rdnc flush bei Caching-Problemen

=== 4.1 - Einen „Caching-Only-Namensserver“ konfigurieren. ===
  * Nach der Installation ist der bind bereits per default als "caching-only"-Server konfiguriert.
  * chkconfig named on
  * system-config-firewall -> Ports frei geben
  * vim /etc/named.conf
      * listen-on port .. -> Server-IP hinterlegen
      * allow-query -> Netz im Format 10.0.2.0/24; hinterlegen
  * /etc/init.d/named start
  * rdnc status

=== 4.2 - Einen „Caching-Only-Namensserver“ für die Weitergabe von DNS-Anforderungen konfigurieren ===
  * vim /etc/named.conf
      * forwarders { 10.0.2.16; 10.0.2.17; };
      * forward only;
  * /etc/init.d/named restart


==== 5 - FTP ====
  * yum install vsftpd pder rpm -ivh vfsftpd-2.2.....rpm oder yum groupinstall "FTP server".
  * chkconfig vsftpd on
  * /etc/init.d/vsftpd start
  * system-config-firewall .. -> Ports freigeben (20, 21)
  * yum install lftp fürs Testen etc.
  * /etc/vsftpd/.. <-- Configs
  * /etc/pam.d/ enthält was vom vsftpd
  * vsftpd kann mit TCP-Wrappern konfiguriert werden
  * vsftpd.conf
  * Wenn sich lokale User einloggen sollen dürfen -> SELinux-Boolean ftp_home_dir enablen. und chroot_local_users=YES !!! in vsftpd.conf
  * allow_ftpd_full_access wenn alle User sich einloggen sollen dürfen. und ftp_home_dir
  * setsebool -P ftp_home_dir 1

=== 5.1 - Einen Nur-anonym-Download konfigurieren. ===
  * Wenn sich ein Benutzer anonym mit dem FTP-Server verbindet, greift er damit unwissentlich auf den bereits im System angelegten Benutzer "ftp" zu.
  * Wenn sich der anonyme Benutzer nach seinem Verbindungsaufbau nicht in /var/ftp wieder finden soll, dann muss man das Home des ftp-Benutzers abändern.
  * ftp_username am Ende von vsftpd.conf anhängen.
  * anonymous_enable=YES <-- ist schon per default vorhanden
  * local_enable=YES <-- auskommentieren
  * write_enable=YES <-- auskommentieren -> warum?
  * anon_upload_enable=YES
  * anon_mkdir_write_enable=YES
  * chown_uploads=YES
  * chown_username=whoever
  * Augen auf bei userlist_enable=YES und /etc/vsftpd/user_list !
  * SELinux-Boolean allow_ftpd_anon_write setzen
  * public_content_rw_t auf Verzeichnis für anonyme FTP-Uploads
  * Zusammenfassung: #local_enable=yes auskommentieren, also so wie es hier da steht. Wenn der anonyme Download nicht nach /var/ftp erfolen soll, dann muss das Zielverzeichnis erstellt werden, die Dateien reingeschoben werden, public_content_t setzen und das Home-Dir des FTP-Users abgeändert werden.


==== 6 - NFS ====
  * yum groupinstall "Network Storage Server" und "Network file system client".
  * chkconfig nfs on
  * chkconfig nfslock on
  * chkconfig rpcbind on
  * service nfs start &amp;amp;&amp;amp; service rpcbind start &amp;amp;&amp;amp; service nfslock start
  * vim /etc/sysconfig/nfs -> Feste Ports konfigurieren -> Firewall freigeben 🙂 -> rpcinfo -p auf Server
  * nfs4_getfacl
  * vim /etc/exports
<code>
/selinux (ro,sync) selinux.bla.com(rw,sync)
/home *.example.com(rw,sync)
/tmp nodisk.example.com(rw,no_root_squash,sync)
</code>
  * exportfs -a
  * showmount -e zeigt die Freigabe
  * exportfs -ua unexported die Shares, falls notwendig..
  * Achtung: Beim Sharen von /home die Datei /etc/idmap.conf anpassen (Client und Server)!; danach /etc/init.d/rpcidmap restart
  * In der Firewall müssen die Ports 2049 (UDP) und 111 (UDP) geöffnet werden.
  * SELinux-Booleans nicht vergessen! ll /etc/selinux/booleans/*nfs*
  * Aktivieren immer mit setsebool -P .... 1
  * root_squash verhindert Root-Zugriff von root-Usern
  * /etc/init.d/nfs status

=== 6.1 - Netzwerkfreigaben für spezielle Clients bereitstellen. ===
  * vim /etc/exports
<code>
/selinux (ro,sync) selinux.bla.com(rw,sync)
/home *.example.com(rw,sync)
/tmp nodisk.example.com(rw,no_root_squash,sync)
</code>
  * exportfs -a
  * showmount -e zeigt die Freigabe

=== 6.2 - Netzwerkfreigaben bereitstellen, die für die Gruppenzusammenarbeit geeignet sind ===
  * Gruppe erstellen
  * User in Gruppe aufnehmen
  * Verzeichnis erstellen, der Gruppe zuweisen und auf chmod 1775 setzen
  * Verzeichnis via /etc/exports freigeben
  * exportfs -a
  * Set SELinux-Boolean nfs_export_all_rw und nfs_export_all_ro


==== 7 - SMB ====
  * yum install samba oder yum groupinstall "CIFS file server".
  * yum install samba samba-client samba-common samba-doc
  * chkconfig nmb on
  * chkconfig smb on
  * service smb start &amp;amp;&amp;amp; service nmb start
  * /etc/samba/smb.conf
  * Samba-Port via system-config-firewall enabled (137, 138, 139, 445)
  * Netbios, CIFS und SMB: Alles für TCP und UDP frei geben!
  * SELinux beachten...
    * setsebool -P samba_ ... 1
    * chcon -R -t samba_share_t /share
    * semanage fcontext -a -t samba_share_t /share
  * testparm hilft beim Verifizieren des Syntaxes in /etc/samba/smb.conf

=== 7.1 - Netzwerkfreigaben für spezielle Clients bereitstellen. ===
  * hosts allow = 192.167.2.1 192.167.1. auch bei Shares!

=== 7.2 - Netzwerkfreigaben bereitstellen, die für die Gruppenzusammenarbeit geeignet sind ===
  * setsebool -P samba_enable_home_dirs 1
  * setsebool -P samba_domain_controller 1
  * Einfach das Share mit "/home/samba" auskommentieren
  * Gruppe "staff erstellen", falls notwendig
  * create mask = 0770
  * directory mask = 2770 
  * mkdir /home/samba; chmod 1777 /home/samba
  * /home/samba muss der Gruppe gehören
  * chcon -R -t samba_share_t /home/samba
  * semanage fcontext -a -t samba_share_t /home/samba
  * Neue User erstellen (useradd hans ..) und dann smbpasswd -a hans
  * usermod -G staff hans -> Hans in die Gruppe "staff" aufnehmen
  * Testen mit smbclient //10.0.2.15/public -U hans -> poasst! 🙂


==== 8 - SMTP ====
  * Ein Mail-Server besitzt vier große Komponenten
  * MTA (Postfix, Sendmail, Dovecot); Mail Transfer Agent
  * MUA ( mutt, Evolution, mail, Thunderbird); Mail User Agent
  * MDA (procmail); Mail Delivery Agent
  * MSA (Postfix, sendmail); Mail submission agent
  * Die E-Mail-Systeme setzen voraus, dass die DNS-Auflösung reibungslos funktioniert.
  * yum install postfix oder yum install sendmail oder yum install "E-mail server".
  * Hier: yum install postfix -> War schon installiert
  * /etc/init.d/postfix stop &amp;amp;&amp;amp; /etc/init.d/sendmail stop
  * alternatives --config mta, falls man versehentlich beide MTAs installiert hat -> Postfix selektieren
  * /etc/init.d/postfix start
  * chkconfig --list postfix -> Ist schon aktiviert
  * Ist der Port 25 in der FW offen? system-config-firewall ist dein Freund...
  * Oder vim /usr/share/netcf/iptables-smtp-source und -A INPUT -m state --state NEW -m tcp -p tcp -s 10.0.2.0/24 --dport 25 -j ACCEPT und mit system-config-firewall unter "Custom Rules" einbinden
  * Neuen User anlegen, der sich nicht einloggen kann: useradd tempbla -s /sbin/nologin
  * /var/log/maillog ist dein Freund
  * postconf zeigt Konfigurationsdaten von Postfix an
  * /etc/postfix enthält die Konfigurationsdaten. Wichtig: /etc/postfix/main.cf
  * Wenn beispielsweise Limits im Acces-File geändert wurden, muss "postmap access" aufgerufen werden.
  * /etc/postfix/access -> Zugriff auf Postfix einschränken imit dem Muster "pattern action", z. B. "1.2.3.4 OK" oder "192.168.122 REJECT"
  * /etc/postfix/canonical: Wie ein Alias-File für eingehende Mails; kann User auf E-Mail-Adressen mappen
  * /etc/postfix/generic: Wie ein Alias-File für ausgehende Mails; kann User auf E-Mail-Adressen mappen
  * Z. B. valentin valentin@xenuser.org
  * Z. B. @example.org @example.com
  * Danach postmap canonical bzw. postmap generic
  * /etc/postfix/relocated: Für User, die umgezogen sind; z. B. vale@domain.com vale@domain.org
  * /etc/postfix/transport: Für Mail-Forwarding (z. B. von einem Smart-Host)
  * Z. B. example.com smtp:bla.example.com
  * /etc/postfix/virtual: Für Mail-Forwarding an User, z. B. "vale@bla.com valentin"
  * Die main.cf-Datei (am besten sichern):
  * ------------------------------------------------------
  * queue_directory = /var/spool/postfix
  * command_directory = /usr/bin
  * daemon_directory = /usr/libexec/postfix
  * data_directory = /var/lib/postfix
  * mail_owner = postfix
  * #myhostname = host.domain.tld -> Abändern in myhostname = <FQDN>
  * #mydomain = domain.tld -> Abändern in mydomain = <Domain>
  * myorigin = $mydomain <-- Sicher stellen, dass diese Variable gesetzt ist
  * #inet_interface = localhost <-- Abändern in inet_interface = all
  * inet_protocols = all
  * mydestination = $mydomain, $myhostname, localhost.$mydomain, localhost
  * mynetworks = 10.0.2.0/24, 127.0.0/8
  * ------------------------------------------------------
  * Review der Parameter mit postconf
  * Review only changed parameters with postconf -n
  * smtp_sender_restrictions = permit_sasl_authenticated, reject setzen?
  * postfix check <-- Checkt auf Syntax-Fehler
  * /etc/aliases (bei Änderungen "newaliases" aufrufen)
  * /etc/postfix/main.cf -> alias_maps = hash:/etc/aliases
  * /etc/postfix/master.cf -> Im RHCE keine Änderungen notwendig
  * Test Postfix mit telnet "localhost 25" und "EHLO localhost"
  * Bei der Ausgabe sollte später im RHCE 250-AUTH GSSAPI erscheinen

=== 8.1 - MTA (Mail Transfer Agent) für eingehende E-Mails aus anderen Systemen konfigurieren. ===
  * /etc/postfix/main.cf editieren:
  * myhostname = <FQDN>
  * mydomain = <domain>
  * myorigin = mydomain <-- oder $mydomain??
  * inet_interfaces = all
  * mynetworks = 10.0.2.0/24, 127.0.0.0/8
  * /etc/init.d/postfix restart


=== 8.2 - MTA für die Weitergabe von E-Mails über einen intelligenten Host konfigurieren ===
  * vim /etc/postfix/restart
  * relayhost = bla.bla.org (FQDN, der gegeben wird)
  * Und /etc/aliases so anpassen, dass Mails richtig geforwarded werden, also z. B. "root valentin"
  * newaliases
  * /etc/init.d/postfix restart

=== Postfix Auth. ===
  * vim /etc/postfix/main.cf:
  * -------------------------
  * smtpd_sasl_auth_enable = yes
  * smtpd_sasl_security_options = noanonymous
  * broken_sasl_auth_clients = yes
  * smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
  * -------------------------
  * (Auch nachzulesen unter /usr/share/doc... README-Postfix-SASL-RedHat.txt
  * chkconfig --level 345 saslauthd on
  * service saslauthd start
  * vim /etc/sysconfig/saslauthd -> MECH=PAM
  * service postfix restart


==== 9 - SSH ====
  * Pakete: openssh-server, openssh-clients, openssh
  * service sshd start
  * Port in der FW freigeben, chkconfig sshd on
=== 9.1 - Schlüsselbasierte Authentifizierung konfigurieren. ===
  * Ein Key-Pair erstellen: ssh-keygen -t <type> (DSA oder RSA)
  * Ein Teil der Key-Auth. ist, den Public-Key auf dem Remote-System in die Datei .ssh/authorized_keys einzutragen.
  * Alle Keys sollten immer mit einer Passphrase versehen werden!
  * Bei Bedarf kann ein RSA-Key mit einer hohen Anzahl an Bits erstellt werden: ssh-keygen -b 8192
  * ssh-copy-id -i .ssh/id_rsa.pub user@server -> Key verbreiten
  * "PubkeyAuthentication yes" in /etc/sshd_config setzen und SSH-Server restarten.
  * Genau das gleiche für "AuthorizedKeysFile .ssh/authorized_keys"

=== 9.2 - Zusätzliche, in der Dokumentation beschriebene Optionen konfigurieren ===
  * sshd: Daemon für SSH-Service.
  * ssh-agent: Software, die Private-Keys verwaltet und an Anwendungen zur Authentifizierung übergeben kann.
  * ssh-add: Adds an identity to the ssh-agent.
  * ssh: Tool für den Remote-Login.
  * ssh-keygen: Tool, welches Private- und Public-Keys erzeugt.
  * ssh-copy-id: Kopiert Public-Keys auf andere Systeme.
  * Für das lokale System sind die SSH-Konfigurationsdateien in /etc/ssh abgelegt.
  * Die wichtigsten Dateien: moduli (alternative Key-Methode), ssh_config (für den SSH-Client), sshd_config (Server) u.v.m.
  * In den Home-Directories von den einzelnen Usern können .ssh-Verzeichnisse liegen, die ebenfalls Konfigurationsdateien für SSH beinhalten können.
  * In /home/<user>/.ssh liegen meist folgende Dateien: authorized_keys, id_dsa_key, id_dsa_key.pub, id_rsa_key, id_rsa_key.pub, known_hosts.
  * Wichtige Optionen: "Port 22", "AddressFamily inet" oder "AddressFamily inet6", "StrictModes yes", "MaxAuthTries 6".
  * "PasswordAuthentication yes", falls nicht mit Key.
  * "AllowAgentForwarding yes", "AllowTCPForwarding yes", "X11Forwarding yes".
  * "AllowUsers michael donna valentin" in /etc/sshd_config.


==== 10 - NTP ====
  * yum install ntp
  * chkconfig ntpd on
  * Dienst starten
  * Port 123 öffnen

=== 10.1 - Zeitsynchronisierung mithilfe von NTP-Peers. ===
  * vim /etc/ntp.conf
      * Bei den beiden Restrict-Zeilen die Option "nopeer" entfernen
      * restrict 127.0.0.1 wird zu restrict 10.0.2.0 mask 255.255.255.0 notrap nomodify
      * Die drei Zeilen "server .." zu "peer ..." umändern
  * /etc/init.d/ntpd restart
  * ntpq -p 10.0.2.15 von außen -> NTP läuft

Here are some additional notes I took at the final learning stage, maybe they will be useful for someone 🙂

chcon -R -t public_content_t /var/ftp - SELinux-Kontext setzen
semanage fcontext -a -t samba_share_t /home/samba <-- Permanenter Kontext!

setup -> Installations-Tool von Red Hat
virt-install --prompt -> VM via Shell installieren
virt-clone --prompt -> Klont eine VM
system-config-kickstart
anaconda -> Install-Tool von Red Hat

Tools zum Testen: mutt, nmap, telnet, lftp, elinks

/etc/init.d/network status zeigt aktive Netzwerk-Devices
nfs4_getfacl zeigt ACLs über NFS an
ISO-Mount: mount /dev/sr0 reicht, oder mount /dev/sr0 -t iso9660 -o iocharset=utf8 /media ; man mount ist dein Freund!

Beim iSCSI-Mount via /etc/fstab UUIDs verwenden!
autofs: vim /etc/auto.master -> /home /etc/auto.home     /etc/auto.home -> * rw 172.29.88.130:/home/muc/&amp;amp;
Passwort hacken:   single an Boot-Parameter anhängen
Wenn Ipv4-Forward frei geschalten: iptables -A FORWARD -o eth0 -j ACCEPT in /etc/rc.local!

RPM-Paketbau:
    * yum install rpm-build rpmdevtools
    * rpmdev-setuptree
    * cd /root/rpmbuild
    * im SOURCE-Verzeichnis ein Verzeichnis mit <Name>-<Version>/Inhalt anlegen und tar -czvf .... -> Source!
    * rpmdev-newspec SPECS/hello.spec
    * vim SPECS/hello.spec
    * rpmbuild -ba SPECS/hello.spec
Ansehen: NFS + Samba gleicher Ordner + gleiches Interface!

Here are some notes I took about performing trouble shooting. I took those notes before taking the exam (while learning):

===== SELinux-Probleme =====
Wenn die Konfiguration eines Dienstes zu stimmen scheint, er jedoch nicht wie gewünscht funktioniert, liegt die Ursache womöglich bei SELinux. Folgende Maßnahmen können zum Trouble-Shooting getroffen werden:
  * Die entsprechenden Booleans checken
  * SELinux-Logs checken
  * SELinux file contexts checken (z. B. spezielle Pfade mit den default-Ordnern vergleichen, also z. B. /ftp mit /var/ftp/pub etc.

===== Firewall =====
  * iptables -L -> Ausgabe überprüfen (oder system-config-firewall)

===== Sonstiges =====
  * Ports mit Telnet testen
  * Die Dienste wie gewünscht testen
  * Pingen..
  * /etc/hosts.allow und /etc/hosts.deny überprüfen
  * Dienste-Config checken

3 thoughts on “RHCE Cheat Sheet

  1. Pingback: led light

Leave a Reply