I am LAZY bones?
AN ancient AND boring SITE

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

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查询拼音首字母的功能,另外那些诸如编码转换和换行符转换之类的事情,还得加几条命令。
完成了以后,导入会黑莓,联系人就又都乖乖地排好了,哈哈。

笔记本显示器屏保和电源管理完美解决方案

本文要实现的目标: 完美控制笔记本LCD的屏保和黑屏,具体地说是实现

1. 平时键鼠10分钟无动作,将LCD转入屏保;15分钟无动作,将LCD彻底断电
2. mplayer看电影的时候,持续不屏保不断电.
3. 按下 ctrl+alt+L 的时候,立即锁住屏幕并将LCD断电.

适用人群: linux用户(废话,我没条件测试BSD和其他*nux),gnome用户,compiz用户,用命令行启动mplayer的用户.当然如果不全符合,部分内容也是可以参考的,比如双击电影文件打开mplayer的用户,可以自己修改文件的打开方式;非compiz用户可以用其他方式绑定命令等.

步骤:

1. 在 /etc/X11/xorg.conf 文件的 Section “ServerLayout” 一节里,加上一行 Option “OffTime” “180” 数值也可以更大些,避免X的影响.
2. 在 ~/bin 下建立一个名为 mplayer 的可执行shell脚本,并把 ~/bin 加入$PATH,位置要在 /usr/bin 前面,不然就自己换名字吧.
脚本内容如下:

3. 系统 – 首选项 – 键盘快捷键 里面取消”锁住屏幕”的键盘绑定.
4. 打开ccsm,在 General Options – Commands 里面,添加一个 ctrl+alt+l 键的绑定,命令如下:

5. 系统 – 首选项 – 屏幕保护程序,将主题选为”黑屏”(当然看个人爱好,我觉得花CPU去绘制屏保,是种浪费,就选黑屏了).
6. 系统 – 首选项 – 电源管理,设置成15分钟后将显示器转入睡眠.
7. 完成了,哈哈~

一些解释和废话:
此方案里用到了 gnome-screensaver 的控制程序 gnome-screensaver-command ,我觉得很不错,不知道 xscreensaver 和 kscreensaver 是不是也有相应的命令,有的话KDE用户也可以用此方案了.
控制电源,用到了 xset ,没有安装的朋友请自行搞定安装.
mplayer的1.0rc2版本,号称有可以停掉 xscreensaver 甚至 gnome-screensaver 的选项,但根据我的试验,都无效,可能是因为的是SVN版本的mplayer的关系吧.所以不得不自己写个脚本搞定,脚本用于替换 mplayer ,如果你喜欢也可以简写成 mp 之类的.
另外,LCD用户需要注意一下了,其实由于LCD并没有电子束轰击荧光粉,所以适用于CRT的屏幕保护程序对LCD其实是很不适合的,根本起不到保护液晶单元和背光灯管的作用.何况,linux下好看的3D屏保,其实都蛮耗CPU的,如今都流行创建集约型社会了,都提倡节能减排了,所以,离开电脑的最佳选择是用黑屏屏保锁住屏幕+显示器断电.当然,也推荐CRT用户这么干.