如果要在拷贝一个文件的时候保留其SELinux的上下文,有一个非常简单的方法,直接在拷贝的时候可以加上--preserve=context参数就可以了:
cp --preserve=context <Source> <Dest>
不过这样做有一个要求,就是当前的Linux内核必须已经激活了对SELinux的支持。如果很不幸没有打开的话,cp命令会报错:
当然了,把当前Linux内核上对SELinux的支持打开就可以解决问题了。不过不是所有场景都可以打开对SELinux的支持的,比如有些云主机就不能那么方便的打开,而且就算打开了也会在一定程度上影响系统的性能。
那在没有打开SELinux支持的Linux系统上能不能拷贝的时候保留SELinux上下文呢?经过摸索,大概找到了两个方法。
第一个方法,可以在拷贝的时候加上--preserve=all参数就可以了:
cp --preserve=all <Source> <Dest>
单独保留SELinux上下文属性不行,但是如果全部保留就可以,不会再检查内核是否支持SELinux。
第二个方法,可以在拷贝完后直接用setfattr命令将其原来的SELinux上下文再添加上去:
setfattr -n security.selinux -v "<Context>" <File>
注意,SELinux上下文是一个字符串,需要加双引号。
最后提一下,如果想查看文件的SELinux上下文属性,可以加上-Z(大写)参数:
ls -Z <File>
当然,也可以使用getfattr命令:
getfattr -n security.selinux <File>