[内容] CentOS&RHEL selinux 的设置

内容目录:
1.1 selinux 特性一:创建的文件或目录会自动继承其父目录的 selinux 标签
1.1.1 在 /var/www/html/ 目录下新创建 index.html 文件
1.1.2 查看 /var/www/html/ 目录的 selinux 标签
1.1.3 查看新生成的 /var/www/html/index.html 标签
1.2 slinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 selinux 标签,普通复制会改变 selinux 标签
1.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件
1.2.2 查看 ls -Zd /tmp/ 目录的 selinux 标签
1.2.3 查看新创建文件的标签
1.2.4 将 /tmp/file1 复制到 /var/www/html/
1.2.5 将 /tmp/file2 移动到 /var/www/html/
1.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性
1.2.7 查看这些文件的 selinux 标签

内容二:查看某个文件或目录 selinux 标签的方法
2.1 查看某个文件 selinux 标签的方法
2.2 查看某个目录 selinux 标签的方法

内容三:查看所有 selinux 标签的方法
3.1 查看所有文件和目录的 selinux 标签
3.2 查看所有端口的 selinux 标签

内容四:设置 selinux 标签的方法
4.1 设置文件和目录 slinux 标签的方法
4.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 selinux 标签
4.1.1.1 semanage fcontext 命令的常用选项
4.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 selinux 标签
4.1.1.2.1 使用 smanage fcontext 命令设置 selinux 标签
4.1.1.2.2 使用 restorecon 命令修改默认上下文
4.1.2 使用 chcon 命令设置 selinux 标签
4.2 设置端口 selinux 的方法

具体的内容:
内容一:selinux 的常见特性
1.1 selinux 特性一:创建的文件或目录会自动继承其父目录的 selinux 标签
1.1.1 在 /var/www/html/ 目录下新创建 index.html 文件
# echo website > /var/www/html/index.html

(补充:这里以在 /var/www/html/ 目录下生成 index.html 文件为例)

1.1.2 查看 /var/www/html/ 目录的 selinux 标签
# ls -dZ /var/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

1.1.3 查看新生成的 /var/www/html/index.html 标签
# ls -Z /var/www/html/index.html/index.html 
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

(补充:从内容 1.1.2 和内容 1.1.3 命令的结果可以看出新生成的文件或其父目录的 selinux 标签一致)

1.2 slinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 selinux 标签,普通复制会改变 selinux 标签
1.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件
# touch /tmp/file{1,2,3}

1.2.2 查看 ls -Zd /tmp/ 目录的 selinux 标签
# ls -Zd /tmp/
unconfined_u:object_r:user_tmp_t:s0 /tmp/

1.2.3 查看新创建文件的标签
# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1  unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
unconfined_u:object_r:user_tmp_t:s0 /tmp/file3

1.2.4 将 /tmp/file1 复制到 /var/www/html/
# cp /tmp/file1 /var/www/html/

1.2.5 将 /tmp/file2 移动到 /var/www/html/
# mv /tmp/file2 /var/www/html/

1.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性
# cp -a /tmp/file3 /var/www/html/

1.2.7 查看这些文件的 selinux 标签
# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 file1           unconfined_u:object_r:user_tmp_t:s0 file3
unconfined_u:object_r:user_tmp_t:s0 file2

(补充:从内容 1.2.3 和内容 1.2.7 命令的结果可以看出只有普通复制会改变 selinux 标签 )

内容二:查看某个文件或目录 selinux 标签的方法
2.1 查看某个文件 selinux 标签的方法
# ls -Z <文件名>

2.2 查看某个目录 selinux 标签的方法
# ls -Zd <目录名>

内容三:查看所有 selinux 标签的方法
3.1 查看所有文件和目录的 selinux 标签
# semanage fcontextv -l

3.2 查看所有端口的 selinux 标签
# semanage port -l

内容四:设置 selinux 标签的方法
4.1 设置文件和目录 slinux 标签的方法
4.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 selinux 标签
4.1.1.1 semanage fcontext 命令的常用选项
-a 添加或变更 selinux 标签
-d 删除 selinux 标签
-l 查看所有的 selinux 标签 
-t 指定上下文 selinux 标签
-v 显示修改 selinux 标签的内容
-R 递归设置 selinux 标签
-m 变更 selinux 标签

4.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 selinux 标签
4.1.1.2.1 使用 smanage fcontext 命令设置 selinux 标签
# semanage fcontext -a -t httpd_sys_content_t "/tmp(/.*)?"

(补充:这里以将 /tmp(/.*) 的 selinux 标签设置为 httpd_sys_content_t 为例)

4.1.1.2.2 使用 restorecon 命令修改默认上下文
# restorecon -Rv /tmp
Relabeled /tmp from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0

4.1.2 使用 chcon 命令设置 selinux 标签
# chcon -t httpd_sys_content_t /tmp/*

(补充:这里以将 /tmp/* 的 selinux 标签设置为 httpd_sys_content_t 为例)

4.2 设置端口 selinux 的方法
# semanage port -a -t http_port_t -p tcp 82

(补充:这里以将 TCP 82 端口的 slinux 标签设置为 http_port_t 为例)