Tag Archive: Linux


Linux下为PHP安装Zend Optimizer

安装Zend Optimizer的过程自然是很顺利,按照其安装向导一路下去就安装成功了。可是安装完成以后用phpinfo一看,Zend Optimizer没有随Web服务起来啊。到log里去看了下,无法加载Zend Optimizer,估计是SELinux的缘故。搜索了下,果然是。找到Zend Optimizer的动态库安装目录,默认应该是/usr/local/Zend/lib,执行

chcon ZendExtensionManager.so -t shlib_t
chcon ZendExtensionManager_TS.so -t shlib_t

然后,根据phpinfo里显示的php版本,我这里是5.1.2,找到/usr/local/Zend/lib/Optimizer-3.3.3/php-5.1.x目录下的ZendOptimizer.so,更改其安全策略。

chcon ZendOptimizer.so -t shlib_t

最后重启Apache,应该在phpinfo里看到成功加载了Zend Optimizer

Linux下root用户vi编辑器语法高亮

su编辑一些系统配置文件,总是没有行号显示,更别提有语法高亮了。

找到/etc/profile.d/vim.sh这个脚本,把第三行([ `/usr/bin/id -u` -le 100 ] && return)注释掉就行了。

vi中复制多行的命令,将52到61行的内容复制到62行 :52,61 co 62

Linux磁盘配额管理

启用磁盘管理
1、修改/etc/fstab文件:LABEL=/home / ext3 defaults 1 1 改为:LABEL=/home / ext3 defaults,usrquota,grpquota 1 1。usrquota是基于用户的磁盘配额,grpquota是基于组的磁盘配额。
需要重新启动一下,或者remount一下(mount -o remount /home)。
2、在/home中建立aquota.user或aquota.group,用touch命令建立,touch aquota.user 或aquota.group。但这时建立好的文件是空的,不符和系统的需要。
3、用quotacheck -c /home 将这两个文件(aquota.user或aquota.group)格式化。如果是/分区,还需要加-m参数。-m的意思是强迫在“读、写”模式下检查硬盘的配额。
4、quotaon /home 启动磁盘配额。

接着是对每个用户进行磁盘限额设置
edquota 用户名/组名 设置用户/组的配额。例如:edquota user_name;edquota -g group_name。执行后会打开一个vi编辑窗口。可以设置磁盘空间和节点数目的配额。其中soft只是起到警告的作用,并不会真正的限制用户/组。hard就会强制限制用户/组的磁盘空间和节点数目了。

其他的一些设置:
1、设定soft quota和hard quota之间的时间:edquota -t 出现一个 vi 窗口
2、成批的复制相同的磁盘配额给不同用户:edquota -p user user1 user2 user3;edquota -g -p group group1 group2 group3
3、取消磁盘限额:quotaoff /home

Linux服务器的一些配置

最近升级了系统,需要重新配置下,有些东西年代久远早已忘记,这次只好重新记一下了。

vsftpd
本地用户登陆后,出现500 OOPS: cannot change directory的错误。这是由于SELinux的关系,在终端里执行下/usr/sbin/setsebool -P ftp_home_dir=1就行了。
想限制某个IP(譬如:192.168.1.200)的用户访问ftp,则在/etc/hosts.deny文件中添加一行vsftpd: 192.168.1.200

iptable端口转发
首先应该确认下/etc/sysctl.conf配置文件中net.ipv4.ip_forward是否=1,也即允许转发,默认的是0
设A计算机有两块网卡,eth0连外网,ip为210.12.3.10;eth1连内网,ip为192.168.0.1。现在需要把发往地址210.12.3.10的81端口的ip包转发到ip地址为192.168.0.2的8180端口,设置如下:
1. iptables -t nat -A PREROUTING -d 210.12.3.10 -p tcp -m tcp –dport 81 -j DNAT –to-destination192.168.0.2:8180
2. iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp –dport 8180 -j SNAT –to-source 192.168.0.1

查看一下NAT表:
iptables -L -t nat

Apache
开启用户目录,httpd.conf要修改,SELinux也要修改把用户html目录(如public_html)的安全策略改为httpd_sys_content_t类型,执行restorecon -R -v /home/*/public_html,参数-R把子目录都一起改了。
应该差不多了,可是还是forbidden,为什么?原来用户主目录/homt/* 是仅允许用户自己读写的,只好改属性让apache能够进去,执行chmod 711 /home/*
这下访问/~user应该能成功了。

Linux单网卡NAT设置

1、首先,确保内核打开ip转发功能。
cat /proc/sys/net/ipv4/ip_forward
结果为1,则表示已经打开。为0则编辑/etc/sysctl.conf文件,将其中的net/ipv4/ip_forward=1前的#号删去。重启使改动生效。也可以直接用类似
echo “1″ > /proc/sys/net/ipv4/ip_forward
的语句来使改动立即生效。

2、添加内网IP

ifconfig eth0:1 192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0

3、添加转发列表

iptables -F
iptables -F -t nat
此两步刷新缓存,大部分情况下可省略。

iptables -P FORWARD DROP
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT –to <外网IP>
<外网IP>请作适当替换。
添加完后用iptables -L应该可以看到添加的一些条目。到此服务端设置完成。

4、客户端设置
IP:192.168.0.xxx
网关:192.168.0.1(上面设的内网IP)
DNS与服务端相同。

Apache与SELinux

SELinux保护Linux系统安全的同时,也给服务配置带来了一些麻烦。开启Apache的虚拟主机以及用户目录功能后,除了主目录/var/www/html外,其他的文档目录一律是403 Forbidden。这就是SELinux的安全策略在作怪了。

解决办法有2种:
1、很简单,关闭SELinux对httpd的保护。进入:系统设置–>安全级别,选择SELinux,修改SELinux关于 HTTPD Service的安全策略(Disable SELinux protection for httpd daemon选项前面打勾)。
2、修改站点所在目录或文件的策略类型。SELinux target policy规定了apache的进程只能访问httpd_sys_content_t类型的目录或文件,因此把站点所在目录的策略类型改为httpd_sys_content_t 就可以了。设置目录的策略类型:# chcon -t httpd_sys_content_t /home/*/public_html,在/home/*/public_html目录下所有新建的子目录将继承他的策略类型。

Linux下一些服务的配置

服务器上装了CentOS5.1,一些服务需要配置,记录下遇到的一些问题。

vsftpd:
本地用户登录时,遇到“500 OOPS: cannot change directory:”错误。原因是SELinux在起作用,需要关掉,执行#/usr/sbin/setsebool -P ftpd_disable_trans 1;
如果要限制本地用户登录后只能在自己的主目录下,则设置chroot_local_user=YES,不过据vsftp的FAQ中说,这会有安全隐患。此时,可以打开chroot_list_enable=YES,并指定用户列表文件chroot_list_file=/etc/vsftpd/chroot_list,在/etc/vsftpd/chroot文件中列出不希望被限制在主目录下的用户名。也可以让chroot_local_user为默认的NO,设置chroot_list_enable=YES以及chroot_list_file,在/etc/vsftpd/chroot文件中列出需要被限制在主目录下的用户名。

mysql:
mysql默认管理员root用户的密码是空密码,用“mysqladmin password  新密码”设一个新密码。

Web服务映射

有两台服务器A和B,只有一个外网IP地址,A绑定的是外网IP地址,并且提供了Web服务,现在希望A和B能同时提供Web服务,不过不要求负载均衡,而且A和B提供的Web内容是不一样的。

这个简单的要求可以用Apache的反向代理来实现,在服务器A的httpd.conf文件中,增加一条虚拟主机配置:
<VirtualHost *>
   ServerName www2.example.com
   ServerAdmin admin@example.com
   ProxyPass / http://B的IP地址/
   ProxyPassReverse / http://B的IP地址/
   ErrorLog logs/www2.example.com-error_log
   CustomLog logs/www2.example.com-access_log common
</VirtualHost>

这样以后对www2.example.com的访问都会映射到服务器B来实现。

Linux下的文件备份和自动开机

现在有两个服务器了,打算把其中一个作为备份服务器。需要备份服务器自动实现如下任务:在每天的某个时刻自动开机,然后执行备份任务,备份完成后再自动关机。

老服务器的BIOS设置里倒是有自动开机时间设置,新服务器的BIOS设置里似乎没找到。不过自动开机可以通过Linux ACPI来控制,具体的还需要进一步研究下,在http://www.mythtv.org/wiki/index.php/ACPI_Wakeup中有关于Linux ACPI自动开机的详细解释。

接下来是备份方案,看了些介绍,有人说http://www.dirvish.org/的方案不错,是基于rsync上的一种方案,每次备份都是累加的,但是可以通过共享目录的方法直接存取每一次的备份。

等有空的时候研究下这些。

Linux下关机后网卡远程唤醒失败

买的服务器到了,装了CentOS5.1。可是用shutdown命令关机后,网卡远程唤醒就不灵。但是如果按电源按钮关机的话,网卡远程唤醒就正常。google了下,也没找到合理的解决方法。只找到几个相关的讨论。

从几个讨论贴中,找到一些线索,用/sbin/ethtool eth0看了下,默认的wol是d禁止。执行/sbin/ethtool -s eth0 wol g后,然后用/sbin/shutdown -h now和/sbin/shutdown -hP now关机后都能用网卡唤醒。不过现在碰到的问题是:重启后,eth0的wol又变回d了。

为了保存ethtool的设置,编辑/etc/sysconfig/network-scripts/ifcfg-eth0网卡配置文件(对应eth0这个网卡)。加入:
ETHTOOL_OPTS=”wol g”
以后每次启动后就会自动将wol设成g了。

另外一种方法是将/sbin/ethtool -s eth0 wol g这条命令加入到rc.local中去,每次在启动时自动执行。