关闭SELinux

问题描述

  • 时间 2008.10.14
  • 环境 CentOS5
  • 症状 正常安装svn后执行不能
# 执行svn命令,会提示
[root@localhost lib]# svn
svn: error while loading shared libraries: /usr/local/svn-1.4.0/lib/libsvn_ra_dav-1.so.0: 
cannot restore segment prot after reloc: Permission denied

问题原因和解决方案

  • 非常快的排除了系统文件权限(就是那个chmod能改的lrwxrwxrwx)可能,因为这是一个符号链接,一直追过去权限没有问题
  • 不卖关子,这个问题的原因是因为SELinux被Enable但是没有配置过libsvn_ra_dav-1.so.0文件的security context的原因,为了检查这个问题,你可以执行下面的命令来确认
# sestatus [-v] 
# 注意里面 SELinux status:         enabled 部分

# 其他方法也可以查看,比如
cat /selinux/enforce
1 代表 enforcing 状态, 0 代表 permissive 状态

# 或者下面这个更直观
getenforce
  • 通常有两种解决方案
    • 方案一:避开问题,如果你提出了这个问题并为之困惑,我基本上可以判断你并不熟悉SElinux的工作性质,甚至从来没有注意过它的存在。基于这种考虑,如果你联系你们的服务器管理员后确认SElinux不是你们系统中必须的,那么把它干掉吧。具体方法是执行setenforce disabled来禁用selinux,或者至少setenforce permissive来用warning代替禁止你工作的error级错误,这样Selinux就不再强悍的把你挡掉了。同样的配置实现在CentOS5或者RHEL5中可以通过system-config-securitylevel-tui来设定,它包装了这个小功能。
    • 方案二:继续Enable SElinux的情况下,你需要针对这件事做的操作也很简单,执行下面的命令更改security context就可以了,问题是,你可能今后亦然遇到这种类似的问题,你需要比较了解SElinux的机制和你的应用程序的底层调用。
chcon -t texrel_shlib_t /usr/local/svn-1.4.0/lib/libsvn_ra_dav-1.so.0

多说两句

  • SElinux对于Linux新手来说可能是一个比较难于理解的工具,对于一般的新手系统管理员来说,你可以先跳过这个工具,简单的disable掉它。
  • SElinux很大程度上解决了简单的权限认证不能够保证系统真正安全的问题,是美国军方提出的。所以对于系统复杂,分工详细,安全要求比较高的系统来说,这是一个好东西,不过同时带来的是较为复杂的设置(一般非常强大的可定制工具都是这样),要求管理员对系统和程序比较了解,否则可能把自己希望的服务挡掉继而出现本文提到的类似问题。
  • 感兴趣的朋友可以直接查看SElinux的官方文档,来获取更多消息。

SElinux可能涉及到的命令

# 查看SElinux Enable情况
sestatus
getenforce

# 设定SElinux是否启用
setenforce

# 防火墙管理的TUI,可以设定Selinux状态
system-config-securitylevel-tui

# 查看当前用户security context
id -Z

# 查看文件security context
ls -Z
ls --lcontext 
ls --scontext

# 查看运行进程的security context
ps -eZ

# 更改文件security context
chcon

# 重置文件security context
restorecon

# 根据已有的挡掉的log生成允许的规则,可以帮助你调试当前规则
cat /var/log/message | audit2allow
audit2allow -d #这个是从dmesg里读
### 三级标题:关闭 SELinux 的方法 SELinux(Security-Enhanced Linux)是一种 Linux 内核安全模块,用于提供更细粒度的访问控制机制。在某些场景下,为了调试或兼容性需求,可能需要关闭 SELinux。 #### 永久关闭 SELinux 可以通过修改配置文件的方式永久关闭 SELinuxSELinux 的配置文件位于 `/etc/selinux/config`,将其中的 `SELINUX=enforcing` 修改为 `SELINUX=disabled`,即可在系统重启后生效。该操作可以通过以下命令实现: ```bash sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config ``` 或手动编辑配置文件: ```bash vim /etc/selinux/config ``` 将 `SELINUX=enforcing` 修改为 `SELINUX=disabled`。修改完成后,需重启系统以使更改生效,可使用 `reboot` 或 `init 6` 命令重启服务器[^1]。 #### 临时关闭 SELinux 如果不希望立即重启系统,也可以临时关闭 SELinux。使用 `setenforce 0` 命令可以将 SELinux 设置为宽容(Permissive)模式,此时不会强制执行安全策略,但仍然记录违规行为。若需重新启用强制模式,可使用 `setenforce 1` 命令[^1]。 可以通过 `getenforce` 命令查看当前 SELinux 的运行状态,输出结果可以是 `Enforcing`、`Permissive` 或 `Disabled` 中的一种[^3]。 #### 通过内核参数关闭 SELinux 在某些情况下,可以在系统启动时通过内核参数禁用 SELinux。例如,在 GRUB 或 LILO 的启动参数中添加 `selinux=0`,即可在本次启动中禁用 SELinux。这种方式适用于临时调试,但不会影响系统的持久配置[^3]。 ### 三级标题:总结 关闭 SELinux 可以通过多种方式实现,其中修改配置文件并重启系统是最常见且可靠的永久关闭方法。若需要临时关闭,可使用 `setenforce 0` 命令,避免立即重启带来的服务中断。此外,通过调整内核启动参数也可实现临时禁用。无论采用何种方式,建议在操作前确认系统状态和安全性影响。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值