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.
Most of this is not really explained in the official Red Hat documentation!
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).
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. It’s still too early to say if changes breaking backward compatibility 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.
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).
Other Compatibility Problems?
Leave a comment if you find another problem not listed here.