关于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 ~]#
OK,file这个文件的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 ~]#
这就是强制模式和警告模式之间的切换,这些切换都是立即生效的。
关于selinux的Boolean值 如何去查看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的简单讨论就是这么多了。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务