The RHEL 7 release brought many changes from RHEL 6, some of them breaking backward compatibility (Systemd, etc). Unfortunately, such changes happened between minor versions of RHEL 7 too.
Here you will find a non-exhaustive list of such changes.
The RHEL 7.1 release completely changed the way the various NFS services worked.
The nfs-secure-server service doesn’t work the same way anymore, the nfs-idmap service has a new brother, nfs-idmapd, and the Kerberos NFS client gets a new nfs-client.target.
Hopefully, there is a Kerberos NFS tutorial that took a long time to update!
When installing or migrating to RHEL 7.3, don’t disable IPv6 without running the dracut -f command just after, otherwise NFS won’t work (see details).
NFS Mount Behavior
In RHEL 7.4, the NFS mount behavior has changed, trying NFS vers=4.1 by default. Also, rather than trying 4.0 after failing on 4.1, RHEL 7.4 fails down to NFS 3. To get the previous behavior, force vers=4.0 (source).
From RHEL 7.2 to RHEL 7.3, NetworkManager underwent a major evolution, going from v1.0.6 to v1.4.0. Modularity was at the heart of the changes.
In v1.2, a new IPv6 feature has been added called Stable Privacy Addressing through a new connection property: ipv6.addr-gen-mode. It is a tracking prevention mechanism activated by default (ipv6.addr-gen-mode=stable-privacy) (see details here). To disable this new feature and get the previous behavior, type:
# nmcli con mod "Wired connection 1" ipv6.addr-gen-mode eui64
Another new IPv6 feature popped up called Privacy Extension bringing a new ipv6.ip6-privacy connection property. This allows randomization of MAC addresses and is activated by default (ipv6.ip6-privacy=1) (see details here). To disable this new feature and get the previous behavior, type:
# nmcli con mod "Wired connection 1" ipv6.ip6-privacy 0
There are certainly other changes unknown at this time.
Nmcli Syntax Change
In RHEL 7.0, you could write:
# nmcli con mod myConn ipv4.addresses "10.0.0.10/24 10.0.0.1"
Since RHEL 7.1, you have to do it in two steps:
# nmcli con mod myConn ipv4.addresses 10.0.0.10/24 # nmcli con mod myConn ipv4.gateway 10.0.0.1
Or, in only one step:
# nmcli con mod myConn ipv4.addresses 10.0.0.10/24 ipv4.gateway 10.0.0.1
New Unit File Directives
With RHEL 7.3, the NetworkManager service got two new directives in its unit file for security purpose:
These directives forbid some changes made to respectively system (/usr, /boot, /root, /run/user) and /home directories, mainly the creation of symbolic links to them (see details here). If you use a non-standard directory structure, you may need to remove these directives.
With RHEL 7.2, Systemd moves from v208 to v219 and many changes happened.
New Systemd Directives
Some new directives regarding security have been introduced in the v219 version of Systemd.
In the NetworkManager chapter above, the ProtectSystem and ProtectHome directives were already mentioned but some others exist (see details here).
Conflicts with Docker
At least one change has already been reported concerning execution of Docker containers. You can read an article on the CentOS blog about Fixing CentOS 7 systemd conflicts with docker.
Also with RHEL 7.5 a bug was fixed in the SELinux policy denying access from within a container to the cgroup configuration. Since Systemd heavily uses cgroups, containers requiring Systemd don’t start anymore without any warning. To allow containers access to the cgroup configuration, a SELinux boolean needs to be set (source): setsebool -P container_manage_cgroup on
A new option called RemoveIPC was introduced in RHEL 7.2 through Systemd v219. When set to yes, this option forces a cleanup of all allocated inter-process communication (IPC) resources linked to a user leaving his last session. If a daemon is running as a user with a uid number >=1000, it may crash.
This option should always be set to no by default but, due to the logic of package upgrade, it is highly advisable to set RemoveIPC=no in the /etc/systemd/logind.conf file followed by # systemctl restart systemd-logind (source).
Certificate Verification in Python
The Python standard library includes multiple modules that provide HTTP client functionality, including httplib, urllib, urllib2, and xmlrpclib. While these modules support HTTPS connections, they traditionally performed no verification of certificates presented by HTTPS servers, and offered no way to easily enable such verification (see details here).
In RHEL 7.0 and RHEL 7.1, there was no certificate verification.
In RHEL 7.2, a new file was created called /etc/python/cert-verification.cfg with verify=disable as main content.
In RHEL 7.3, the same file now displays verify=platform_default: this means that certificate verification depends on hard-coded value in the ssl module. According to the ssl module used, certificate verification will happen or not. However, it is perfectly possible to assign enable or disable to the verify directive to define the wanted behavior.
Up to RHEL 7.2, the semodule -l command was displaying the version of the loaded policy:
[root@rhel72]# semodule -l abrt 1.4.1 accountsd 1.1.0 acct 1.6.0 ...
With RHEL 7.3, this information is not given anymore:
[root@rhel73]# semodule -l abrt accountsd acct ...
Libvirt Based Containers
With RHEL 7.3, it seems that execution of real-time libvirt based containers doesn’t work as before. New parameters need to be set up (see details here).
Don’t use the nmtui command with RHEL 7.0: this command is reported as regularly crashing in this minor version.
In RHEL 7.0, OpenSSH was in version 6.4p1. From RHEL 7.1 to RHEL 7.3, OpenSSH stayed in version 6.6.1p1 with limited changes.
In RHEL 7.4, OpenSSH moved to version 7.4p1. Expect some issues with legacy code (see details here).
At least two RedHat articles dealing with OpenSSH changes in RHEL 7.4 have been posted (here and here).
Other Compatibility Problems?
Leave a comment if you find another problem not listed here.