ssh建立反向代理隧道访问内网服务器
[| 2012/07/08 00:02]
今天需要临时展示一个样例站点,上传程序太麻烦,修改起来也不方便,而电信宽带没有公网ip,只能先在电脑上用ssh连接到服务器,在服务器开个端口映射到电脑上。
运行了ssh -Ng -R "*:2222:*:3333" server
发现在服务器端映射端口是成功了,但只是监听在本地。改了半天也不行,百思不得其解。因为之前用过都是成功的。
后来发现某些版本的sshd因为安全性考虑,默认只允许监听在本地。
需要在/etc/ssh/sshd_config里面加一句:
GatewayPorts clientspecified
即可
运行了ssh -Ng -R "*:2222:*:3333" server
发现在服务器端映射端口是成功了,但只是监听在本地。改了半天也不行,百思不得其解。因为之前用过都是成功的。
后来发现某些版本的sshd因为安全性考虑,默认只允许监听在本地。
需要在/etc/ssh/sshd_config里面加一句:
GatewayPorts clientspecified
即可
mysql5.5禁用innodb引擎方法
[| 2012/05/30 13:44]
今天发现有一个备份的mysql数据文件夹异常变大,一查发现是多了三个文件:ibdata1 ib_logfile0 ib_logfile1,前者18m,后两个各5m,原来是迁移的时候从mysql5.0迁移到了5.5,而5.5关闭innodb启动不起来,于是我就开启了innodb,由于innodb会默认增加这几个数据文件和日志文件,导致变大。尝试设置数据文件的大小,结果告诉我最小10m,还是太大,于是探索关闭innodb的方法。
看日志发现说由于mysql程序升级了,需要运行mysql_upgrade升级一下mysql里面的数据库,这个比较简单,和mysql命令用法是一样的,运行一遍就ok了。然后发现还是无法关闭innodb,很奇怪,查了下发现原来mysql5.5默认使用innodb了,所以无法简单的关闭掉,还要设置一下默认使用的引擎为myisam才可以,在my.cnf里加上如下两句:
default-storage-engine=MYISAM
innodb=OFF
重启mysql,然后删掉那三个讨厌的文件即可。
看日志发现说由于mysql程序升级了,需要运行mysql_upgrade升级一下mysql里面的数据库,这个比较简单,和mysql命令用法是一样的,运行一遍就ok了。然后发现还是无法关闭innodb,很奇怪,查了下发现原来mysql5.5默认使用innodb了,所以无法简单的关闭掉,还要设置一下默认使用的引擎为myisam才可以,在my.cnf里加上如下两句:
default-storage-engine=MYISAM
innodb=OFF
重启mysql,然后删掉那三个讨厌的文件即可。
mysql备份backup使用的账号所需权限
[| 2012/05/27 11:05]
现在数据定期备份,使用的命令是mysqldump -uabc -pabc --lock-all-tables --all-databases > db.sql
那么备份用的账号需要哪些权限才能进行这些操作呢?
首先全局select权限是必须的。由于需要锁表,所以lock tables权限也需要,还有一个权限,就是reload,也是必须的,这个比较奇怪,猜测可能是导出的数据库中包含了权限数据库,所以需要该权限来操作。
这三个权限就足够了,再多没有必要并且会对系统安全性产生影响。
那么备份用的账号需要哪些权限才能进行这些操作呢?
首先全局select权限是必须的。由于需要锁表,所以lock tables权限也需要,还有一个权限,就是reload,也是必须的,这个比较奇怪,猜测可能是导出的数据库中包含了权限数据库,所以需要该权限来操作。
这三个权限就足够了,再多没有必要并且会对系统安全性产生影响。
postfix开启默认邮件地址(不存在邮件地址)转发
[| 2012/05/20 16:32]
从sendmail迁移到postfix,由于在服务器上有邮件转发服务,之前对于任意目标邮件地址都转发到固定账户,然后由一个分拣程序根据规则分发。sendmail在/etc/mail/sendmail.mc里添加:define(`LUSER_RELAY',`local:default_account')dnl,然后make -C /etc/mail重新编译一下即可。
对于postfix就复杂很多了,参数有本地alias,virtual alias等等很多概念,刚开始尝试virtual alias,用virtual_alias_maps指定对应的正则文件,同时需调用postmap编译一下正则文件成db。设置了几条正则,发现总是命中第一条,奇怪,后来在正则表达式都加了^和$进一步限定了一下才好,比较奇怪。但后来发现针对用户名做alias不可行,因为向外发出的邮件也会做alias,导致无法发邮件出去。
然后尝试alias_maps和alias_database,这两个参数的区别没看出来,看文档说是都是针对本地邮件的规则,默认都是/etc/aliases文件,但这个文件不支持正则,因为用的是:alias_maps = hash:/etc/aliases,尝试了一下alias_maps = regexp:/etc/postfix/aliases,发现会死循环。也比较恶心。当然,这个aliases文件也需要调用newaliases编译。
最后又回到使用virtual_alias_maps方式,因为找到了一个方法,原来可以对域设置默认值,这样只要在/etc/postfix/virtual设置:@domain.com default_account 就ok了。然后使用virtual_alias_maps = hash:/etc/postfix/virtual,重启postfix即可。
postfix功能强大,配置也复杂不少,文档不是很丰富。配置坑很多,有待研究。
对于postfix就复杂很多了,参数有本地alias,virtual alias等等很多概念,刚开始尝试virtual alias,用virtual_alias_maps指定对应的正则文件,同时需调用postmap编译一下正则文件成db。设置了几条正则,发现总是命中第一条,奇怪,后来在正则表达式都加了^和$进一步限定了一下才好,比较奇怪。但后来发现针对用户名做alias不可行,因为向外发出的邮件也会做alias,导致无法发邮件出去。
然后尝试alias_maps和alias_database,这两个参数的区别没看出来,看文档说是都是针对本地邮件的规则,默认都是/etc/aliases文件,但这个文件不支持正则,因为用的是:alias_maps = hash:/etc/aliases,尝试了一下alias_maps = regexp:/etc/postfix/aliases,发现会死循环。也比较恶心。当然,这个aliases文件也需要调用newaliases编译。
最后又回到使用virtual_alias_maps方式,因为找到了一个方法,原来可以对域设置默认值,这样只要在/etc/postfix/virtual设置:@domain.com default_account 就ok了。然后使用virtual_alias_maps = hash:/etc/postfix/virtual,重启postfix即可。
postfix功能强大,配置也复杂不少,文档不是很丰富。配置坑很多,有待研究。
postfix设置邮件最大允许大小
[| 2012/05/20 16:10]
今天在一台新机器上调用mutt时发现一个问题,报找不到dst@example.com这个文件,而dst@example.com是邮件的目的地址,命令在centos上运行正常,在ubuntu上就不行了,查了下,原因是我用了管道向mutt传送正文,并且用-s指定了标题,目标邮件地址跟在标题后面,导致新版mutt认为目标邮件地址也是一个标题。在地址前加上两个减号就ok了。
echo ‘my comment" | mutt -a file -s SUBJECT -- dst@dst.com
这时还是发现报错,说邮件过大,原来postfix默认邮件大小是10m,而我发送的备份邮件单封是20m,所以需要在/etc/postfix/main.cf中添加配置:message_size_limit = 0 不限制大小。ok了。
echo ‘my comment" | mutt -a file -s SUBJECT -- dst@dst.com
这时还是发现报错,说邮件过大,原来postfix默认邮件大小是10m,而我发送的备份邮件单封是20m,所以需要在/etc/postfix/main.cf中添加配置:message_size_limit = 0 不限制大小。ok了。
bind9不支持rrset-order的fixed模式
[| 2012/05/13 23:44]
本来想用自建dns,设置两条ns记录,其中速度较快的dns服务器排在前面作为主dns,比较慢的放在后面做备份。
结果发现实践中两条记录是随机顺序返回的,查了下需要rrset-order参数来指定方式,有如下三种:
fixed 以它们在域文件中的顺序排序
random 以随机顺序被返回
cyclic 以环顺序被返回
显然对于我的需求是使用fixed模式,结果启用了后提示我默认不开启此模式,查了下原来从bind9开始默认编译不启动这个选项了,除非编译的时候手动加参数打开,而我用apt安装的bind9,所以该选项未开放,即使我这里支持了,上级域的dns也不能设置这个选项,很可能是随机返回结果的,悲剧。看来之前的设想满足不了,dns也要木桶原理了。
结果发现实践中两条记录是随机顺序返回的,查了下需要rrset-order参数来指定方式,有如下三种:
fixed 以它们在域文件中的顺序排序
random 以随机顺序被返回
cyclic 以环顺序被返回
显然对于我的需求是使用fixed模式,结果启用了后提示我默认不开启此模式,查了下原来从bind9开始默认编译不启动这个选项了,除非编译的时候手动加参数打开,而我用apt安装的bind9,所以该选项未开放,即使我这里支持了,上级域的dns也不能设置这个选项,很可能是随机返回结果的,悲剧。看来之前的设想满足不了,dns也要木桶原理了。
将dns服务器bind9进行chroot以提高安全性
[| 2012/05/13 20:27]
今天开始搭dns服务器,主dns采用最快的台湾vps,辅dns暂时先使用老博客服务器。
为了服务器安全性,需要进行一下chroot,避免bind被攻破后整个服务器被黑。
centos自带了bind9的chroot软件包,可以自动将bind进行chroot启动,而debian就差了一点,需要手动搞,所幸debian自己带有官方chroot教程,所以照着做也并不难。
先修改/etc/default/bind9,改成:OPTIONS="-u bind -t /var/bind9/chroot"
然后建立各种chroot的目标目录:mkdir -p /var/bind9/chroot/{etc,dev,var/cache/bind,var/run/bind/run}
为bind9的chroot环境创建两个虚拟设备:空和随机数
mknod /var/bind9/chroot/dev/null c 1 3
mknod /var/bind9/chroot/dev/random c 1 8
chmod 660 /var/bind9/chroot/dev/{null,random}
将bind的默认配置文件移动到目标地址:mv /etc/bind /var/bind9/chroot/etc
为了保持兼容性,仍在原位置为其建立软链: ln -s /var/bind9/chroot/etc/bind /etc/bind
修改一下权限: chown -R bind:bind /etc/bind/*
然后修改一下启动脚本里面pid文件的位置: PIDFILE=/var/bind9/chroot/var/run/named/named.pid
注意,这里需要是在named目录下的named.pid文件,我之前把这个目录设置成bind了,结果发现放不进去,改成named才行,怀疑bind的代码里面写死了。
然后通知rsyslog添加一个监听句柄: echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf
debian默认只装了syslog,而不是增强版的rsyslog,需要安装一下。
然后运行: /etc/init.d/rsyslog restart; /etc/init.d/bind9 start
查看进程和pid文件均存在的话,表示chroot成功了
为了服务器安全性,需要进行一下chroot,避免bind被攻破后整个服务器被黑。
centos自带了bind9的chroot软件包,可以自动将bind进行chroot启动,而debian就差了一点,需要手动搞,所幸debian自己带有官方chroot教程,所以照着做也并不难。
先修改/etc/default/bind9,改成:OPTIONS="-u bind -t /var/bind9/chroot"
然后建立各种chroot的目标目录:mkdir -p /var/bind9/chroot/{etc,dev,var/cache/bind,var/run/bind/run}
为bind9的chroot环境创建两个虚拟设备:空和随机数
mknod /var/bind9/chroot/dev/null c 1 3
mknod /var/bind9/chroot/dev/random c 1 8
chmod 660 /var/bind9/chroot/dev/{null,random}
将bind的默认配置文件移动到目标地址:mv /etc/bind /var/bind9/chroot/etc
为了保持兼容性,仍在原位置为其建立软链: ln -s /var/bind9/chroot/etc/bind /etc/bind
修改一下权限: chown -R bind:bind /etc/bind/*
然后修改一下启动脚本里面pid文件的位置: PIDFILE=/var/bind9/chroot/var/run/named/named.pid
注意,这里需要是在named目录下的named.pid文件,我之前把这个目录设置成bind了,结果发现放不进去,改成named才行,怀疑bind的代码里面写死了。
然后通知rsyslog添加一个监听句柄: echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf
debian默认只装了syslog,而不是增强版的rsyslog,需要安装一下。
然后运行: /etc/init.d/rsyslog restart; /etc/init.d/bind9 start
查看进程和pid文件均存在的话,表示chroot成功了
修改linux的/etc/timezone和/etc/localtime
[| 2012/05/13 15:16]
上周博客正式迁移,所以给服务器配置上了各种备份脚本,最近一周观察发现总是差了8个小时,非常奇怪,因为top看到的结果是没错的,今天深究了一下,看了下cron服务的环境变量:/proc/pid/environ的内容,发现是采用了莫斯科时区,一看/etc/localtime,确实是设置的莫斯科,看来是上周忘了改时区,于是改了下,重启cron进程,发现还是没变,疑惑,看了下cron的重启脚本,发现用了/etc/timezone,这个文件还是莫斯科时区,看来自己用改文件的方法不是特别的靠谱,总是有漏的地方,于是用debian
官方的命令设置了一下:dpkg-reconfigure tzdata 这个命令是文本图形界面,设置了一下,两个文件都更新了,再重启cron,看了下系统变量,发现更新了。看看明天的备份时间是不是恢复正常了。
不过为啥top看的时间时区是对的呢?
官方的命令设置了一下:dpkg-reconfigure tzdata 这个命令是文本图形界面,设置了一下,两个文件都更新了,再重启cron,看了下系统变量,发现更新了。看看明天的备份时间是不是恢复正常了。
不过为啥top看的时间时区是对的呢?
vi/vim设置语法搜索高亮
[| 2012/05/07 23:16]
公司的电脑vi是有搜索高亮的,我自己的几个系统都没有,不过之前用搜索功能不算太多,也就忍了,今天终于决定要也给我的加上配置。
在.vimrc里加上:set hlsearch即可。
如果想单次搜索高亮,则:match Search /word/
还有一个功能:set incsearch,这个是在搜索过程中动态高亮,就是在搜索时,随着单词的输入高亮其被找到的位置,不过作用感觉比较一般。
在.vimrc里加上:set hlsearch即可。
如果想单次搜索高亮,则:match Search /word/
还有一个功能:set incsearch,这个是在搜索过程中动态高亮,就是在搜索时,随着单词的输入高亮其被找到的位置,不过作用感觉比较一般。
debian6安装字体简易方法
[| 2012/05/06 14:05]
今天用了一个debian6的系统,啥字体也没装,用locale -a看时只有C和POSIX,没有en_US.utf8,怎么办呢,很简单,执行:dpkg-reconfigure locales (root权限),然后根据提示选择要装的字体就ok了。