Archive

Archive for the ‘Server’ Category

Linux webserver 常用维护命令

March 20th, 2009 No comments

这里是维护时常用的一些命令,放在这里,备忘

注:大部分非原创,只是收集到这里而已

* 实时查看正在执行的sql语句
1./usr/sbin/tcpdump -i eth0 -s 0 -l -w – dst port 3306 | strings | egrep -i ‘SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL’

* 查看http连接
1.netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”\t”,state[key]}’

* 查看SYN状态的http连接
1.netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more

* 查看TIME_WAIT状态的http连接
1.netstat -tna | cut -b 49- |grep TIME_WAIT | sort |more
2.netstat -an | grep TIME_WAIT | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more

* 查看ESTABLISHED状态的http连接
1.netstat -an | grep ESTABLISHED | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more
2.netstat -an | grep “:80″ | grep ESTABLISHED | sort | more

* 批量kill进程
1.ps -efww|grep sqlr-listener|grep -v grep|cut -c 9-15|xargs kill -9

* 查看活动的php-cgi连接数
1.netstat -anpo|grep php-cgi|wc -l

* 按ip查看httpd连接数
1.netstat -anlp | grep 80 | grep tcp | awk {‘print $5′} | awk -F: {‘print $1′}| sort |uniq -c | sort -nr

* 禁IP
1.iptables -A INPUT -s IP地址 -j REJECT
2.iptables -A INPUT -s IP地址/24 -j REJECT
3.route add -net IP地址 netmask 255.255.255.0 reject

* 调试命令
1.strace -p pid

* 跟踪指定的进程pid.
1.gdb -p pid

* 跟踪指定的进程pid.

* 批量查找文件并删除
1.find . -name test.php -exec rm {} \;
2.find . -name test.php | xargs rm -rf

* 更改某一目录下所有目录的权限, 不包括文件, aaa 是目录名
1.find aaa -type d -exec chmod 755 {} \;

* 替换文件内容
1.sed -i ‘s/b/strong/g’ index.html

此命令搜索 index.html 文件中的 b 并将其替换为 strong。

Categories: Linux, Server Tags: , , ,

调整SSHD的启动优先级别

March 20th, 2009 No comments

在实际的服务器使用中,我们经常遇到的一个情况就是服务器无响应,有可能是由于apache或者是mysql等服务过载造成服务器无响应。九王爷就遇到过几次这种情况,好几次说服务器没响应,ssh也上不去,只好请机房的人员帮助重启机器。重启机器后发现log等服务还是在运行的,也就是说服务器不是真的死机了,而是反应不过来,如果当时能ssh上去看看的话就能找到原因了。所以希望能在apache等没反应以后还能ssh上服务器

这就需要将ssh的运行优先级给调高一些,而我又是个懒人,希望能每次重启后自动的就把优先级给调整了。查看sshd_conf里面没有相应的选项,就只好在启动脚本里面打主意了。
查看启动脚本/etc/init.d/sshd ,修改里面的
$SSHD $OPTIONS && success || failure

nice -n -2 $SSHD $OPTIONS && success || failure
使用-2优先级是希望sshd服务的优先级高于apache等的0,但低于log等的-5

sudo /etc/init.d/sshd restart
一下,然后
ps -aeo cmd,pid,nice |grep sshd
看下优先级是不是变成-2了呢?

Categories: Linux, Server Tags: , , ,

[linux服务器][进程管理]用fuser杀掉进程

March 19th, 2009 No comments

转的CU上一条大牛的,转载这里备忘(以前是不转过来的,但是最近发现很多文章所在网站都死掉了,因为没保存,很多好文也没有了)原文地址 http://blog.chinaunix.net/u2/82938/showart_1839189.html
用fuser杀掉进程

一,为什么要使用fuser?
先说 fuser的作用,
fuser能识别出正在对某个文件或端口访问的进程
大家想一下,还有哪个命令具备这个功能?
没错,是lsof,
我们前面讲过, lsof能够找出正在对指定文件访问的进程,
那么它们两者之间有何区别?
fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程

二,如何使用fuser?

1,如何用fuser得到正在使用指定文件的进程?
用法: fuser 文件
说明:它会把正在使用当前文件的进程id列出

[root@localhost lhd]# umount /
umount: /: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost lhd]# fuser /
/: 1rc 2rc 3rc 4rc 5rc 6rc 7rc 80rc 82rc 84rc 85rc 153rc 157rc 158rc
160rc 165rc 168rc 203rc 204rc 205rc 253rc 441rc 444rc 516rc 521rc 524rc 582rc 583rc
584rc 633rc 1052rc 1392rc 1394rc 1417rc 1597rc 1609rc 1617rc 1620rc 1683rc 1744rc 1783r 1785rc
1788rc 1806r 1808r 1810rc 1811rc 1812rc 1813rc 1814rc 1815rc 1848rc 1886rc 1899rc 1900rc 2001rc
……太多不一一列出

说明:
这些进程号后面的rc是什么意思?

c 将此文件作为当前目录使用。
e 将此文件作为程序的可执行对象使用。
r 将此文件作为根目录使用。
s 将此文件作为共享库(或其他可装载对象)使用

2,如何列出进程的详细信息,而不仅仅是进程id?
用 -v参数即可
说明: -v: 含义是:verbose output,详细的输出信息
例子:

[root@dev ~]# fuser /var/log
/var/log: 4196c
[root@dev ~]# fuser -v /var/log

USER PID ACCESS COMMAND
/var/log: root 4196 ..c.. bash

3,如何列出进程所属的用户?
用 -u参数即可
说明: -u: 含义:display user IDs,显示用户id

例子:
[root@dev ~]# fuser -u /var/log
/var/log: 4196c(root)

4,如何杀死所有正在访问指定文件的进程?
用 -k参数即可
说明: -k:含义: kill processes accessing the named file

例子:

[root@localhost lhd]# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3185 f…. tail
[root@localhost lhd]# fuser -k /root/install.log
/root/install.log: 3185
[root@localhost lhd]# fuser -v /root/install.log

说明: -k参数能够杀死所有的正在访问指定文件的进程,所以用来杀进程时非常方便
说明之二: fuser如何杀死的进程?
它发送的是这个信号:SIGKILL

三,多学一点知识

1,fuser可以列出它所知的信号:
用 -l参数即可

例子:
[root@dev ~]# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

2,fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL
例如:只是挂起进程,那么发送HUP信号就可以了

例子:
[root@localhost lhd]# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3347 f…. tail
[root@localhost lhd]# fuser -k -SIGHUP /root/install.log
/root/install.log: 3347
[root@localhost lhd]# fuser -v /root/install.log

Categories: Linux, Server Tags:

服务器备份一例

March 19th, 2009 No comments

这两天服务器无故死机2次,查看log又没有看到有什么异常。只能怀疑是日常的备份让服务器给down掉了。然后今天就将日常备份脚本给删除了,希望这样能看出是不是备份的时候出的问题。

顺便做个全备份。万一是硬件问题也不至于有太大问题。
* 数据库备份时现成的(做了个小脚本,每3天都会自动备份一个),直接下载到本地机器上。
* 网站数据备份,因为看到log比较大,而我又不需要log资源,所以就去掉了log
语句如下:
nohup nice -n 19 tar –exclude var/www/web*/log/* -czvf /home/csbde/backup/webbak20090319.tar.gz /var/www/ > /home/csbde/backup/webbak20090319.log

语句简单解释:
退出终端以后还会继续执行(nohup),设置运行级为最低的19(nice -n 19),这样就不会因为运行这个程序而影响其他程序了。排除目录(–exclude var/www/web*/log/*)注意var前面没有/,好像有/也没关系,会自动帮你去掉。压缩/var/www/(我的网站目录)到webbak20090319.tar.gz,并写入log到webbak20090319.log
* 备份/etc目录

sudo nohup nice -n 19 tar cvzf bak_etc_20090320.tar.gz /etc > bak_etc_20090320.log

* 备份apache设置
sudo nohup nice -n 19 tar cvzf bak_apache_config_20090320.tar.gz /usr/local/apache2/conf > bak_apache_config_20090320.log

小知识点:

优先级范围-20~19,-20为最高优先级,19为最低
显示命令名,进程id即优先级

ps -eo cmd,pid,nice

按优先级N执行程序

nice -n N command

调整已执行程序的优先级

renice [+N/-N] process

或者使用top进行直观的调整(运行top然后按r)

Categories: Server Tags: , ,

proftpd+mysql用户认证+quota磁盘限额

March 14th, 2008 No comments

proftpd+mysql用户认证+quota磁盘限额  整理编辑:mars (mars_diy@21cn.com) 网上关于proftpd的安装文章实在是不少,我只是稍微整理了一下,并且使用了新的 quota磁盘限额模块 由于proftpd最新版1.2.8目前还是RC版,加上有些设置不能通用, 所以在这里还是使用1.2.7版 

Read more…

Categories: Server Tags:

proftpd + mysql 安装参考资料

March 14th, 2008 No comments

proftpd + mysql 安装流水笔记

一。准备工做
1。你的机器上已调试好了apache+php+mysql环境
2。下载PROFTPD
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10rc3.tar.bz2
因为发现1.2.10直接支持sql和quota
二。安装
tar -jxvf proftpd-1.2.10rc3.tar.bz2
cd proftpd*
./configure –prefix=/usr/local/proftpd \
–with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \
–with-includes=/usr/local/mysql/include/mysql \
–with-libraries=/usr/local/mysql/lib/mysql
make
make install
修改proftpd配置
vim /usr/local/proftpd/etc/proftpd.conf
内容改为:
ServerName “mail2004.3322.org”
ServerType standalone
DefaultServer on
# 用户登陆时不显示ftp服务器版本信息
ServerIdent off
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
MaxLoginAttempts 3
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600
MaxClients 100
# 设置每台主机最多并发连接数
MaxClientsPerHost 3
AllowOverwrite no
AllowStoreRestart on
UseReverseDNS off
# 设置如果shell为空时允许用户登录
RequireValidShell off
# 将用户限制在自己的主目录下
DefaultRoot ~
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30
# Set the user and group under which the server will run.
User nobody
Group nobody
# Normally, we want files to be overwriteable.
<Directory />
AllowOverwrite on
</Directory>
# A basic anonymous configuration, no upload directories.
# 匿名登录设置。匿名用户目录为/ftp
<Anonymous /ftp>
User ftp
Group ftp
# We want clients to be able to login with “anonymous” as well as “ftp”
# UserAlias anonymous ftp    停了它
# Limit the maximum number of anonymous logins
MaxClients 10
# We want ‘welcome.msg’ displayed at login, and ‘.message’ displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message

# Limit WRITE everywhere in the anonymous chroot
#<Limit WRITE>
# DenyAll
#</Limit>
</Anonymous>
以上是PROFTPD.conf

下面加入sql和quota
# 数据库联接的信息,proftpdb是数据库名,localhost是主机名,proftpd是连接数据库的用户名,
#proftpdb是密码
#(如果没有密码留空)
SQLConnectInfo proftpdb@localhost proftp proftpdb  
# 数据库认证的类型
SQLAuthTypes Backend Plaintext
# 数据库的鉴别
SQLAuthenticate users* groups*
# 指定用来做用户认证的表的有关信息。
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# 如果home目录不存在,则系统会根据它的home项新建一个目录
SQLHomedirOnDemand on
这是目录所有者,我觉得这个很重要。所以我用nobody来做,在此我的nobody为99.
SQLDefaultGID        99
SQLDefaultUID        99

SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE “count=count+1,accessed=now() WHERE userid=’%u’” ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE “modified=now() WHERE userid=’%u’” ftpuser

# 启用磁盘限额
QuotaDirectoryTally on
# 磁盘限额单位 b”|”Kb”|”Mb”|”Gb”
QuotaDisplayUnits “Kb”
QuotaEngine on
# 磁盘限额日志记录
QuotaLog “/var/log/quota.log”
# 打开磁盘限额信息,当登陆FTP帐户后,使用命令 “quote SITE QUOTA” 后可显示当前用#户的磁盘限额
QuotaShowQuotas on
以下为sql语句:
SQLNamedQuery get-quota-limit SELECT “name, quota_type, per_session, limit_type, bytes_in_avail,bytes_out_ava
il, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = ‘%{0
}’AND quota_type = ‘%{1}’”

SQLNamedQuery get-quota-tally SELECT “name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files
_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = ‘%{0}’ AND quota_type = ‘%{1}’”
SQLNamedQuery update-quota-tally UPDATE “bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = ‘%{6}’ AND quota_type = ‘%{7}’” ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT “%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}” ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

下面可以用phpmyadmin在mysql里加入,我的sql为以下
CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default ”,
`gid` smallint(6) NOT NULL default ’99′,
`members` varchar(16) NOT NULL default ”,
KEY `groupname` (`groupname`)
) TYPE=MyISAM COMMENT=’ProFTP group table’;

INSERT INTO `ftpgroup` VALUES (‘nobody’, 99, ‘nobody’);

CREATE TABLE `ftpquotalimits` (
`name` varchar(30) default NULL,
`quota_type` enum(‘user’,'group’,'class’,'all’) NOT NULL default ‘user’,
`per_session` enum(‘false’,'true’) NOT NULL default ‘false’,
`limit_type` enum(‘soft’,'hard’) NOT NULL default ‘soft’,
`bytes_in_avail` float NOT NULL default ’0′,
`bytes_out_avail` float NOT NULL default ’0′,
`bytes_xfer_avail` float NOT NULL default ’0′,
`files_in_avail` int(10) unsigned NOT NULL default ’0′,
`files_out_avail` int(10) unsigned NOT NULL default ’0′,
`files_xfer_avail` int(10) unsigned NOT NULL default ’0′
) TYPE=MyISAM;

CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default ”,
`quota_type` enum(‘user’,'group’,'class’,'all’) NOT NULL default ‘user’,
`bytes_in_used` float NOT NULL default ’0′,
`bytes_out_used` float NOT NULL default ’0′,
`bytes_xfer_used` float NOT NULL default ’0′,
`files_in_used` int(10) unsigned NOT NULL default ’0′,
`files_out_used` int(10) unsigned NOT NULL default ’0′,
`files_xfer_used` int(10) unsigned NOT NULL default ’0′
) TYPE=MyISAM;

CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default ”,
`passwd` varchar(32) NOT NULL default ”,
`uid` smallint(6) NOT NULL default ’99′,
`gid` smallint(6) NOT NULL default ’99′,
`homedir` varchar(255) NOT NULL default ”,
`shell` varchar(16) NOT NULL default ‘/sbin/nologin’,
`count` int(11) NOT NULL default ’0′,
`accessed` datetime NOT NULL default ’0000-00-00 00:00:00′,
`modified` datetime NOT NULL default ’0000-00-00 00:00:00′,
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT=’ProFTP user table’ ;

启动proftpd
/usr/local/proftpd/sbin/proftpd start
在数据数中的ftpuser中加入用户,密码他路径就可以了。
以上只是一个流水笔记

Blogged with the Flock Browser
Categories: Server Tags:

修改MYSQL最大连接数

February 15th, 2008 No comments

MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个

方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 查找 max_connections=100 修改为 max_connections=1000 服务里重起MYSQL即可

如果在linux下面,就编辑/etc/my.cnf

找到[mysqld]一段,加入如下一行:
set-variable=max_connections=1500

注意:该参数必须加入[mysqld]配置段内,加入别的地方无效。

方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword

设置新的最大连接数为200:mysql> set GLOBAL max_connections=200

显示当前运行的Query:mysql> show processlist

显示当前状态:mysql> show status

退出客户端:mysql> exit

查看当前最大连接数:mysqladmin -uusername -ppassword variables

注:方法二是临时的,重启就又是100的连接数了

方法三:修改启动文件

mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够

  的,可以把它适当调大,

  whereis safe_mysqld

  找到safe_mysqld的位置,然后编辑它,找到mysqld启动的那两行,在后面加上参数

  -O max_connections=1000

  例如

  — safe_mysqld.orig Mon Sep 25 09:34:01 2000

  +++ safe_mysqld Sun Sep 24 16:56:46 2000

  @@ -109,10 +109,10 @@

  if test “$#” -eq 0

  then

  nohup $ledir/mysqld –basedir=$MY_BASEDIR_VERSION –datadir=$DATADIR /

  - –skip-locking >> $err_log 2>&1

  + –skip-locking -O max_connections=1000 >> $err_log 2>&1

  else

  nohup $ledir/mysqld –basedir=$MY_BASEDIR_VERSION –datadir=$DATADIR /

  - –skip-locking “$@” >> $err_log 2>&1

  + –skip-locking “$@” -O max_connections=1000 >> $err_log 2>&1

  fi

  if test ! -f $pid_file # This is removed if normal shutdown

  then

  然后关闭mysql重启它,用

  /mysqladmin所在路径/mysqladmin -uroot -p variables

  输入root数据库账号的密码后可看到

    max_connections   1000  

注:方法三未进行测试,为直接转的,并且我觉得应该是mysqld_safe文件。不知道是不是我的是5.0版本的原因

Categories: Server Tags:

extmail安装错误小结

February 5th, 2008 No comments


错误
Can’t locate Ext/CGI.pm
解决办法
cd /var/www/extsuite/extman/libs/Ext
./buildlink.sh clean
./buildlink.sh build /var/www/extsuite/extmail/libs/Ext

新问题出现
Can’t locate Ext.pm in @INC (@INC contains: /var/www/extsuite/extman/libs
查看发现Ext.pm没有做好链接,可能是位置错误
# cp /var/www/extsuite/extmail/libs/Ext.pm /var/www/extsuite/extmail/libs/Ext/

再出现新问题那肯定是跟我一样由于版本不正确造成的,重新下载修改版本为合适版本就OK了

Categories: mail server Tags:

postfix配置过程

February 4th, 2008 No comments


一、配置postfix
1、建立配置文件
#postconf -n > /etc/postfix/main2.cf
#mv /etc/postfix/main.cf /etc/postfix/main.cf.old
#mv /etc/postfix/main2.cf /etc/postfix/main.cf2、再编辑main.cf:#vim /etc/postfix/main.cf添加以下内容
########################################
# hostname
#mynetworks = 127.0.0.1
myhostname = mail.kkio.com
mydestination = $mynetworks $myhostname# banner
mail_name = Postfix - by KKIO.COM
smtpd_banner = $myhostname ESMTP $mail_name# response immediately
smtpd_error_sleep_time = 0s
unknown_local_recipient_reject_code = 450# extmail config here
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = maildrop:
######################################################

3、编辑mysql_virtual_alias_maps.cf

#vim /etc/postfix/mysql_virtual_alias_maps.cf

添加以下内容

###########################
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = alias
select_field = goto
where_field = address
#############################

4、编辑mysql_virtual_domains_maps.cf
#vim /etc/postfix/mysql_virtual_domains_maps.cf

内容如下:

user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx =’0′ and active =’1′

5、编辑mysql_virtual_mailbox_maps.cf
#vim /etc/postfix/mysql_virtual_mailbox_maps.cf

内容如下:

user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = ’1′

二、配置Courier-Authlib
安装Courier-Authlib

1、运行如下命令安装相关软件包

#rpm -ivh RPMS/libtool-libs-1.5.6-4.EL4.1.c4.3.i386.rpm
//返回错误信息
//warning: RPMS/libtool-libs-1.5.6-4.EL4.1.c4.3.i386.rpm: Header V3 DSA signature: NOKEY, key ID 443e1821
//Preparing… ########################################### [100%]
// file /usr/lib/libltdl.so.3 from install of libtool-libs-1.5.6-4.EL4.1.c4.3 conflicts with file from package libtool-ltdl-1.5.22-6.1

#rpm -ivh RPMS/courier-authlib-0.57-1hzq.i386.rpm
#rpm -ivh RPMS/courier-authlib-devel-0.57-1hzq.i386.rpm
#rpm -ivh RPMS/courier-authlib-mysql-0.57-1hzq.i386.rpm

2、编辑/etc/authlib/authmysqlrc文件,并将其内容清空,然后增加如下内容:

MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_SELECT_CLAUSE SELECT username,password,”",uidnumber,gidnumber,\
CONCAT(‘/home/domains/’,homedir), \
CONCAT(‘/home/domains/’,maildir), \
quota, \
name \
FROM mailbox \
WHERE username = ‘$(local_part)@$(domain)’

3、存盘退出后启动courier-authlib:
#/etc/init.d/courier-authlib start

如一切正常,命令行将返回如下信息:
Starting Courier authentication services: authdaemond

4、修改authdaemon socket目录权限

如果该目录权限不正确修改,maildrop及postfix等将无法正确获取用户的信息及密码认证:
chmod 755 /var/spool/authdaemon/

5、配置使用maildrop

编辑main.cf,增加:
virtual_transport = maildrop:
maildrop_destination_recipient_limit = 1

其次编辑master.cf,找到定义maildrop的那行,原来默认的内容:
maildrop unix – n n – - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}

改为:
maildrop unix – n n – - pipe
flags=DRhu user=vuser argv=maildrop -w 90 -d ${recipient}

增加投递用户

很多邮件系统文档都使用postfix这个用户(一般是uid=125)作为邮件存储,在使用
系统的virtual等投递时不存在问题,如果是改为maildrop则postfix会报错。不允许
通过pipe来以user=postfix来投递。

因此从长远角度考虑(参见1),专门开一个帐户来保存邮件比较好。这里:

groupadd -r -g 1000 vgroup
useradd -u 1000 -d /home/domains -s /bin/true -g vgroup vuser

这样就增加了一个uid=1000, gid=1000的用户vuser,组属于vgroup的。

以后如果要使用suexec也不会因为uid太低而造成问题了!

保存好所有修改,重新启动postfix

Categories: Linux, mail server Tags:

关于suexec的FAQ

February 4th, 2008 No comments

今天安装postfix和extmail的时候发现不能正常运行CGI,赶紧检查log,发现是suexec出现错误了,我就说前几天的论坛附件怎么会出问题,赶紧查找原因,看suexec的log发现是user mismatch,上网一查原因,原来是配置APACHE的时候就出错了,好像只有重新编译了,又练手了

apache编译支持suexec功能

./configure –enable-suexec –with-suexec-logfile=/www/logs/suexec.log –with-suexec-uidmin=500 –with-suexec-gidmin=100 –with-suexec-caller=daemon –with-suexec-docroot=/www

关于suexec的FAQ
1.出现以下错误 command not in docroot
编译的时候加入–with-suexec-docroot 以后虚拟主机运行suexec的目录必须包含指定的目录里,通过suexec -V 可以察看docroot目录是哪儿

2.出现以下错误 user mismatch (daemon instead of www)
编译的时候加入–with-suexec-caller=daemon 默认是www,但一般apache的运行用户是nobody或者daemon,这里我们是httpd2.2.2,用户是daemon,所以指定这个参数,否则suexec不能被运行。

3.出现以下错误 cannot run as forbidden uid (1001/index.cgi)
在虚拟主机配置SuexecUserGroup时,指定的用户和组,必须高于–with-suexec-uidmin –with-suexec-gidmin 指定的用户uid和gid,否则被限制使用。

Categories: Server Tags: , ,