Board logo

标题: 设置Squid缓存目录的SELinux权限[电脑写手] [打印本页]

作者: fxmxyy    时间: 2010-3-12 10:00     标题: 设置Squid缓存目录的SELinux权限[电脑写手]

电脑网络分区写手稿件,原创首发于操作系统论坛,请勿转载

SELinux是增强安全的一个工具,不过这东西是过于复杂了,而且许多权限很难搞定,所以在看许多基于Redhat平台的软件安装与配置的第一步都是关闭SELinux,但这样会牺牲一定的安全性。如果实再搞不定的时候,也只有关它一条路了。

在Redhat的平台下,SELinux的配置文件在/etc/sysconfig/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

# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0

enforcing表示开启,就是上面我加红的地方。

今天我要做的操作是给Squid服务器再加一块硬盘,当然不是做Raid,而是让Squid把缓存目录写到两块硬盘上,这样可以提高硬盘的IO,从而提升Squid的性能,多硬盘不是所有情况下都需要做Raid的。

至于分区,挂载,修改/etc/fstab,/etc/squid/squid.conf配置文件以后有机会再写了,这里就不再详术了。

Squid默认的缓存目录在/var/spool/squid,我新建了一个名为squid2的目录

mkdir -p /var/spool/squid2,之后要修改该文件夹的权限,chown squid.squid /var/spool/squid2,这里就可以看出Linux与Windows的区别了吧,Linux的权限划分的是很细的,Squid服务是以Squid用户或Squid组的权限来运行的,并不是以root来运行的,如果/var/spool/squid2的所有者与组是root的话,Squid对该目录是没有读写权限的,肯定要出错,所以先修改目录的权限。

之后,一般的操作就是要生成Squid的缓存目录了,用squid -z,可当我执行完该操作后,启动Squid服务时出错了,大家可以看一下日志(Linux下的日志中的出错信息比Windows的事件查看器的参考价值大多了):

2009/03/22 14:28:55| Creating Swap Directories
squid: ERROR: Could not send signal 0 to process 2405: (3) No such process
WARNING: cache_dir /var/spool/squid2: (13) Permission denied
FATAL: cache_dir /var/spool/squid2: (13) Permission denied
Squid Cache (Version 2.6.STABLE21): Terminated abnormally.
CPU Usage: 0.010 seconds = 0.005 user + 0.005 sys
Maximum Resident Size: 0 KB

大家看还是权限的问题,这回的权限就是SELinux的权限了。

用ls -Z命令,可以查看目录或文件的SELinux权限,与系统默认的squid目录一对比就发现了问题。

drwxr-x--- squid squid system_ubject_r:squid_cache_t squid
drwxr-xr-x squid squid rootbject_r:var_spool_t squid2

这时,需要把squid2及其中所有子目录的SELinux权限都改成squid_cache_t才行

执行chcon -R -t squid_cache_t /var/spool/squid2

SELinux真的是太复杂了,好在用Google还是很容易的能查到相关信息,这回解决问题还是很顺利,第一回搞定Apache的虚拟主机目录的时候,真是给我搞晕了。

之后就可以正常的运行squid服务了,用services squid start启动服务,一切正常。

也就我写这个帖子的时间吧,新的缓存目录已经缓存了358M的内容了。

/dev/hdb5 19G 358M 18G 2% /var/spool/squid2
作者: 星☆雨    时间: 2010-3-12 10:01

补充一下,我服务器的时间严重不准,造成日志中的时间超前于本帖的发布时间。




欢迎光临 110互动论坛 (http://bbs.110.com/) Powered by Discuz! 6.1.0