Представим ситуацию, когда произошло что-то типа:
chmod -R 777 /etc
Или того хуже:
chmod -R 777 /
В CentOS есть решение которое поможет решить данную проблему, это решение называется rpm
... :) Заглянем в man rpm
:
... rpm --setperms PACKAGE_NAME sets permissions of files in the given package. Consider using --restore instead. rpm --setugids PACKAGE_NAME sets user/group ownership of files in the given package. This command can change permissions and capabilities of files in that package. In most cases it is better to use --restore instead. Options --setperms, --setugids, --setcaps and --restore are mutually exclusive. ...
То-же самое подтверждает RHEL:
Ок, восстановить разрешения можно так:
rpm -a --setperms /etc
Возвратить владельцев можно так:
rpm -a --setugids /etc
Детальный разбор на примере установленного пакета
Для примера можно взять openssh-server
, смотрим инфу по пакету:
rpm -ql openssh-server-7.4p1-16.el7.x86_64 ... /usr/sbin/sshd ...
Проверим разрешения на sshd
:
ls -l /usr/sbin/sshd -rwxr-xr-x. 1 root root 853040 Apr 11 04:21 /usr/sbin/sshd
Т.е. видим разрешения вида 755
, меняем на 777
:
chmod 777 /usr/sbin/sshd
Смотрим результат:
ls -l /usr/sbin/sshd -rwxrwxrwx. 1 root root 853040 Apr 11 04:21 /usr/sbin/sshd
Восстанавливаем правильные разрешения:
rpm --setperms openssh-server-7.4p1-16.el7.x86_64
Снова проверяем:
ls -l /usr/sbin/sshd -rwxr-xr-x. 1 root root 853040 Apr 11 04:21 /usr/sbin/sshd
Аналогично можно поступить для всех пакетов примерно так:
for i in $(rpm -qa); do rpm --setperms $i; done
Done!