`

selinux

 
阅读更多
selinux

对超级管理员有效
安全加强型linux
自主访问体制 :又大变小
user         group           other
        \                  |                  /
                    file
                  /        |            \
             r      w       x
强制访问体制 最小权限:由小该大
打开SELINUX
 sestatus 查看slinux状态
vim/etc/sysconfig/selinux
                enforcing - SELinux security policy is enforced.强制限制
  4 #       permissive - SELinux prints warnings instead of enforcing. 警告但不限制
  5 #       disabled - SELinux is fully disabled.
 SELINUXTYPE=targeted 定义使用的SELINUX  保护大多数的网络服务
1改为 permissive
2.配置
sealert -a /var/log/audit/audit.log 显示所有的selinux报错
布尔直boolean 0关1开
安全上下文
man -k(模糊查询)ftp|grep selinux
ls -Zd      /var/ftp            安全上下文
system_u:object_r:public_content_t:s0
       身份         角色              类型


设置semanage fcontext -a -t public_content_rw_t "/var/ftp/incoming(/.*)?"

恢复 restorecon -R -v /var/ftp/incoming
setenforce 0关只警告不阻止1开启 警告1警告和阻止
setenforce  permissive <===> setenforce  0          0关只警告不阻止
setenforce  enforcing  <===> setenforce  1            1警告并且阻止

1、开启FTP服务,并用普通系统帐号直接登录FTP服务器,selinux会不允许访问,上传。
 如何配置selinux来解决?
   思路:
A、看日志
  1、tail /var/log/messages ---
    sealert -l xxxxxxxxxxxxxxxxxxxxx  看指定ID的警告提示消息
  2、sealert -a /var/log/audit/audit.log 看所有的ID的警告消息
  3、有一个程序会自动弹出提示(右上角的五角星SelinuxTroubleshooter程序),此程序要想正常的运行,必须ps aux | grep setroubleshootd 进程存在(]# setroubleshootd 执行此命令便可)
B、日志中会提示如何配置selinux,以便开放相应的权限
  最好自行查询帮助来解决问题
[root@ mnt]# man ftpd_selinux
[root@ mnt]# man httpd_selinux
[root@ mnt]# man samba_selinux
[root@ mnt]# man nfs_selinux
[root@ mnt]# man -k ftp  | grep selinux
ftpd_selinux         (8)  - Security-Enhanced Linux policy for ftp daemons
[root@ mnt]# man 8 ftpd_selinux
[root@ mnt]# man -k http  | grep selinux
httpd_selinux        (8)  - Security Enhanced Linux Policy for the httpd daemon

setenforce  permissive <===> setenforce  0
setenforce  enforcing  <===> setenforce  1
sestatus
目的:设置匿名用户可以上传下载FTP  192.168.0.28
1、设置selinux为只警告,不阻止状态
 setenforce  0
2、开始配置vsftpd
vim /etc/vsftpd/vsftpd.conf
anon_root=/ftp /ftp共享目录
anon_upload_enable=YES //允许下载
anon_mkdir_write_enable=YES  //允许上传
anon_other_write_enable=YES //允许其他人上传
---
mkdir -p /ftp/public
chown ftp /ftp/public
chmod u=rwx /ftp/public
---
service vsftpd restart
----
3、客户端匿名访问,确实可以上传,说明 FTP配置文件权限设置正确,/ftp/public目录权限设置正确
4、把selinux设置为enforcing状态。
需要配置selinux允许匿名写:
  man  8  ftpd_selinux
   a.根据Manual来修改匿名共享根目录的file type(ls -Z)
 chcon -t public_content_rw_t  /ftp/public
 如果不改,默认第三段是default_t
 b.根据manual来修改布尔值,开启如下
 setsebool -P allow_ftpd_anon_write on 或者
 setsebool -P allow_ftpd_anon_write=1
作业1:
1 请问selinux开启的情况下,apache的默认页面是否可以查看 ,ftp的匿名访问是否可以访问
2 请在selinux开启的情况下,配置apache的别名
3 请在selinux开启的情况下,配置samba通过用户sambauser1访问家目录和访问指定的共享目录
4 quota配额
5 ext3 的acl属性 setfacl /getfacl
6 apache+ldap验证
SELINUX例子!
[root@localhost files]# system-config-selinux
[root@localhost files]# pwd
/etc/selinux/targeted/contexts/files
[root@localhost files]# grep /var/www file_contexts
在selinux开启的情况下,策略为targeted时,配置网络服务时的思路如下
  先setenforce  0 ----- permissive
  然后配置服务
  接下来找客户端测试服务正常
   setenforce 1 ----- enforcing
  然后客户端访问,看是否受限----看日志/帮助---根据提示解决限制问题
解决问题的方法有三种:
1、看日志
   得安装
[root@localhost www]# yum -y install  setroubleshoot-server
  并启动此程序
[root@localhost www]# setroubleshootd
   a.tail /var/log/messages
Dec  5 18:29:32 localhost setroubleshoot: SELinux is preventing access to files with the default label, default_t. For complete SELinux messages. run sealert -l a098bbc4-3b76-44d7-a717-1181a0c7253d
   b.sealert -a /var/log/audit/audit.log
   c.点击 [系统]---[管理]---[SElinux Management]--五角星图标

2、看manual
   man httpd_selinux
   man ftpd_selinux
   man samba_selinux
3、参照法


1、apache
  apache别名
查看日志法:
sealert -a /var/log/audit/audit.log
查看manual法:
[root@localhost www]# man httpd_selinux
[root@localhost www]# chcon -R -t httpd_sys_content_t /www
参照法:
[root@localhost html]# chcon -R  --reference  /var/www/html/index.html   /www/
[root@localhost html]# ls -Zd /www/
drwxr-xr-x  root root root:object_r:httpd_sys_content_t /www/

2、samba配置家目录共享和指定目录共享,并启动服务

[root@localhost html]# sestatus
[root@localhost html]# setenforce 0
[root@localhost html]# yum -y install samba samba-common samba-client
[root@localhost html]# vim /etc/samba/smb.conf
[homes]  此段关于家目录的共享,默认存在,不用配置
        comment = Home Directories
        browseable = no
        writable = yes
;       valid users = %S
;       valid users = MYDOMAIN\%S
[myshare] 添加一段关于指定目录的共享,并且要求设置为用户sambauser1,sambauser2可读可写
        comment = test for selinux
        path    = /samba
        writable = yes
        browseable = yes
        valid users = sambauser1 sambauser2

[root@localhost home]# mkdir /samba
[root@localhost home]# useradd -s /sbin/nologin   sambauser1
[root@localhost home]# useradd -s /sbin/nologin   sambauser2
[root@localhost home]# smbpasswd -a sambauser1
New SMB password:
Retype new SMB password:
[root@localhost Server]# smbpasswd -a sambauser2
New SMB password:
Retype new SMB password:
Added user sambauser2.
[root@localhost samba]# setfacl -m u:sambauser1:rwx /samba/
[root@localhost samba]# setfacl -m u:sambauser2:rwx /samba/

找客户端验证samba的家目录共享 和 指定目录共享
[root@localhost Server]# smbclient -L 192.168.0.5 -U sambauser1
[root@localhost Server]# smbclient -L 192.168.0.5


[root@localhost /]# mount -t cifs //192.168.0.5/homes  /mnt -o user=sambauser2,pass=123 说明家目录共享实现成功
[root@localhost /]# mount.cifs //192.168.0.5/myshare  /net -o user=sambauser1,pass=1234 说明自定义共享实现成功

接下来!!!!!
开启selinux为enforcing状态

[root@localhost samba]# setenforce 1


]# chcon -t samba_share_t /samba
]# setsebool -P samba_enable_home_dirs=1
]# setsebool -P samba_export_all_rw=1
]# setsebool -P samba_export_all_ro=1

[root@localhost html]# restorecon -vR a
restorecon reset /var/www/html/a context root:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0



那么倒底哪种TYPE值应该被设置呢?
提供了两大种帮助 :
man
      man -k http | grep selinux
     man -k ftp | grep selinux
   
selinux的故障诊断器
    图形的
        [root@ ~]# setroubleshootd 直接启动这个程序,会有一个黄色的一角星,在selinux阻止某些事件时,自动弹出帮助 !
        [root@ ~]# ps uax | grep setroubleshootd
    文本的日志
       ]# sealert -a  /var/log/audit/audit.log
        其实/var/log/messages文件中也会有帮助
       
------
setroubleshoot-server-2.0.5-3.el5.noarch.rpm

----
apache定义别名:
man -k httpd| grep selinux
man httpd_selinux
 The following  file  contexts  types  are
       defined for httpd:

              httpd_sys_content_t
              - Set  files  with  httpd_sys_con-
              tent_t for content which is avail-
              able from all  httpd  scripts  and
              the daemon.

chcon –Rt httpd_sys_content_t  /newdocumentroot
-t选项指出文件的类型应该改变而安全上下文的剩余部分保持不动。
chcon --reference /var/www/html  /newdocumentroot
---------------------------------------
cd  /etc/selinux/targeted/contexts
grep –Rh httpd_sys_content_t  .



SELINUX配置的时候,一般涉及到
   1安全上下文中的 type字段 ,通过chcon
   2配置相应的布尔值,来表示开启或关闭某种功能


~~~~~~~~~~~~~~~~~~~~~~~~
setsebool -P ftp_home_dir on
[root@stu254 contexts]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off
[root@stu254 contexts]# setsebool -P ftp_home_dir on 


[root@stu254 ~]# restorecon /install.log
[root@stu254 ~]# fixfiles relabel

=========回顾=========
[root@ ftp]# ls /etc/sysconfig/selinux
[root@ ftp]# setenforce 0
[root@ ftp]# setenforce 1
[root@ ftp]# ls /selinux/booleans/
[root@ user1]# ls /selinux/booleans/
[root@ user1]# getsebool -a | grep ftp_home_dir
ftp_home_dir --> on

[root@ ftp]# ls /etc/selinux/targeted/contexts/
[root@ ftp]# id -Z |ps auxZ | ls -Z
[root@ ftp]# man -k samba | grep selinux
samba_selinux        (8)  - Security Enhanced Linux Policy for Samba
[root@ ftp]# man -k nfs | grep selinux
nfs_selinux          (8)  - Security Enhanced Linux Policy for NFS

[root@ ftp]# tail  /var/log/messages
[root@ ftp]# sealert -a /var/log/audit/audit.log
[root@ ftp]# setroubleshootd
[root@ ftp]# setroubleshootder----故障浏览器

dhcp  dns  ftp nfs samba postfix apache squid  mysql
extmail


-------------------------
[root@ ftp]# chcon -R --reference=/var/www/html/index.html  /www2

恢复上下文

 1 restorecon -R  dir/file
    restorecon -RF dir/file


2  [root@ home]# touch /.autorelabel
    [root@ home]# reboot


++++++++++++++++++++++++
1、配置HTTPD的别名
chcon -R -t  httpd_sys_content_t   /dir
2、配置FTP允许系统用户访问
在selinux为enforcing的模式下,FTP的匿名访问及下载是允许的!

如果需要系统用户通过FTP读写家目录,则需要配置SELINUX开放权限

方法:
读日志获取信息或者查看手册 :
tail /var/log/messages ---> sealert  -l   xxxxxxxxxxxxxxxxxxxxxxxx
man ftpd_selinux
根据提示配置如下布尔值:
setsebool -P ftp_home_dir=1 或者
setsebool -P ftp_home_dir on
 getsebool -a  查看所有布尔值

3、配置FTP允许匿名上传下载 /public/ftp目录
[root@host68 ~]# mkdir -p /public/ftp
[root@host68 ~]# chown ftp.ftp /public/ftp/  允许ftp用户写目录
[root@host68 ~]# ls -ld /public/ftp/
drwxr-xr-x 2 ftp ftp 4096 02-12 14:15 /public/ftp/
[root@host68 ~]# vim /etc/vsftpd/vsftpd.conf
anon_root=/public  指定匿名访问根位置
anon_upload_enable=YES 允许匿名上传
anon_mkdir_write_enable=YES  允许匿名的创建
anon_other_write_enable=YES  允许匿名的删除
[root@host68 ~]# service vsftpd restart

[root@host68 ~]# chcon -R -t public_content_rw_t /public/ftp/
[root@host68 ~]# setsebool -P allow_ftpd_anon_write on

4、配置NFS实现共享 /nfspublic目录可读可写
[root@host68 ~]# mkdir /nfspublic
[root@host68 ~]# chmod o+w /nfspublic/
[root@host68 ~]# ls
drwxr-xrwx 2 root root 4096 02-12 14:55 /nfspublic/
[root@host68 ~]# tail -n 1  /etc/exports
/nfspublic  *(rw)
[root@host68 ~]# service portmap restart
[root@host68 ~]# service nfs restart
客户端访问:
[root@localhost /]# showmount -e 192.168.1.68
[root@localhost /]# mount -t nfs 192.168.1.68:/nfspublic /mnt
[root@localhost /]# mkdir /mnt/cba
man  nfs_selinux得知如下的帮助 :
 If you want to share files read/write you must
       set the nfs_export_all_rw boolean.

       setsebool -P nfs_export_all_ro=1
       chcon -R -t public_content_rw_t /nfspublic/
5、配置SAMBA共享目录/smbpublic允许指定用户u1可读可写
     并允许u1用户可通过samba服务访问自己的家目录
[root@host68 ~]# mkdir /smbpublic
[root@host68 ~]# useradd -s /sbin/nologin u1
[root@host68 ~]# chmod o+w /smbpublic/
[root@host68 ~]# vim /etc/samba/smb.conf
290 [public]
291         comment = Public Stuff  描述
292         path = /smbpublic   共享路径
293         public = yes   
294         valid users = u1  允许的用户
295         writable = yes        可写
[root@host68 ~]# smbpasswd  -a  u1
New SMB password:
Retype new SMB password:
[root@host68 ~]# service smb restart

[root@localhost /]# smbclient -L 192.168.1.68 -U u1
Password: 输入正确的密码
Domain=[HOST68] OS=[Unix] Server=[Samba 3.0.33-3.28.el5]

        Sharename       Type      Comment
        ---------       ----      -------
        public          Disk      Public Stuff
        IPC$            IPC       IPC Service (Samba Server Version 3.0.33-3.28.el5)
        u1              Disk      Home Directories  家目录共享不用定义,配置文件中已经有配置共享
Domain=[HOST68] OS=[Unix] Server=[Samba 3.0.33-3.28.el5]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        MYGROUP             
在selinux状态为permissive的情况下,客户访问共享:
[root@localhost /]# mount -t cifs //192.168.1.68/public  /mnt -o user=u1,pass=u1
[root@localhost /]# cd /mnt
[root@localhost mnt]# ls
[root@localhost mnt]# mkdir a
[root@localhost mnt]# ls
a
[root@localhost mnt]# cd ..
[root@localhost /]# umount /mnt

[root@localhost /]# mount -t cifs //192.168.1.68/u1  /mnt -o user=u1
Password:
接下来,把selinux设置为enforcing状态,发现家目录的共享不能挂载,于是看日志或者man
解决方法:
[root@host68 ~]# setsebool -P samba_enable_home_dirs=1
指定的共享smbpublic目录也不可访问的,于是查手册 man samba_selinux 
解决方法如下:
[root@host68 ~]# chcon -t samba_share_t /smbpublic/ -R
用户,文件,进程都有上下文
 id - Z
 ls - Z
 ps -Z
身份                         角色               类型
root                       system_r(用户)         xxxxx
system_u(系统文件)        object_r (文件)   
user_u
selinux 描述了一种进程对文件的操作权限。
selinux在策略中定义 某些上下文的进程 要操作的文件的上下文 必须所指定的字符。指定的字符如何得知呢?通过MAN手册中的帮助来得知。不需要死记。
restorecon -v  filename
- R 递归
恢复上下文


       ftpd_selinux(8),   named_selinux(8),   rsync_selinux(8),   httpd_selinux(8),
       nfs_selinux(8), samba_selinux(8),  nis_selinux(8), ypbind_selinux(8)

分享到:
评论

相关推荐

    SELinux手册 电子书 pdf 英文

    SELinux 手册 SELinux(Security-Enhanced Linux)是一种基于 Linux 操作系统的访问控制机制,旨在提高系统的安全性和稳定性。它通过 Mandatory Access Control(强制访问控制)机制来控制进程和文件之间的交互,以...

    SELinux详解-中文版.pdf

    《SELinux详解》是一本深度解析安全增强的Linux(SELinux)操作系统的书籍,旨在帮助读者理解、编写、修改和管理SELinux策略,提升Linux系统的安全性。书中详细介绍了SELinux的作用、生效机制以及策略模块的编写,...

    SELinux-by-Example-Using-Security-Enhanced-Linux

    SELinux by example is the first complete, hands-on guide to using SELinux in production environments. Authored by three leading SELinux researchers and developers, it illuminates every facet of ...

    selinux中文手册和详细解说

    **SELinux(Security-Enhanced Linux)** 是一种强制访问控制机制,由美国国家安全局(NSA)开发,用于提高Linux操作系统的安全性。它通过精细的权限管理,为系统中的每个进程、文件和其他资源分配安全上下文,实现...

    selinux-example_SELinux_

    **SELinux:Linux安全增强系统详解** 在深入探讨SELinux之前,我们首先需要理解它的全称:Security-Enhanced Linux,即安全增强型Linux。它是一种强制访问控制(MAC)系统,由美国国家安全局(NSA)开发,旨在提高...

    Lock SELinux forced mode.zip

    标题“Lock SELinux forced mode.zip”暗示了这个压缩包与Linux系统的安全增强层(Security-Enhanced Linux,简称SELinux)有关,特别是涉及到强制模式(forced mode)的配置。在这个场景下,SELinux是一个内核模块...

    [SELinux] SELinux 系统管理手册 (英文版)

    [Packt Publishing] SELinux 系统管理手册 (英文版) [Packt Publishing] SELinux System Administration (E-Book) ☆ 图书概要:☆ A comprehensive guide to walk you through SELinux access controls ...

    SELinux System - 2nd Edition + SELinux 详解 SEAndroid基础

    **SELinux系统详解** 安全增强型Linux(SELinux)是一种强制访问控制(MAC)系统,它增强了Linux操作系统的安全性,防止恶意软件和攻击者通过权限提升来破坏系统。SELinux的核心在于其策略,该策略定义了系统中每个...

    SELinux中文.pdf

    "SELinux中文指南" SELinux(Security-Enhanced Linux)是一种强大的 Linux 安全机制,旨在提供一个灵活、可配置的安全解决方案。本文档提供了 SELinux 的详细介绍,包括语法规则、安装、配置、用户管理等方面的...

    SELinux Notebook 是一本关于 SELinux 的开源书籍,最初由 Richard Haines创建并捐赠给 SE

    SELinux Notebook 是一本关于 SELinux 的开源书籍,最初由 Richard Haines创建并捐赠给 SELinux 社区。该笔记本的目标是成为有关 SELinux 的最新、最全面的书籍,涵盖 Linux 内核组件、用户空间库和工具、策略工具链...

    SELinux详解.pdf

    SELinux(Security-Enhanced Linux)是一种安全模块,最初由美国国家安全局(NSA)开发,后来贡献给了开源社区。它在Linux内核中提供了强制访问控制(MAC)安全策略,可以对系统中运行的所有程序和进程进行精细控制...

    SElinux详解.pdf

    ### SELinux详解 #### SELinux概述 SELinux(Security-Enhanced Linux)是一种为Linux内核提供的强制访问控制(MAC)安全扩展。本节将详细解释SELinux的基础知识及其架构。 - **背景**:操作系统访问控制的历史和...

    selinux初始化流程

    SELinux(Security-Enhanced Linux)是Linux操作系统中一种强制访问控制策略的实现,它为系统提供了更高级别的安全防护。在Linux系统启动时,SELinux的初始化流程扮演着至关重要的角色,确保系统的安全策略得以正确...

    selinux权限配置指南.pdf

    本文档《selinux权限配置指南.pdf》将重点讲解SELinux的基本概念、运行模式、语法格式以及权限配置的各个方面,特别是结合Android平台的SELinux(sepolicy)进行讲解,旨在帮助开发者更好地理解和配置SELinux,以...

    container-selinux-2.9-4.el7.noarch.zip

    标题中的"container-selinux-2.9-4.el7.noarch.zip"表明这是一个与Linux安全模块SELinux(Security-Enhanced Linux)相关的软件包,适用于版本为2.9的container-selinux,并且它是针对EL7(Enterprise Linux 7,通常...

    container-selinux-2.9-4.el7.noarch.rpm.zip

    `container-selinux-2.9-4.el7.noarch.rpm.zip`这个压缩包文件是与Docker相关的,它包含了一个名为`container-selinux-2.9-4.el7.noarch.rpm`的软件包,这是Docker在Red Hat Enterprise Linux 7 (RHEL 7)或其兼容...

    在SELinux中保护进程间通信

    ### 在SELinux中保护进程间通信 #### 引言 随着现代计算技术的发展,系统安全变得日益重要。其中,强制访问控制(Mandatory Access Control, MAC)机制是实现安全系统的关键组成部分之一。在安全系统设计中,对...

Global site tag (gtag.js) - Google Analytics