Я унаследовал систему Centos 6.5, которая выводит несколько строк ошибок при запуске rsync
. Rsync синхронизируется с локально подключенным диском, установленным как /storage
. Команда такая:
rsync -aAXv /* /storage/backup/ --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/storage/*}
Ниже перечислены три различных типа ошибок. # Error concern 1, # Error concern 2, # Error concern 3
в выводе ниже:
rsync -aAXv /* /storage/backup/ --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/storage/*}
sending incremental file list
etc/cron.d/
root/
root/.bash_history
root/.viminfo
selinux/booleans/abrt_anon_write
selinux/booleans/abrt_handle_event
selinux/booleans/allow_console_login
[...]
# Error concern 1: There are probably 80 or more of these mkstemp errors, but I've shortened it:
rsync: mkstemp "/storage/backup/selinux/class/x_pointer/perms/.setfocus.0C5BYW" failed: Permission denied (13)
rsync: mkstemp "/storage/backup/selinux/class/x_pointer/perms/.use.iRMquA" failed: Permission denied (13)
rsync: mkstemp "/storage/backup/selinux/class/x_pointer/perms/.write.rHXg0d" failed: Permission denied (13)
rsync: mkstemp "/storage/backup/selinux/class/x_property/.index.Zwc8vR" failed: Permission denied (13)
rsync: mkstemp "/storage/backup/selinux/class/x_property/perms/.append.tTK01u" failed: Permission denied (13)
rsync: mkstemp "/storage/backup/selinux/class/x_property/perms/.create.KGNUx8" failed: Permission denied (13)
rsync: mkstemp "/storage/backup/selinux/class/x_property/perms/.destroy.IiUP3L" failed: Permission denied (13)
[...]
# Error concern 2:
tmp/
rsync: rsync_xal_clear: lremovexattr("storage","security.selinux") failed: Permission denied (13)
var/cache/man/whatis
[...]
# Error concern 3:
var/run/utmp
rsync: set_acl: sys_acl_set_file(var/run/cups/certs/0, ACL_TYPE_ACCESS): Operation not supported (95)
var/run/postgresql/.s.PGSQL.5432.lock
[...]
# Finishing output:
sent 4288406721 bytes received 52199 bytes 86635533.74 bytes/sec
total size is 22337384552 speedup is 5.21
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
Кажется, что rsync работает нормально, пока не достигнет определенной части /selinux
каталог со скрытыми файлами. Когда SELinux установлен на разрешающий, setenforce 0
, этих ошибок не возникает. Хотя # Error concern 2
и # Error concern 3
все еще происходят.
Контекст SELinux /selinux
каталог и /storage
каталоги выглядит следующим образом:
drwxr-xr-x. root root system_u:object_r:security_t:s0 selinux
drwxr-xr-x. root root system_u:object_r:file_t:s0 storage
# /storage/backup directory
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 backup
Пока для # Error concern 2
и # Error concern 3
У меня нет зацепок.
Пожалуйста, дайте мне знать, если я что-нибудь упустил. Я не так хорошо знаком с CentOS 6.5, как с 7, так как не знаю, почему существует /selinux
каталог вне /
. У меня есть сервер CentOS 7.2, который без проблем выполняет ту же rsync с подключенным накопителем. Любая помощь или предложения будут приняты с благодарностью.
Я изменил контекст SELinux на /storage/backup
к public_content_rw_t
через:
semanage fcontext -a -t public_content_rw_t "/storage/backup(/.*)?"
restorecon -Rv /storage/backup
Я скоро снова запущу rsync и сообщу, изменилось ли что-нибудь.
После этого я снова запустил rsync с новым контекстом безопасности и получаю те же результаты ошибки. Мне интересно, синхронизирует ли /selinux
каталог действительно стоит того, поскольку в системе должен быть /etc/selinux
в любом случае было выполнено резервное копирование, в котором были бы все контексты, если бы системе нужно было изменить метку. Кто-нибудь может вмешаться в это?
Я полагаюсь на то, чтобы не поддерживать /selinux
каталог. В sestatus
показывает эти различия между CentOS 6.5 и CentOS 7.2:
CentOS 6.5
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
CentOS 7.2
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Из того, что я понял из этого /selinux
используется в качестве точки монтирования файловой системы SElinux? Интересно, не в этом ли причина ошибок?
Разница между /selinux
и /etc/selinux
(в RHEL / CentOS 6) заключается в том, что первый является «псевдофлесистема для экспорта API политики безопасности» (помните, что обязательный контроль доступа обеспечивается ядром); тогда как последний "содержит файлы конфигурации, которые являются локальными для машины".
Вы не должны включать /selinux
(или любую другую) псевдофайловую систему при синхронизации.
Есть хороший вопрос / ответ Unix и Linux по этой теме с очень полезной связанной документацией.