CentOS7:复制文件并保留 SELinux 上下文
CentOS7: copy file and preserve SELinux context
为了配置我的 CentOS 系统,我想覆盖一个任意文件,保留几乎所有属性,但时间戳和内容除外。
例如,我将使用 /etc/phpMyAdmin/config.inc.php
注意:正在复制的文件在其他文件系统中
[root@localhost phpMyAdmin]# ls -laZ /etc/phpMyAdmin/
drwxr-x---. root apache system_u:object_r:etc_t:s0 .
drwxr-xr-x. root root system_u:object_r:etc_t:s0 ..
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php
[root@localhost phpMyAdmin]# /bin/cp -frv --backup=numbered --preserve=mode,ownership,context,xattr config.inc.php /etc/phpMyAdmin/config.inc.php
«config.inc.php» -> «/etc/phpMyAdmin/config.inc.php» (respaldo: «/etc/phpMyAdmin/config.inc.php.~1~»)
[root@localhost phpMyAdmin]# ls -laZ /etc/phpMyAdmin/
drwxr-x---. root apache system_u:object_r:etc_t:s0 .
drwxr-xr-x. root root system_u:object_r:etc_t:s0 ..
-rw-r-----. root apache system_u:object_r:unlabeled_t:s0 config.inc.php
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php.~1~
[root@localhost phpMyAdmin]# systemctl restart httpd
当我尝试 http://localhost/phpmyadmin
时,第一次收到 SELinux 警告,Apache 无法访问该文件。
[root@localhost phpMyAdmin]# chcon --reference /etc/phpMyAdmin/config.inc.php.~1~ /etc/phpMyAdmin/config.inc.php
[root@localhost phpMyAdmin]# ls -laZ /etc/phpMyAdmin/
drwxr-x---. root apache system_u:object_r:etc_t:s0 .
drwxr-xr-x. root root system_u:object_r:etc_t:s0 ..
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php.~1~
[root@localhost phpMyAdmin]# systemctl restart httpd
现在 apache 可以读取文件了。
如何让 cp 保留原始文件的 SELinux 上下文?
根据 cp 文档,开关“--preserve=context”允许在此过程中复制 Selinux 上下文。
请查看来自 redhat 的优秀文档,它以人类语言对主题进行了精彩的解释:
为了配置我的 CentOS 系统,我想覆盖一个任意文件,保留几乎所有属性,但时间戳和内容除外。
例如,我将使用 /etc/phpMyAdmin/config.inc.php
注意:正在复制的文件在其他文件系统中
[root@localhost phpMyAdmin]# ls -laZ /etc/phpMyAdmin/
drwxr-x---. root apache system_u:object_r:etc_t:s0 .
drwxr-xr-x. root root system_u:object_r:etc_t:s0 ..
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php
[root@localhost phpMyAdmin]# /bin/cp -frv --backup=numbered --preserve=mode,ownership,context,xattr config.inc.php /etc/phpMyAdmin/config.inc.php
«config.inc.php» -> «/etc/phpMyAdmin/config.inc.php» (respaldo: «/etc/phpMyAdmin/config.inc.php.~1~»)
[root@localhost phpMyAdmin]# ls -laZ /etc/phpMyAdmin/
drwxr-x---. root apache system_u:object_r:etc_t:s0 .
drwxr-xr-x. root root system_u:object_r:etc_t:s0 ..
-rw-r-----. root apache system_u:object_r:unlabeled_t:s0 config.inc.php
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php.~1~
[root@localhost phpMyAdmin]# systemctl restart httpd
当我尝试 http://localhost/phpmyadmin
时,第一次收到 SELinux 警告,Apache 无法访问该文件。
[root@localhost phpMyAdmin]# chcon --reference /etc/phpMyAdmin/config.inc.php.~1~ /etc/phpMyAdmin/config.inc.php
[root@localhost phpMyAdmin]# ls -laZ /etc/phpMyAdmin/
drwxr-x---. root apache system_u:object_r:etc_t:s0 .
drwxr-xr-x. root root system_u:object_r:etc_t:s0 ..
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php
-rw-r-----. root apache system_u:object_r:etc_t:s0 config.inc.php.~1~
[root@localhost phpMyAdmin]# systemctl restart httpd
现在 apache 可以读取文件了。
如何让 cp 保留原始文件的 SELinux 上下文?
根据 cp 文档,开关“--preserve=context”允许在此过程中复制 Selinux 上下文。
请查看来自 redhat 的优秀文档,它以人类语言对主题进行了精彩的解释: