Jackey's 感悟

Do Research

记录:Virtual Box下实现 主机与虚拟机互相访问的 简单方法,NAT+Host Only

From Evernote:

记录:Virtual Box下实现主机与虚拟机互相访问的简单方法,NAT+Host Only

virtu box上安装了一个linux服务器,1)希望这个linux服务器能够对本主机(物理机,例如是windows)提供网络服务,例如ssh、mysqld、web等,2)同时该linux服务器又要求能够访问外界网站进行软件更新。

目前发现的最简单方式,是通过NAT设置一个网卡实现功能2,同时用host only方式设置第二块网卡实现功能1.

设置的截图如下:

linux服务器内不需要做任何设置。

什么是快乐的人生/(英)罗素著;李国山等译;张晶选编

From Evernote:

什么是快乐的人生/(英)罗素著;李国山等译;张晶选编

什么是快乐的人生/(英)罗素著;李国山等译;张晶选编 武汉:长江文艺出版社,2009. 11
(思想者随笔)
ISBN 978-7-5354-3972-7

Chapter 1. 快乐的生活

人们所需要都不是自我克制,而是那种向外的兴趣,后者能产生自发的、不经雕琢的行为,而相同的行为,在一个过分专注于追求自身德性的人那儿,唯有依靠有意识的自我克制才能做到。

所有的不幸福基于某种分裂或不谐调:意识和无意识之间缺少协作和配合,因而造成了自我的分裂。自我和社会的连结要靠客观兴趣和情爱的力量,因而造成了自我的分裂。自我和社会的连结要靠客观兴趣和情爱的力量,由于没有这种力量,又造成了自我和社会的不和谐。一个幸福的人决不会遭受这两种分离的痛苦,他的人格既不会分裂来对抗自己,也不会分裂来抵御世界。

这样的人将会觉得自己是宇宙的公民,尽情地享受着世界所给予的五光十色的舒畅快乐,不会因为想到死亡而心神不宁、痛苦万分,因为,他感到自己不会真的与后来者分离。惟有在这种与生命之流如此深刻的、本能的结合中,人们才能找到无与伦比的欢乐。

Chapter 2. 美好的人生

我的观点是:美好的人生是为爱所唤起,并为知识所引导的。

爱和知识都是没有止境的。因此,无论一种人生如何美好,总还能想象出更美好的人生。有爱而没有知识,或有知识而没有爱,都不能产生美好的人生。在中世纪,当村里出现瘟疫时,教士便劝人们聚集在教堂里祈祷解救;结果在一群拥挤的祈祷者中,传染发展得极为迅速。这是有爱而没有知识的例子。最近这场世界大战便是有知识而没有爱的例子,结果是大规模的死亡。

爱和知识都是需要的,但爱在某种意义上更为必要,因为它能指引明智之士去寻求知识,以明了如何为他们所爱的人谋取幸福。然而,如果人们没有知识,他们将满足于相信道听途说,而且可能存心为善却适得其反。医学或许能提供我所说的最好的例证。对于病人,一个能干的医生要比最忠实的朋友更为有用,对于民众的健康,医学知识的进步要比慈善事业更有贡献。

Chapter 3. 你可以获得快乐。

工作的乐趣对每一个具备特殊技能的人都是敞开的,只要他能在运用其技能的过程中得到满足,而并不要求获得满堂的喝彩。

工作时是可能遇到困难的,这时候是否一定能够感受到快乐?这因人而异,但是一些业余爱好是能够帮助缓解,甚至帮助解决工作中的难题的。不过,一时的狂热和业余的爱好,在多数——或许绝大多数——情况下不是根本幸福之源,它们只不过提供了一种逃避现实,暂时忘却难以面对的痛苦的手段。比起其他一切来,根本的幸福更有赖于对人和物的友善关怀。

Chapter 4. 快乐的世界

这一章是我现在不愿意理解的内容,在其中罗素以及其乐观的观点讨论了未来什么样的社会制度是好的,包括教育、劳动与报酬、分配问题、政治体制、科学等。和谐社会的和谐公民不愿(最后变成无能,哈哈)去思考这些问题。

最后一个敌人,那就是你自己

最近一直都在忙着毕业论文的事情,选题很有意义,但是在自己圈定的小圈子中,
还有一些硬骨头一直没能克服。
话说回来,这论文与实际的工程实践是有很大差别的,同样的问题可以通过不同的
思路和角度去尝试解决,在论文研究中
不同方法很难有非常直接或细致的比较,所以方法之间的优劣要说清楚,真的是非
常难,也不太实际,因为不同方法肯定有
其不同的适用范围,难以简单地进行比较。这也给论文的撰写带来了更大的灵活
性,只要能说得通,不作假,论文是可以成的。

话再说回来,最终论文做成什么样子,作者自己是知道,我现在即纠结在自身能力
与问题深度之间,就像游戏中的低级别人物却想去
攻打终极boss。中学的一位语文老师和我们说过这样的话:取法之上,得乎其中。
在整个的论文撰写过程,或者说自我思索过程中,除了思索论文以 为,也在
剖析自身,逐步认识到自身的不足,以及在感受、猜测科学或者行业发展中自身的
差距,所幸的是逐渐能够不气馁。有多大食量,就食多少饭。顺便说一 句,
近几年一直在控制自身习惯,坚持每餐只吃八成饱,身体和精神都好多了,也许在
科学研究或者说工作上,也应该给自己留点余地。

虽然自身的食量是很难增长,当然我也不想增长,对于吃,我希望是保持能量平衡
最好,但是科学研究的思想我是可以逐渐深邃,研究的方法是可以逐渐熟 练,
研究的经验是可以不断积累,最终研究的成果是可以做出点什么的,最后如果还是
与期望有差距,只能归结于运气或者自身的思路、方法的不对。研究,不 能一口吃成
个胖子,现在的毕业论文把基本问题解决就好了,在总结部分不是还有下一步工作
展望吗?哈哈。

以上,是折磨我大半年的心病,我是自己在给自己下套啊。虽然现在的工作不是很
好,但是后面的路还长着,水一点就水一点,让我知耻而后勇吧。今晚跑 了1个小
时长跑,做了50个俯卧撑,
全身衣服都湿透,就当是和过去告别吧。气馁、自卑、堕落、没有恒心,我要和你
们说再见。

FWNPM SSL Errors

Source: http://thomashunter.name/blog/npm-ssl-errors/

> At my day job, we sit behind a firewall which can break SSL certificates. If you attempt to install something with NPM and get the error message npm ERR! Error: SSL Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE, it means you are in a similar situation. To fix this, simply run npm config set strict-ssl false and the issue will go away. Keep in mind that this makes your NPM installation less secure, and that you should re-enable strict-ssl whenever you are outside of the firewall.

武汉印象

“她就像烤红薯,看起来有点脏兮兮的感觉,但她剥开来有诱人的香味,吃一点会暖到心里。武汉,一个离开了又开始想念的城市…”

Datasets from the standard db like UCI, are there any ones can be used for context-aware tests?

将文件夹下所有的形如*authoryear*的论文重命名为year-*authoryear*格式

论文多了,需要有良好的分类和目录结构,才有利于在知识上挖掘出更新的知识。

一直以来都是使用[author][year]这种方式命名论文文件,这个的好处是同一作者、同一 领域的论文能够 自动地按照author进行展示,不足的是要对整个领域的某一子领域进行分析不是非常方便,因此需要有方便的 文献管理工具,这里推荐jabref,因为使用它,你不必担负盗版的名声,同时,它也非常好用。

在文献管理工具中可以通过自动的排序(例如jabref中能够按照author、year的方式排序),也可以自己调整排序方式,很是 方便。按道理,有了文献管理工具,就不需要在文件夹中去翻来覆去地挑拣文献了,但是为了好看,我突然觉得[year]-[author] [year]的方式非常有趣。那么我们可以在jabref中的bibkey设置为[author][year]模式, 而在文件夹中设置成[year]-[author][year]模式,这可以在文献管理工具和论文写作上,同时在文件夹浏 览中取得 比较好的视觉效果折衷。

那么问题就是如何将上万个文件重命名,这肯定不能用F2+typing去做,会死人的,至少脑子会笨死的。 于是coding如下,最优先使用的当然是脚本语言了。于是最常用的shell脚本出炉一个(仍有一些bug存在)。

#! /bin/bash 
# rename files 
#  see gist https://gist.github.com/3188132
# TODO 
# 1. filename with more than one year number 
# a file name with more than one year number, like 
# Chen2000-tech-Guanling-Chen-TR2000-381, the shell doesn't # know how to deal with it, as the result of grep "-Po" returned 
# with two number "2000\n" and "2000" 
# 
# 2. filename with spaces 
# 3. same filename conflict

for filename in `find . -type f -and -name "*.nh" -or -name "*.kdh" -or -name "*.pdf" -or -name "*.ps" -or -name "*.ppt"` do
    echo "filename is $filename" 
    if [ -f "$filename" ]
    then
           dname=`dirname "$filename"` 
fname=`basename "$filename"` 
year=`echo "$fname" | grep -Po "^(19|20)\d{2}"` 
if [ $year ] 
then echo "begin with year number, ignored" continue fi year=`echo "$fname" | grep -Po "(19|20)\d{2}"` if [ $year ] then newname="$dname"/$year-"$fname" echo "new name is $newname" mv "$filename" "$newname" fi fi done

cygwin中直接打开windows文件或文件夹的方式

在cygwin中提供了cygstart工具和命令,可以方便地调用windows下默认的操作模式 打开一个文件或文件夹。

cygstart – start a program or open a file or URL

例如,我喜欢使用在windows下使用bash终端,那么cygwin是一种不错的选择; 另外,我希望在终端中进行操作的时候,能够用gvim来编辑文件,例如markdown文件。

那么,如果我在windows的markdown文件默认打开方式指定为gvim,那么对于一个markdown文件, 我仅需如此,即可直接用gvim打开。

cygstart xxx.md

这里假设xxx.md是要打开的markdown文件。

我觉得这是一种兼顾效率和喜好的良好方法。当然,最好的方式还是直接用一个合适的Linux发行版本。 而我现在缺乏时间去调教出一个适合自己的Linux发行版本,那么这种cygwin的方式还是不错。

BTW,cygwin称cyg*等一系列命令和工具为cygutils,这真是太方便。

zzSELinux 入门

SELinux 入门

2011-05-31 黑日白月 Posted in Featured, Security, TutorialsRSS

几乎可以肯定每个人都听说过 SELinux (更准确的说,尝试关闭过),甚至某些过往的经验让您对 SELinux 产生了偏见。不过随着日益增长的 0-day 安全漏洞,或许现在是时候去了解下这个在 Linux 内核中已经有8年历史的强制性访问控制系统(MAC)了。

SELinux 与强制访问控制系统

SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)

强制访问控制系统的用途在于增强系统抵御 0-Day 攻击(利用尚未公开的漏洞实现的攻击行为)的能力。所以它不是网络防火墙或 ACL 的替代品,在用途上也不重复

举例来说,系统上的 Apache 被发现存在一个漏洞,使得某远程用户可以访问系统上的敏感文件(比如 /etc/passwd 来获得系统已存在用户),而修复该安全漏洞的 Apache 更新补丁尚未释出。此时 SELinux 可以起到弥补该漏洞的缓和方案。因为 /etc/passwd 不具有 Apache 的访问标签,所以 Apache 对于 /etc/passwd 的访问会被 SELinux 阻止。

相比其他强制性访问控制系统,SELinux 有如下优势:

  • 控制策略是可查询而非程序不可见的。
  • 可以热更改策略而无需重启或者停止服务。
  • 可以从进程初始化、继承和程序执行三个方面通过策略进行控制。
  • 控制范围覆盖文件系统、目录、文件、文件启动描述符、端口、消息接口和网络接口

那么 SELinux 对于系统性能有什么样的影响呢?根据 Phoronix 在 2009 年使用 Fedora 11 所做的横向比较来看,开启 SELinux 仅在少数情况下导致系统性能约 5% 的降低

SELinux 是不是会十分影响一般桌面应用及程序开发呢?原先是,因为 SELinux 的策略主要针对服务器环境。但随着 SELinux 8年来的广泛应用,目前 SELinux 策略在一般桌面及程序开发环境下依然可以同时满足安全性及便利性的要求。 以刚刚发布的 Fedora 15 为例,笔者在搭建完整的娱乐(包含多款第三方原生 Linux 游戏及 Wine 游戏)及开发环境(Android SDK + Eclipse)过程中,只有 Wine 程序的首次运行时受到 SELinux 默认策略的阻拦,在图形化的“SELinux 故障排除程序”帮助下,点击一下按钮就解决了。

了解和配置 SELinux

1. 获取当前 SELinux 运行状态

getenforce

可能返回结果有三种:EnforcingPermissiveDisabled。Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止可疑行为,Enforcing 代表记录警告且阻止可疑行为。

目前常见发行版中,RHEL 和 Fedora 默认设置为 Enforcing,其余的如 openSUSE 等为 Permissive。

2. 改变 SELinux 运行状态

setenforce [ Enforcing | Permissive | 1 | 0 ]

该命令可以立刻改变 SELinux 运行状态,在 Enforcing 和 Permissive 之间切换,结果保持至关机。一个典型的用途是看看到底是不是 SELinux 导致某个服务或者程序无法运行。若是在 setenforce 0 之后服务或者程序依然无法运行,那么就可以肯定不是 SELinux 导致的。

若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件 /etc/sysconfig/selinux 实现。注意当从 Disabled 切换到 Permissive 或者 Enforcing 模式后需要重启计算机并为整个文件系统重新创建安全标签(touch /.autorelabel && reboot)。

3. SELinux 运行策略

配置文件 /etc/sysconfig/selinux 还包含了 SELinux 运行策略的信息,通过改变变量 SELINUXTYPE 的值实现,该值有两种可能:targeted 代表仅针对预制的几种网络服务和访问请求使用 SELinux 保护,strict 代表所有网络服务和访问请求都要经过 SELinux。

RHEL 和 Fedora 默认设置为 targeted,包含了对几乎所有常见网络服务的 SELinux 策略配置,已经默认安装并且可以无需修改直接使用。

若是想自己编辑 SELinux 策略,也提供了命令行下的策略编辑器 seedit 以及 Eclipse 下的编辑插件 eclipse-slide

4. coreutils 工具的 SELinux 模式

常见的属于 coreutils 的工具如 psls 等等,可以通过增加 Z 选项的方式获知 SELinux 方面的信息。

ps auxZ | grep lldpad

system_u:system_r:initrc_t:s0 root 1000 8.9 0.0 3040 668 ? Ss 21:01 6:08 /usr/sbin/lldpad -d

ls -Z /usr/lib/xulrunner-2/libmozjs.so

-rwxr-xr-x. root root system_u:object_r:lib_t:s0 /usr/lib/xulrunner-2/libmozjs.so

以此类推,Z 选项可以应用在几乎全部 coreutils 工具里。

Apache SELinux 配置实例

1. 让 Apache 可以访问位于非默认目录下的网站文件

首先,用 semanage fcontext -l | grep '/var/www' 获知默认 /var/www 目录的 SELinux 上下文:

/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

从中可以看到 Apache 只能访问包含 httpd_sys_content_t 标签的文件。

假设希望 Apache 使用 /srv/www 作为网站文件目录,那么就需要给这个目录下的文件增加 httpd_sys_content_t 标签,分两步实现。

首先为 /srv/www 这个目录下的文件添加默认标签类型:semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?' 然后用新的标签类型标注已有文件:restorecon -Rv /srv/www 之后 Apache 就可以使用该目录下的文件构建网站了。

其中 restorecon 在 SELinux 管理中很常见,起到恢复文件默认标签的作用。比如当从用户主目录下将某个文件复制到 Apache 网站目录下时,Apache 默认是无法访问,因为用户主目录的下的文件标签是 user_home_t。此时就需要 restorecon 将其恢复为可被 Apache 访问的 httpd_sys_content_t 类型:

restorecon reset /srv/www/foo.com/html/file.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0

2. 让 Apache 侦听非标准端口

默认情况下 Apache 只侦听 80 和 443 两个端口,若是直接指定其侦听 888 端口的话,会在 service httpd restart 的时候报错:

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:888

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:888

no listening sockets available, shutting down

Unable to open logs

这个时候,若是在桌面环境下 SELinux 故障排除工具应该已经弹出来报错了。若是在终端下,可以通过查看 /var/log/messages 日志然后用 sealert -l 加编号的方式查看,或者直接使用 sealert -b 浏览。无论哪种方式,内容和以下会比较类似:

SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 888.

***** Plugin bind_ports (92.2 confidence) suggests *************************

If you want to allow /usr/sbin/httpd to bind to network port 888

Then you need to modify the port type.

Do

# semanage port -a -t PORT_TYPE -p tcp 888

`where PORT_TYPE is one of the following: ntop_port_t, http_cache_port_t, http_port_t.`

***** Plugin catchall_boolean (7.83 confidence) suggests *******************

If you want to allow system to run with NIS

Then you must tell SELinux about this by enabling the 'allow_ypbind' boolean.

Do

setsebool -P allow_ypbind 1

***** Plugin catchall (1.41 confidence) suggests ***************************

If you believe that httpd should be allowed name_bind access on the port 888 tcp_socket by default.

Then you should report this as a bug.

You can generate a local policy module to allow this access.

Do

allow this access for now by executing:

# grep httpd /var/log/audit/audit.log | audit2allow -M mypol

# semodule -i mypol.pp

可以看出 SELinux 根据三种不同情况分别给出了对应的解决方法。在这里,第一种情况是我们想要的,于是按照其建议输入:

semanage port -a -t http_port_t -p tcp 888

之后再次启动 Apache 服务就不会有问题了。

这里又可以见到 semanage 这个 SELinux 管理配置工具。它第一个选项代表要更改的类型,然后紧跟所要进行操作。详细内容参考 Man 手册

3. 允许 Apache 访问创建私人网站

若是希望用户可以通过在 ~/public_html/ 放置文件的方式创建自己的个人网站的话,那么需要在 Apache 策略中允许该操作执行。使用:

setsebool httpd_enable_homedirs 1

setsebool 是用来切换由布尔值控制的 SELinux 策略的,当前布尔值策略的状态可以通过 getsebool 来获知。

默认情况下 setsebool 的设置只保留到下一次重启之前,若是想永久生效的话,需要添加 -P 参数,比如:

setsebool -P httpd_enable_homedirs 1

总结

希望通过这一个简短的教程,扫除您对 SELinux 的误解甚至恐惧,个人感觉它并不比 iptables 策略复杂。如果希望您的服务器能有效抵挡 0-day 攻击时,那么 SELinux 或许就是一个值得考虑的缓和方案。

致谢

本文大量参考自 Vincent Danen 发表在 TechRepublic 上的 SELinux 系列教程123。在此向 Vincent Danen 致敬。

Read More:

Tags: selinux

天时地利人和与互联网企业

《孟子·公孙丑下》:“天时不如地利,地利不如人和。”《孙膑兵法·月战》:“天时、地利、人和,三者不得,虽胜有殃。”

现在搞公司,特别是互联网公司,要想能做大,真的是很难,因为群雄几成垄断,你创业初期唯有出其不意掩其不备,快速站住一角,然后牢牢守 住并且不断扩大阵地。
而一开始,要想不被那些大公司吃掉(这几乎是不可能的,所以很多小公司做出名了,就会赶紧卖掉,因为资本运作上跟不上大公司),大公司非 常容易后起直上。
如果是在武汉要搞互联网公司,而不是简单地圈点钱,那么只能是出奇兵,做的行业要么是新奇无人做(这几乎不可能,即使有,只要有利可图, 大公司也会用收购打压等方式搞死你),要么是一个行业别人做不了。
而对于后者,只能是地利和天时的把握,比如说,在武汉,你是地头蛇,你方便做,而别的外来大公司不方便做。
在武汉应该是可以搞点事情,但还是得奇兵,并且利用好当地的优势。在互联网,特别是电商、社交网站上,几乎是不可能做出成绩了,人和已经 被淘宝、人人、腾讯给瓜分干净。

最终是资本和点子的结合运转,关键还是资本。

一次讨论会后的感想。