Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160344
  • 博文数量: 126
  • 博客积分: 1073
  • 博客等级: 上尉
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 00:32
文章分类

全部博文(126)

文章存档

2018年(56)

2013年(1)

2012年(8)

2011年(61)

分类: LINUX

2011-01-24 20:41:53

关于linux下面 SELinux问题的讨论,

 

linux里面,所有的文件和进程都有一个security context的,而SELinux就是通过security context就用来对文件和进程进行控制的。

如何去查看文件的security context值呢,

#ls  -Z

[root@localhost ~]#

[root@localhost ~]# ls -Z

-rw-------  root root system_u:object_r:user_home_t    anaconda-ks.cfg

drwxr-xr-x root root root:object_r:user_home_t           Desktop

-rw-r--r--  root root root:object_r:user_home_t           file

-rw-r--r--  root root root:object_r:user_home_t           Finished

-rw-r--r--  root root root:object_r:user_home_t           install.log

-rw-r--r--  root root root:object_r:user_home_t           install.log.syslog

-rw-r--r--  root root root:object_r:user_home_t           Package

-rw-r--r--  root root root:object_r:user_home_t           Running

[root@localhost ~]#

这个就是我们文件的security context值,

root:object_r:user_home_t

root                  用户的用户名(一般文件是谁创建的,这个用户名就是谁)

object_r           文件的角色

user_home_t    context值的类型

context值的类型会随着文件在不同的位置,会跟着发生变化。

现在通过试验来验证一下

[root@localhost ~]#

[root@localhost ~]# ls -Z | grep file

-rw-r--r--  root root root:object_r:user_home_t        file

[root@localhost ~]#

[root@localhost ~]# cp file /var/ftp/pub/

cp: overwrite `/var/ftp/pub/file'? y

[root@localhost ~]#

[root@localhost ~]# cd /var/ftp/pub/

[root@localhost pub]#

[root@localhost pub]# ls -Z | grep file

-rw-r--r--  root root system_u:object_r:public_content_t file

[root@localhost pub]#

可以看到,这个文件的context值就发生变化了。

[root@localhost ~]#

[root@localhost ~]# cd /var/ftp/

[root@localhost ftp]#

[root@localhost ftp]# ls -Z

drwxr-xr-x  root root system_u:object_r:public_content_t pub

[root@localhost ftp]#

这个文件的context值会随着目录的作用和环境的不同而发生改变。

它会继承上一级目录的context值。

如何去查看一个进程的security context值呢,

#ps  -Z

[root@localhost ~]#

[root@localhost ~]# ps -Z

LABEL                                                                       PID       TTY    TIME   CMD

root:system_r:unconfined_t:SystemLow-SystemHigh   18408    pts/1  00:00:00  bash

root:system_r:unconfined_t:SystemLow-SystemHigh   1927 4   pts/1  00:00:00  tail

root:system_r:unconfined_t:SystemLow-SystemHigh   21330    pts/1  00:00:00  ps

[root@localhost ~]#

这个就是我们进程的security context值,

如何去修改一个文件的context值呢,

使用chcon命令来修改文件的context值,

Chcon=change  context

# Chcon  -t  context值的类型  文件名

[root@localhost ~]#

[root@localhost ~]# ls -Z | grep file

-rw-r--r--  root root root:object_r:user_home_t        file

[root@localhost ~]#

[root@localhost ~]# chcon -t tmp_t file

[root@localhost ~]#

[root@localhost ~]# ls -Z | grep file

-rw-r--r--  root root root:object_r:tmp_t              file

[root@localhost ~]#

可以看到,file这个文件的context值就改变了。

也可以改变目录的context值,要加上-R参数,表示递归。

如何去恢复一个文件的context值呢,

#restorecon  -v  file

-v   是查看改变的过程

[root@localhost ~]#

[root@localhost ~]# restorecon -v file

restorecon reset /root/file context root:object_r:tmp_t:s0->root:object_r:user_home_t:s0

[root@localhost ~]#

[root@localhost ~]# ls -Z | grep file

-rw-r--r--  root root root:object_r:user_home_t        file

[root@localhost ~]#

OKfile这个文件的context值就改变回来了。

同样的,恢复目录的context值也需要加上-R参数,表示递归。

 

SELinux的管理

关于SELinux的三种模式

Enforcing       强制模式

Permissive     警告模式(运用排错中)

Disabled        禁用模式

从强制模式切换到禁用模式,或者禁用模式切换到强制模式,都必须等到计算机下次启动的时候才会生效的。

但是强制模式和警告模式在切换的时候当前就可以生效。

如何去修改SELinux的模式呢,

可以通过文件来修改

/etc/sysconfig/selinux这个文件中可以修改SELinux的模式,

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#       enforcing - SELinux security policy is enforced.

#       permissive - SELinux prints warnings instead of enforcing.

#       disabled - SELinux is fully disabled.

SELINUX=enforcing

# SELINUXTYPE= type of policy in use. Possible values are:

#       targeted - Only targeted network daemons are protected.

#       strict - Full SELinux protection.

SELINUXTYPE=targeted

~ 

也可以通过图形界面修改

 

 

system-config-securitylevel

那么如何去查看计算机中正在生效的模式呢,

使用getenforce命令

[root@localhost ~]#

[root@localhost ~]# getenforce

Enforcing

[root@localhost ~]#

可以看到,系统正在处于SELinux的强制模式,

如何通过命令来实现强制模式和警告模式之间的切换,

使用setenforce命令来切换

#setenforce   0

切换成警告模式

#setenforce   1

切换成强制模式

[root@localhost ~]#

[root@localhost ~]# getenforce

Enforcing

[root@localhost ~]#

[root@localhost ~]# setenforce 0

[root@localhost ~]#

[root@localhost ~]# getenforce

Permissive

[root@localhost ~]# setenforce 1

[root@localhost ~]#

[root@localhost ~]# getenforce

Enforcing

[root@localhost ~]#

这就是强制模式和警告模式之间的切换,这些切换都是立即生效的。

 

关于selinuxBoolean

如何去查看Boolean值呢,

# getsebool -a

[root@localhost ~]# getsebool -a | grep ftp

allow_ftpd_anon_write --> on

allow_ftpd_full_access --> off

allow_ftpd_use_cifs --> off

allow_ftpd_use_nfs --> off

allow_tftp_anon_write --> off

ftp_home_dir --> on

ftpd_connect_db --> off

ftpd_disable_trans --> off

ftpd_is_daemon --> on

httpd_enable_ftp_server --> off

tftpd_disable_trans --> off

[root@localhost ~]#

这样可以查看关于服务的Boolean值,

怎么设置服务的Boolean

# setsebool -P allow_ftpd_anon_write=0

[root@localhost ~]#

[root@localhost ~]# setsebool -P allow_ftpd_anon_write=0

[root@localhost ~]# 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 --> on

ftpd_connect_db --> off

ftpd_disable_trans --> off

ftpd_is_daemon --> on

httpd_enable_ftp_server --> off

tftpd_disable_trans --> off

[root@localhost ~]#

0代表关闭,1代表打开。

 

linux系统中,如果我们的SELinux是处于强制状态的,一旦用户触犯了selinux的规则,那么SELinux将会阻挡用户的访问。但是linux提供给用户提供了一个解决方案,当用户触犯了SELinux的规则后,系统会跳出一个黄色五角星,并给出解决的方案。如果这个黄色五角星没有跳出来,可以使用sealert –b这条命令让其强制跳出来。如果这个软件包没有安装,那么就需要安装下,

这个功能是由setroubleshoot这个软件包提供的。

[root@localhost ~]#

[root@localhost ~]# service setroubleshoot restart

Stopping setroubleshootd:                                 [  OK  ]

Starting setroubleshootd:                                   [  OK  ]

[root@localhost ~]#

OK,这个服务是可以正常工作的。

 

关于linux下面SELinux的简单讨论就是这么多了。

阅读(545) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~