SELinux appears to be blocking write access to the config, files, packages directories, despite granting access.
I've run this command,
chown apache:apache /var/www/html -R chcon -R -u system_u -t httpd_sys_content_t -r object_r /var/www/html
which worked on CentOS 6.5, but doesn't appear to work on 7.
Turning off SELinux seems to work, but I would prefer not to.