文件的复制、移动、压缩等对SELinux属性关系详解

1.临时修改文件的类型属性

文件的类型属性不正确是常见的SELinux拒绝访问的主要原因

1)修改文件的SELinux属性:

[[email protected] ~]# touch test.file   ##新建文件

[[email protected] ~]# ls -Z test.file   ##查看文件的SELinux属性

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 test.file

[[email protected] ~]# chcon -t samba_share_t test.file  ##修改文件的默认SELinux属性

[[email protected] ~]# ls -Z test.file

-rw-r--r--. root root unconfined_u:object_r:samba_share_t:s0 test.file

[[email protected] ~]# restorecon -F -v test.file   ##恢复修改过的SELinux属性为默认属性

restorecon reset /root/test.file context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:admin_home_t:s0

[[email protected] ~]# ls -Z test.file

-rw-r--r--. root root system_u:object_r:admin_home_t:s0 test.file

2)修改目录的SELinux属性(所有的操作与文件对比多了一个“-R”代表递归):

[[email protected] ~]# mkdir /web

[[email protected] ~]# touch /web/file{1,2}

[[email protected] ~]# ls -dZ /web  ##查看目录的SELinux属性

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /web

[[email protected] ~]# ls -lZ /web/   ##查看目录下文件的SELinux属性

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file2

[[email protected] ~]# chcon -R -t httpd_sys_content_t /web/    ##临时修改目录的SELinux属性为httpd_sys_content_t

[[email protected] ~]# ls -dZ /web/

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/

[[email protected] ~]# ls -lZ /web/

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file2

[[email protected] ~]# restorecon -R -v /web/   ##恢复为默认SELinux属性

restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:default_t:s0

restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:default_t:s0

restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:default_t:s0

[[email protected] ~]# ls -lZ /web/

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file2

[[email protected] ~]# ls -dZ /web/

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /web/

2.永久修改文件的类型属性

永久修改文件及目录的类型属性使用下列命令:

semanage fcontext -{a|d|l|m} [-frst] filespec  ##-a增加、-d删除、-l显示、-m修改

restorecon -v filespec    ##由于“semanage fcontext”命令只是将属性定义项加载到

“/etc/selinux/targeted/contexts/files/file_contexts.local”文件中,

使用该命令才是将文件的selinux属性永久地修改.

1)文件的selinux属性修改

[[email protected] tmp]# touch test.file

[[email protected] tmp]# ls -Z test.file

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 test.file

[[email protected] tmp]# yum install policycoreutils-python  ##安装semanage管理工具提供软件

[[email protected] tmp]# semanage fcontext -a -t samba_share_t /tmp/test.file  ##将测试文件的selinux属性设置为“samba_share_t”

[[email protected] tmp]# ls -Z /tmp/test.file   ##测试文件的selinux属性未发生变化

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/test.file

[[email protected] tmp]# restorecon -v /tmp/test.file    ##使semanage设置的selinux属性永久的生效

restorecon reset /tmp/test.file context unconfined_u:object_r:user_tmp_t:s0->unconfined_u:object_r:samba_share_t:s0

[[email protected] tmp]# ls -Z /tmp/test.file   ##测试文件的selinux属性已改

-rw-r--r--. root root unconfined_u:object_r:samba_share_t:s0 /tmp/test.file

2)目录的selinux属性修改:(完成后目录下新建的文件自动继承selinux属性)

[[email protected] ~]# mkdir /html

[[email protected] ~]# touch /html/file{1,2}

[[email protected] ~]# ls -dZ /html

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /html

[[email protected] ~]# ls -lZ /html/

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file2

[[email protected] ~]# semanage fcontext -a -t httpd_sys_content_t "/html(/.*)?"  ##正则表达式“/html(/.*)?”表示/html目录及其中

的任何文件或子目录

[[email protected] ~]# restorecon -R -v /html/  ##使semanage设置的selinux属性永久的生效

restorecon reset /html context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

restorecon reset /html/file2 context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

restorecon reset /html/file1 context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

[[email protected] ~]# ls -lZ /html/   ##验证修改结果

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file2

[[email protected] ~]# ls -dZ /html/

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /html/

3)如果要恢复/html的文件属性可使用下列命令:

[[email protected] ~]# semanage fcontext -d "/html(/.*)?"   ##删除自定义的selinux属性

[[email protected] ~]# restorecon -F -R -v /html/  ##永久生效

restorecon reset /html context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0

restorecon reset /html/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0

restorecon reset /html/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0

[[email protected] ~]# ls -lZ /html  ##验证文件的selinux属性已经从“httpd_sys_content_t”改为默认的"default_t"

-rw-r--r--. root root system_u:object_r:default_t:s0   file1

-rw-r--r--. root root system_u:object_r:default_t:s0   file2

[[email protected] ~]# ls -dZ /html

drwxr-xr-x. root root system_u:object_r:default_t:s0   /html

4)file_t与default_t

file_t:文件没有selinux属性

default_t:文件或目录的selinux属性与file-context配置文件定义的模式不匹配

两种的类型的文件或目录,受限制的域的程序均不能访问

3.移动文件对selinux属性的影响

在SELinux环境中,文件和目录移动之后保持原有SELinux属性不变

准备测试文件:

[[email protected] ~]# touch test.file

[[email protected] ~]# ls -Z test.file

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 test.file

[[email protected] ~]# ls -dZ /var/www/html/

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

移动测试:

[[email protected] ~]# mv test.file /var/www/html/

[[email protected] ~]# ls -Z /var/www/html/test.file   ##移动后selinux属性依然是“admin_home_t”,并未继承“httpd_sys_content_t”

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /var/www/html/test.file

注意:

移动和复制对比中,复制更有利于保持文件的selinux属性,以便能正常访问。

4.检测文件的默认属性

利用matchpathcon,可以验证目录下的文件selinux属性标记是否正确。

准备测试文件:

[[email protected] ~]# touch /var/www/html/file{1,2,3}  ##创建三个文件

[[email protected] ~]# ls -Z /var/www/html/file*

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file3

修改测试:

[[email protected] ~]# chcon -t samba_share_t /var/www/html/file1  ##临时修改selinux属性

[[email protected] ~]# ls -Z /var/www/html/file1

-rw-r--r--. root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/file1

[[email protected] ~]# matchpathcon -V /var/www/html/file?   ##检测selinux属性的正确性,提示file1为“samba_share_t”应

为“httpd_sys_content_t”

/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0

/var/www/html/file2 verified.

/var/www/html/file3 verified.

[[email protected] ~]# touch test.file

[[email protected] ~]# ls -Z

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 test.file

[[email protected] ~]# mv test.file /var/www/html/  ##移动新文件测试

mv:是否覆盖"/var/www/html/test.file"? y

[[email protected] ~]# ls /var/www/html/test.file  -Z

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /var/www/html/test.file

[[email protected] ~]# restorecon -v /var/www/html/*   ##修复selinux属性

restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0-

>unconfined_u:object_r:httpd_sys_content_t:s0

restorecon reset /var/www/html/test.file context unconfined_u:object_r:admin_home_t:s0-

>unconfined_u:object_r:httpd_sys_content_t:s0

[[email protected] ~]# matchpathcon -V /var/www/html/*   ##提示verified表示校验成功

/var/www/html/file1 verified.

/var/www/html/file2 verified.

/var/www/html/file3 verified.

/var/www/html/test.file verified.

5.tar文件与selinux属性标记

tar命令不会保存属于扩展属性的selinux属性,使用“--selinux”或“--xattrs”可保存selinux属性信息。

准备对比步骤:

[[email protected] ~]# touch file{1..3}  ##创建文件

[[email protected] ~]# ls -Z

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file2

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file3

[[email protected] ~]# tar zcf test.tar.gz ./file*   ##不加“--selinux”选项

[[email protected] ~]# cp test.tar.gz /tmp/  ##拷贝文件

[[email protected] ~]# cd /tmp/   ##进入/tmp目录

[[email protected] tmp]# tar zxvf test.tar.gz   ##解压

./file1

./file2

./file3

[[email protected] tmp]# ls -Z   ##验证,selinux属性丢失

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 file2

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 file3

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 test.tar.gz

保留selinux属性:

[[email protected] tmp]# cd

[[email protected] ~]# touch file{4..5}

[[email protected] ~]# ls -Z file{4..5}

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file4

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file5

[[email protected] ~]# tar zcf test.se.tar.gz ./file{4..5} --selinux   ##压缩是保留selinux属性标记

[[email protected] ~]# cp test.se.tar.gz /tmp/

[[email protected] ~]# cd /tmp/

[[email protected] tmp]# tar zxvf test.se.tar.gz

./file4

./file5

[[email protected] tmp]# ls -Z  ##验证file1、2、3丢失了原有的selinux属性,file4、5保留了“admin_home_t”的selinux属性;请思考:

test开头的两压缩文件为什么是这样的selinux属性?

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 file1

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 file2

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 file3

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file4

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file5

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 test.se.tar.gz

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 test.tar.gz

时间: 2024-10-05 12:27:22

文件的复制、移动、压缩等对SELinux属性关系详解的相关文章

IOS中复制对象的用法及深拷贝和浅拷贝详解

亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 我们软件是基于移动设备的.所以我们必然的选择了安卓作为我们的开发工具.课程中,我们将简要的介绍Android的基本概念,然后进行我们的实战开发.在开发中,大家讲学习到基本的组件,适配UI,数据的存储,多线程下载,开机广播,闹钟提醒,短信发送等实际项目开发中碰到的有用的知识点.通过课程学习,让大家能够掌握Android软件开发的流程,注意点,及优化.帮助大家迅速的掌握Andr

文件压缩、解压缩以及归档工具详解

一.简介 早期的有compress和uncompress,其对应的是.Z结尾的压缩格式文件:现在使用较多的有: gzip/gunzip,其对应的是.gz结尾的压缩格式文件: bzip2/bunzip2其对应的是.bz2结尾的压缩格式文件: xz/unxz其对应的是.xz结尾的压缩格式文件: zip/unzip其对应的是.zip结尾的压缩格式文件: 二.compress/uncompress 语法:compress [-dfvcVr] [-b maxbits] [file ...] OPTION:

Maven插件wro4j-maven-plugin压缩、合并js、css详解

1.    在pom.xml文件中,引入wro4j-maven-plugin插件 <plugin> <groupId>ro.isdc.wro4j</groupId> <artifactId>wro4j-maven-plugin</artifactId> <version>${wro4j.version}</version> <executions> <execution> <id>opt

[转] linux系统文件流、文件描述符与进程间关系详解

http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括: 1.linux多/单进程与多/单文件对于文件流和描述符在使用时的关联情况及一些需要注意的问题. 2.fork,vfork流缓冲等对文件操作的影响. 1.linux文件系统结构 首先补充一点基础知识,了解一下linux文件系统.如下图所示: 图1 磁盘,分区和文件系统 应该明白,上图所示结构是硬盘中文件存放

文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解

阅读此文,必须具备知识点:<Linux 查看磁盘分区.文件系统.使用情况的命令和相关工具介绍><实例解说 fdisk 使用方法><合理规划您的硬盘分区><Fedora / Redhat 软件包管理指南> 如果您想加载一个分区(文件系统),首先您得确认文件系统的类型,然后才能挂载使用,比如通过mount 加载,或者通过修改 /etc/fstab来开机自动加载:如果您想添加一个新的分区,或者增加一个新的硬盘,您要通过分区工具来添加分区,然后要创建分区的文件系统,

go语言之行--文件操作、命令行参数、序列化与反序列化详解

一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: 标准输入 os.Stdout: 标准输出 os.Stderr: 标准错误输出 读写示例: package main import ( "fmt" "os" ) var( username,password string ) func main() { fmt.Prin

Linux 备份压缩 : OA信用网出租命令详解

Linux ar命令用于建立或修改备存文件,OA信用网出租(企 娥:217 1793 408)或是从备存文件中抽取文件. ar可让您集合许多文件,成为单一的备存文件.在备存文件中,所有成员文件皆保有原来的属性与权限. 当我们的程序中有经常使用的模块,而且这些模块在其他程序中也会用到,为了实现代码重用减少软件开发周期,我们可以将它们生成库,在需要的时候直接调用就可以了. ar 命令 可以用来创建.修改和提取库(档案archives) 命令格式 ar [--plugin name] [-X32_64

SVN与TortoiseSVN实战:文件加锁详解

硬广:<SVN与TortoiseSVN实战>系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主. 本篇详解使用TortoiseSVN对文件进行加锁和解锁的技巧,其中涉及到了之前介绍的SVN属性知识,关于属性可以翻看<SVN与TortoiseSVN实战:属性的奇技淫巧(一)>.<SVN与TortoiseSVN实战:属性的奇技淫巧(二)>. 加锁与解锁的操作对于项目中的二进制文件,如图片.声音.动态库等不可合

GCC全过程详解+剖析生成的.o文件[转]

使用GCC编译一个.c文件影藏了哪些过程? GCC四步详解第一步:预处理(也叫预编译)        gcc -E  hello.c  -o hello.i        或者 cpp hello.c > hello.i     [cpp是预编译器]        将所有#define删除,并且展开所有的宏定义        处理所有的条件预编译指令,如#if #ifdef  #undef  #ifndef  #endif #elif        处理#include,将包含的文件插入到此处,