I am LAZY bones?
AN ancient AND boring SITE

分类: '经验技巧' 的归档

在ubuntu下架设rsync和ftp服务

还是因为我的那个ubuntu源,之前只能以http方式访问,看到很多源也同时提供ftp和rsync的访问方式,我也就学着架设了一个。

先说说ftp方式,这个比较简单,参照官方源,我用的也是vsftpd。这个在ubuntu下几乎是不用配置就可以跑了。大致就是:

这样就完全可以了,如果你还想修改一下人家登录的时候的欢迎信息的话,编辑 /etc/vsftpd.conf ,将里面的 ftpd_banner= 解除注释,并将你要的信息填在后面。
其实这个配置文件还有很多其他选项可以修改,诸如是否允许匿名登录、写权限之类的,需要的话,自己 man vsftpd.conf 好了。

再说说rsync的服务端配置,我发现网上的那些中文教程用在ubuntu下都是会有问题的。
在ubuntu下,这个rsync的服务端和客户端似乎是一个东西,也就是没有rsyncd这个包了,所以也就不需要安装额外的包了,只需简单配置一下,并启动就可以了。
参照 man rsyncd.conf 的提示
建立一个 /etc/rsyncd.conf 文件,内容如下:

其中 motd file 应该是可选的,如果写上了,就需要再建立一个 /etc/rsyncd.motd 的文本,写入欢迎信息,有空的话,还可以搞个帅帅的ASCII art哦。
上面的两行是全局的配置,下面中括号里的是模块名,以下的配置都是模块级的。可以同时指定多个模块。
配置好了以后,执行

rsync应该就启动了,另外可以在 sysv-rc-conf 里确保启动的时候就开启了rsync服务。

现在也可以通过以下方式访问SRT ubuntu mirror了:
rsync://ubuntu.srt.cn/ubuntu
ftp://ubuntu.srt.cn/ubuntu/

linux真的很安全么?

写这篇文章是因为看到了cnbeta上最近接二连三地出现类似这篇的文章。
虽然我还是认为此文的作者多少还是有点标题党,因为那个 ./a 其实可以是任何东西,这样就说是“一个命令”也太无聊了点。但是我在公司的RHEL4的服务器上试验了之后,确实可以非法提升权限。不免有点担忧。
于是我顺藤摸瓜,在那个提供hack代码的网站上不费吹灰之力,就找到了3个能非法提升root权限的程序,而且这几个程序是一周内公布的,所以相信真要找的话,还能找到很多,何况还有人家未公布的呢?
不过大家也不用太担心,这些程序都有个共同点,见到的最厉害也只能危及2.6.27的内核,而现在的内核都是 2.6.30/31 的时代了。
但是,我公司的2.6.9-55.ELsmp内核的EHRL4服务器就遭殃了,3个程序都中招了,这就说明了保持更新的重要性。一般这种服务器更新都会比较谨慎,有时候甚至无人去管理更新的事情,而且大多都是开着ssh的,这样的linux其实一点都不安全,我就见过一台服务器,老出这样那样的怪问题,最后我去看的时候,大部分/bin和/usr/bin下的常用可执行文件都已经被修改过了,文件的时间也都是一样的,而且正是这个时间开始才反常的。究其原因,正是因为这台公网IP的机器开着SSH,而且root密码还是无敌的“123456”。。。这样,即使那机器本身没有什么重要的文件,一旦被攻陷,损失和麻烦还是不少的,更何况局域网的其他机器也会受到牵连。
在这里,有必要给大家几点建议,做到以下几点linux才能真正安全一些

  • 提高安全意识,不要认为装了linux就可以高枕无忧了,安不安全其实还得靠人。我觉得这点正是最重要的。
  • 如果非得开ssh,一定要装上denyhosts(不知道为什么这个也要墙掉,无语了),denyhosts可以帮你有效地避免被ssh暴力破解。
  • 最好像ubuntu默认的一样,禁用root账号,不然的话,至少禁止root直接ssh登录,因为人家在不知道你用户名的情况下,一般的都是用root来暴力破解的
  • 不要使用弱密码,这点似乎总有人会犯错。。。
  • 始终保持更新,可以避免上面说到的情况。
  • 谨慎执行来历不明的二进制文件,尤其是需要sudo的。开源的才是最安全的。
  • 不要贪图方便,时不时大面积地 chmod -R +x xxxx ,尤其不能 chmod -R 777 xxxx

先这么多了,有其他再补充。。。

gentoo也可以提示未安装的命令

用ubuntu的时候,如果你在命令行里输入一个未安装的命令,bash会给出很人性化的提示,让你先安装xxx软件包,比如:

其实gentoo下也是可以做类似提示的.
gentoo早就已经默认是 bash 4.x 了,这个版本的bash,在找不到命令的时候,会试着调用 command_not_found_handle 这个函数,也就是说,只要你在什么地方定义了这个函数,就可以实现人性化的提示.再联想到之前我整的e-file,一切都是这么简单,哈哈~
在 ~/.bashrc 里加上如下几行:

当然,这之前肯定要先安装e-file,如果你已经加了gentoo-china的overlay,可以直接 emerge e-file
最终效果贴个图(我是gnome,没装kdevelop):
command_not_found_handle效果图

关于分区和引导也许你不知道的杂七杂八

1.用gparted把一个110G的ext3分区,缩小到78G(实际使用的空间只有20G左右),需要用2个多小时.可能和已使用的空间无关?空白区域也复制了一遍?
2.用gparted把ext3分区缩小以后,其uuid是不会变的.
3.备份主引导扇区的方法:

注意:这512字节的东西里,不仅备份了MBR(前446字节)也备份了分区表,所以如果你备份完了以后,又改变过分区,再用老的512字节来恢复的话,后果可能比较严重.
4.所以,恢复MBR(比如重装过windows的时候要用到)的方法是:

这里的ba=应该是446字节,而不应该是512字节,除非你确认和备份的时候的分区完全一致.
5.但是用如上命令恢复完了以后,分区激活标志(也就是gparted里面看到的boot标志),是不会变的(因为这属于分区信息,是位于446~512字节的),所以也许grub菜单还出不来,需要用gparted重设一下标志位.如果第4步中的bs=改成512应该不会有此麻烦,当然如果你理解了上面的文字,就会明白我还是推荐用446的.
6.grub2的配置文件是 /boot/grub/grub.cfg (相当于grub时代的menu.lst),这个文件是 /usr/sbin/update-grub 根据 /etc/grub.d 里面的脚本自动生成的,所以不推荐直接修改 /boot/grub/grub.cfg ,而是修改 /etc/grub.d 里的相应文件,要禁用某个文件,只需要 chmod -x nn-xxx 就可以了.改完后执行 update-grub 即可看到grub.cfg被更新了.
以上东西是bones7456根据实际操作经验总结得出的,水平有限,并不能保证正确性和适用性,而且还有比较危险的dd命令.因此操作时请务必小心,万一丢失数据可别来找我,哇卡卡…

访问Vbox的guest系统的方法

相信很多linuxer都用过Vbox,拿来虚拟个win或者其他的系统,很方便,用着感觉也很不错,只是今天我遇到了一点点麻烦.
我想在host里访问guest的80端口,比如在guest里跑了个apache之类的.
我的host的IP是192.168.6.239,一看guest的IP是10.0.2.15,vbox里设置的连接方式是NAT,在guest里上局域网和公网都正常,但是在host里却ping不通guest的IP…也就是host和guest的通信是单向的…
后来查了下资料,才明白原因,要实现双向通信,需要在host里虚拟一个网络设备(也就是虚拟网卡),然后通过桥接的方式将host的虚拟网卡和guest的网卡相连,就像以前用的vmware的bridge模式一样,默认就给你生成几个虚拟网卡,但是vbox却不是这样做的,它需要自己添加.具体操作方法可以参见这里这里.
步骤还是比较繁琐的,所以我用的就不是这个办法,而是另一个比较快捷的办法,当然快方法也有坏处,就是只能访问guest的一个端口,刚好,我只需要它的80端口.
步骤:用文本编辑器打开 ~/.VirtualBox/Machines/机器名/机器名.xml
然后在ExtraData那节下面添加以下三行:

这3行,相当于吧guest的某个端口映射到了host的端口. 其中 guestweb 可以替换成想要的名字.第二行的value数字,就是guest的端口号,第三行的value数字就是host的端口号.
这样启动guest以后,就可以访问 http://localhost:50000 了,哈哈.
以上方法在Vbox 2.1.4 版本试验通过.

========090409 21:00 更新========
好吧,我承认我火星了一回,其实只要 modprobe vboxnetflt 以后,再在网络连接里选 host interface,就相当于vmware的桥接了.
这样guest就能得到和host一样的IP段,并且host也可以直接访问guest.
但其实这方法也是有缺陷的,比如我之前用的是host的eth0,把guest休眠了以后,到了家里,host改用wlan0了,结果guest就没有网络连接了….
哈哈,所以我那方法还是有一定的用处的.到底用哪种,就自己决定吧~

一个命令把几千张照片压缩了

数码相机拍的照片,已经积累了很多个G了,于是就都备份到光盘里保存了,但是怎么处理硬盘上的数据呢?rm之觉得可惜,毕竟光盘没有那么方便,不能随时查看,但是放着又太大太浪费硬盘空间了,现在的相机一张都有3~4M的.我能想到的最好的办法,就是把每张照片压缩以后,把小图片留在硬盘上,这样即可以快速查看,又不是很浪费硬盘空间,于是有了这个命令:
注意此命令会删除当前目录及子目录下的所有jpg文件,最好是理解以后,再执行

把当前目录及子目录下的所有 xx.jpg 压缩成横竖分辨率都为原尺寸的30%的 xx_.jpg 文件.对于我的相机来说,压缩后的大约800*600的大小对于屏幕浏览来说已经足够了,而每张300K左右的尺寸也很经济.
没有convert命令的同学需要检查是否装了 imagemagick 包.
PS:真庆幸自己没在用windows了,如果是win下,估计又得上网找所谓的”绿色版图像批处理软件”了,问题是:即使找到了,能完全合我的心意吗?称心了,要找注册码吗?找到注册码了,确定不含木马病毒吗…Orz

推荐:vim使用进阶

既然在linux下混,我觉得emacs和vim里,至少得会一样.
因为我比较懒,emacs这类神的编辑器,是不太会用了,所以只能用编辑器的神──vim了.
但是一直以来,自己的vim水平还是仅限于会hjkli之类的水平,所以我自己也快看不下去了.
刚好在这个时候,发现了这篇好教程:Easwy写的vim使用进阶.
只看了前面几章,就深知这是个能造福大家的好教程.内容翔实而不肤浅,描述细致而不累赘.相信看完之后,定能让读者举一反三,进化为vim老鸟~所以,在此推荐给大家.同时感谢一下Easwy的辛勤劳动.

wget的-e选项

wget可谓居家旅行,杀人越货的必备之物了~其体积小巧,功能强大.所以,同时,其选项也比较繁多,man也是长长的,但是却有写个小技巧没写出来.
man里有这样的描述:

Wget can follow links in HTML and XHTML pages and create local versions of remote web sites, fully recreating the directory structure of the original site. This is sometimes referred to as “recursive downloading.” While doing that, Wget respects the Robot Exclusion Standard (/robots.txt). Wget can be instructed to convert the links in downloaded HTML files to the local files for offline viewing.

于是乎,如果你想mirror一整个站点,但是人家的 /robots.txt 却是:

User-agent: *
Disallow: /

你就要开始郁闷了,呵呵.
而且,我翻遍了man也找不到解决办法的,总不能为这点事去hack源码吧…
其实有这么个选项:

-e command
–execute command
Execute command as if it were a part of .wgetrc. A command thus invoked will be executed after the commands in .wgetrc, thus taking precedence over them. If you need to specify more than one wgetrc command, use multiple instances of -e.

用这个,就可以忽略 robots.txt 哦,具体是 -erobots=off 嘿嘿.

修改gnome-terminal的title的办法和杂七杂八的ANSI控制码记录

折腾这个的原因是:有时候gnome-terminal的窗口开多了,就容易忘记哪个是哪个了,尤其是用脚本登录到多个不同服务器以后,就经常会混淆,把原本想在这个服务器上执行的命令输到那个服务器的窗口里面去了。这样有可能会造成非常严重的后果。
当然也有手工的解决办法,就是登录一个服务器就在 终端 – 设置标题 那里设置一下,就可以固定住了,但是这样每开一个tab都设置一下的办法确实很麻烦,所以我想修改脚本来实现把参数设置成标题。
想到平时emerge的时候,tab的标题是会变的,所以翻出portage的源码找,也找着了,把py的翻译成了bash的也很容易,简单的说,就是下面这一句:

在执行的3秒钟里,就可以看到title已经变成了test了。不过3秒一过,马上又变回PS1的样子了(具体是什么和 编辑-配置文件首选项-标题和命令 里面的设置有关)。写到sssh脚本里面也一样,在登录的瞬间是可以看到自定义的标题的,但是登录成功以后,又变成了远程机器的PS1的样子。
看了一下gnome-terminal的代码,似乎在不修改gnome-terminal的情况下是搞不定了,呵呵,得搞个接口修改gnome-terminal的内部数据?

另外,记一下不完全的ANSI控制码吧,上面这个改标题的,也是用了其中的一个:

\e[0m 关闭所有属性
\e[1m 设置高亮度
\e[2m 变暗
\e[4m 下划线
\e[5m 闪烁
\e[7m 反显
\e[8m 消隐
\e[9m 删除线
\e[30m ~ [37m 设置前景色(颜色值见下面说明)
\e[40m ~ [47m 设置背景色(颜色值见下面说明)
\e[nA 光标上移n行
\e[nB 光标下移n行
\e[nC 光标右移n行
\e[nD 光标左移n行
\e[y;xH 设置光标位置
\e[2J 清屏
\e[K 清除从光标到行尾的内容
\e[s 保存光标位置
\e[u 恢复光标位置
\e[?25l 隐藏光标
\e[?25h 显示光标

颜色代码:
  0 - 黑色     4 - 蓝色
  1 - 红色     5 - 粉红色
  2 - 绿色     6 - 青色
  3 - 黄色     7 - 白色

部分属性可以叠加进行设置,中间用“;”隔开,例如设置绿色前景、红色背景并高亮显示可以这样写: \e[01;32;41m

目前还没有找到所有代码的含义要查看全部的代码,请参考Emca-048标准。以上引用部分内容自出处一出处二

搞定黑莓的通讯录

新买手机的朋友,都知道有时候转移通讯录是件挺麻烦的事情,这不,我就遇到了。
不过幸好,我的老手机支持把通讯录都复制到SIM卡,而且我的联系人也不算多,刚好基本把SIM卡的150人塞满。而且黑莓也支持从SIM卡批量导入数据。
这样,转移似乎是很快就完成了,但是完事以后一看,这个黑莓的联系人排序确实是乱得可以,不知道为什么基本上是无序状态。
后来网上一看,还真有不少朋友也遇到了这样的问题,当然也有朋友给出了解决方案,就是在没个名字前加上名字的拼音首字母。具体做法呢就是先用PC端的名为“桌面管理器”的软件,先把通讯录导出成OUTLOOK的格式,然后转成txt文本,再用人家的一个excel文件,导入之后套用一个公式,就加上首字母了,然后再导成txt,到OUTLOOK,再导回黑莓。
这样问题虽算解决了,但整个一套,不仅麻烦,而且很windows,我总不能为了这个,而去下载整套MS office吧。。。
好好研究了一下那桌面管理器以后,发现,其实它是支持通讯录到txt文件的直接导入导出的,于是乎,就看到希望了,现在只要在txt文件里面加上没个人的首字母信息就可以了。
那个文本文件是这样的形式:没个联系人一行,字段之间用逗号割开,字段分别是:”First Name”,”Middle Name”,”Last Name”,”Title”,”Company Name”,”Work Phone”,”Work Phone2″….
而从SIM卡导入后,整个姓名都在 First Name 一栏,Last Name 空着,于是我就用了下面这段awk脚本,把每个人的 Last Name 填上了

这个只是完成了到51windows查询拼音首字母的功能,另外那些诸如编码转换和换行符转换之类的事情,还得加几条命令。
完成了以后,导入会黑莓,联系人就又都乖乖地排好了,哈哈。