12306 网站究竟是有多傻逼?

在标题里面就说粗话实在不是个好行为,但是12306这个傻逼网站确实让我火大。

不是人尽皆知的实际买票的问题,而是我从来就没有弄明白过设计网站的那些傻逼怎么会觉得自己弄个证书会比花点小钱去买个证书,这样所有人都不用去手动安装证书,而且浏览器也不会屏蔽你要好?还有个问题就是这个傻逼网站的密码策略,我要送给做这个网站的人“操你妈逼”这四个字,一个像“=UE(Ksr+%GK5”这样的随机密码,你跟我提示“密码强度太弱,必须包含字母,数字,下划线中的两种或两种以上!

究竟是要怎样的傻逼才可以设计出这样的网站?!

SB

SELinux 相关链接

今年的主要成果就算是对SELinux的一点研究了,没搞到内核源代码的级别去,不过至少对它的使用、配置、troubleshooting以及策略编写是熟悉了。

FAQ里面算是总结的一些对SELinux使用常见的一些问题了,后面还有些实用链接,不过真的要学习SELinux的话,光这些是远远不够的。

1.  FAQ

1.1. 是否应该开启SELinux

Q: 系统安装完之后,SELinux 默认是开启的,但是它导致了我部署的非常多的应用无法正常运行,所以我把它关闭了。但是现在又有很多人提倡不要关闭SELinux,甚至还专门为此建立了一个网站——http://stopdisablingselinux.com/ ,请问关闭SELinux 真的会使得系统不安全吗?我到底是该关闭它还是不关闭呢?

A:

简短版:

如果您对是否应该开启SELinux 有点犹豫,那么您应该关闭它。

详细版:

关闭SELinux 并不一定是等于降低系统安全,系统的安全最重要的是取决于运行在上面的程序本身,SELinux 只是一个防护机制,它也并不能从根本上消除程序里面的bug。相反,如果用户并不熟悉使用SELinux 的话,他会在使用过程中遇到许多有SELinux 导致的“未知原因”故障,在不知情的时候,用户往往会采取其它的比如:关闭防火墙,关闭程序自身的保护措施来排查问题,这反而是导致了其它安全防护措施的去除,并且也严重影响了这些用户对系统的正常使用。

许多人提倡保留开启SELinux 的原因是现在的发行版自带策略已经可以使得用户基本无法感受到SELinux 的存在,但这并不是绝对的,在运行httpd,ftpd,samba 等服务的时候还是很容易遇到被SELinux 策略阻止而导致的访问拒绝。而发行版自带的策略包里面还会有bug,导致一些难以排查的错误。用户如果要学习SELinux 也并不容易,SELinux 非常复杂。

所以,如果您运行的系统上面没有关键的应用或者数据,或者没有足够的排查、解决SELinux 问题的能力以及比较多的耐心和时间来学习SELinux 的话,建议从实际出发,把它关掉。

1.2. 开启和配置SELinux

Q: 怎样开启和配置SELinux

A建议首先将/etc/selinux/config 文件中的配置修改为Permissive 模式后重启,在Permissive 模式下所有的AVC 访问拒绝都会被记录,但并不会真的拒绝。重启系统后,请您使用aureport -a 命令查看在启动过程中有哪些AVC产生,直到将所有的AVC都消除后,再将配置由Permissive 模式改为Enforcing 。

1.3. 设置SELinux为Enforcing模式后系统无法启动

Q: 我将它设置为Enforcing 模式重启后,系统都起不来了!连单用户模式都无法进入,只能再用光盘进行修复了吗?

A: 不需要。在grub 的kernel 行加上selinux=0 的参数即可禁用SELinux 进入系统。

1.4. 如何正确修改文件安全上下文

Q: 我的网站文件放在/web 目录下,但是SELinux 导致网站无法正常运行起来,我把/web目录的context 改成了httpd_sys_content_t 等类型后可以正常运行网站了,但是重启系统后就又变回原来的default_t 了,有什么办法可以使对/web 路径的context 修改永久生效吗?

A: 这种情况下正确的做法是手动为您使用的非系统默认路径创建默认context 规则,使用semanage fcontext 命令:

semanage fcontext -a -t httpd_sys_content_t “/web(/.*)?”

然后执行

restorecon -Rv /web

应用对/web 目录添加的策略规则。

1.5. 能否只针对某一个服务关闭SELinux

Q: 既然系统默认的targeted 策略是针对各个服务而编写的,那么我可以只针对Apache httpd 服务或者vsftpd 关闭SELinux 吗?

A: 可以。永久关闭httpd 策略:

setsebool -P httpd_disable_trans on

另外还有,永久关闭vsftpd 策略:

setsebool -P ftpd_disable_trans on

提示:使用getsebool -a | grep disable_trans 命令可以找到其它更多的关闭某一项服务策略的布尔值。

1.6. 确认某一个路径的文件context 规则

Q: 如何确认某一个路径的文件context 规则?

A: 简单检查某个路径的安全上下文可以使用matchpathcon命令,比如:

matchpathcon /var/www

但是matchpathcon并不能查看是哪一条规则决定了/var/www 路径的安全上下文,这需要semanage fcontext -l命令查看。

1.7. 遇到AVC 的时候怎么办

Q: 遇到AVC 的时候怎么办?

A: 如果您确实需要保持SELinux 开启的话,请采用以下步骤解决AVC:

1、首先应该使用getsebool -a命令查看是否有某个布尔值决定了您程序的访问被拒绝;

2、留意您的文件是否被贴上了正确的安全上下文

3、如果以上都不符合。使用audit2allow 工具创建新的模块,并且加载

1.8. 域和类型的区别是什么

Q: 域和类型的区别是什么?

A: 域和类型之间没有区别,虽然有时候域是用于指代进程的类型。域的这种用法是出于域-类型强制模型(DTE),这个模型里面的域和类型是分离的。

2.  参考资料

目前SELinux的使用还并不是非常的广泛,因此能找的相关配置和原理等文档也比较少。这些是我目前所找到的一些很有用的资料,但不是全部。

http://danwalsh.livejournal.com/

一个资深红帽SELinux专家的博客,里面有非常多的实用信息。

SELinux from the inside out

Google 安全人员对SELinux 的一些引导研究,稍微涉及到了内核代码

http://selinuxproject.org/page/Main_Page

SELinux项目的官方wiki

http://www.crypt.gen.nz/selinux/faq.html

https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/

Fedora SELinux FAQ