1. Linux发行版本
选择主流的,更新较快的。
从官网获取安装镜像
2. 硬件和物理安全
设置bios密码
设置grub密码
设置系统密码
选择有安全保障的idc机房
3. 系统和用户方面
关闭用不到的服务 (http://www.aminglinux.com/study_v2/chapter16.html#id5)
尽量升级到最新稳定版程序包
设置防火墙规则 (http://www.aminglinux.com/study_v2/chapter16.html#id3)
不需要登录的用户要禁止登录
root远程登录限制 ( http://www.aminglinux.com/bbs/thread-5546-1-1.html and http://www.aminglinux.com/bbs/thread-5545-1-1.html)
打开系统日志记录一切信息
配置合适的sudoer
4. 文件系统安全 (参考 http://www.aminglinux.com/bbs/thread-6917-1-2.html)
使用ext3或者ext4
严格控制目录和文件的权限 umask
尽量少使用suid/sgid权限
重要的数据或配置文件要制定备份计划
5. pam (参考资料 http://www.infoq.com/cn/articles/linux-pam-one)
/etc/pam.conf
/etc/pam.d/
pam类型
auth 用户验证相关 要求用户输入一个口令
account 用户账户管理相关 检查一个用户的账户或者口令是否过期
session 与连接或者会话管理相关 比如将用户登录会话信息记录到日志
password 密码管理
pam 级别
required:表示该行以及所涉及模块的成功是用户通过鉴别的必要条件。换句话说,只有当对应于应用程序的所有带 required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有模块都调用完毕后才将错误消息返回调用他的程序。 反正说白了,就是必须将所有的模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop一样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。
requisite:与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光明正大一些。
sufficient: 表示该行以及所涉及模块验证成功是用户通过鉴别的充分条件。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。
optional: 他表示即便该行所涉及的模块验证失败用户仍能通过认证。
6. 应用安全
各种常用服务 ftp、samba、nfs、rsync、mysql、http
web安全(漏洞:文件上传、xss、sql注入、CSRF、访问控制)
文件上传: 就像discuz论坛的图片上传,如果图片上传服务器时的目录可以执行php脚本,那么这就意味着,用户可以上传木马脚本,然后可以执行
xss:跨站脚本漏洞(Cross Site Scripting,常简写作XSS)是Web应用程序在将数据输出到网页的时候存在问题,导致攻击者可以将构造的恶意数据显示在页面的漏洞。因为跨站脚本攻击都是向网页内容中写入一段恶意的脚本或者HTML代码,故跨站脚本漏洞也被叫做HTML注入漏洞(HTML Injection)。
sql注入:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。PHP + MYSQL编程,引发SQL注入攻击的主要原因有两点:(1) PHP配置文件php.ini中的magic_quotes_gpc选项没有打开,被设置为off。(2) 开发者没有对数据类型进行检查和转义。第二点最为重要,如果没有第二点的保证,magic_quotes_gpc选项不论为on,还是off,都可能引发SQL注入攻击。
CSRF: (Cross-site request forgery,跨站请求伪造)伪造用户的请求利用受信任的网站来做一些用户不知道的事。当用户访问网站通过登录操作会得到身份标识的cookie,在不关闭浏览器并未注销登录的情况下会带着cookie,这种状态下就有可能会让攻击者去伪造请求。因为CSRF不容易被发现,所以用户通常不容易察觉但是其危害性是很明显的。
访问控制:
apache配置:
apache的order allow deny http://www.aminglinux.com/bbs/thread-832-1-1.html
apache限制某个目录下的php文件没有执行权限 http://www.aminglinux.com/bbs/thread-1000-1-1.html
apache 针对访问uri 限制ip http://www.aminglinux.com/bbs/thread-5365-1-1.html
几种限制ip的方法 http://www.aminglinux.com/bbs/thread-6519-1-1.html
nginx配置
限制只让某个ip访问 http://www.aminglinux.com/bbs/thread-450-1-1.html
禁止通过ip访问站点 http://www.aminglinux.com/bbs/thread-38-1-1.html
禁止某个IP或者IP段访问站点的设置方法 http://www.aminglinux.com/bbs/thread-546-1-1.html
使用 user_agent 控制客户端访问 http://www.aminglinux.com/bbs/thread-846-1-1.html
7. 入侵检测
snort (https://www.snort.org/)
snort中文手册: http://www.360doc.com/content/08/0114/14/25127_972488.shtml
从官网获取安装镜像
2. 硬件和物理安全
设置bios密码
设置grub密码
设置系统密码
选择有安全保障的idc机房
3. 系统和用户方面
关闭用不到的服务 (http://www.aminglinux.com/study_v2/chapter16.html#id5)
尽量升级到最新稳定版程序包
设置防火墙规则 (http://www.aminglinux.com/study_v2/chapter16.html#id3)
不需要登录的用户要禁止登录
root远程登录限制 ( http://www.aminglinux.com/bbs/thread-5546-1-1.html and http://www.aminglinux.com/bbs/thread-5545-1-1.html)
打开系统日志记录一切信息
配置合适的sudoer
4. 文件系统安全 (参考 http://www.aminglinux.com/bbs/thread-6917-1-2.html)
使用ext3或者ext4
严格控制目录和文件的权限 umask
尽量少使用suid/sgid权限
重要的数据或配置文件要制定备份计划
5. pam (参考资料 http://www.infoq.com/cn/articles/linux-pam-one)
/etc/pam.conf
/etc/pam.d/
pam类型
auth 用户验证相关 要求用户输入一个口令
account 用户账户管理相关 检查一个用户的账户或者口令是否过期
session 与连接或者会话管理相关 比如将用户登录会话信息记录到日志
password 密码管理
pam 级别
required:表示该行以及所涉及模块的成功是用户通过鉴别的必要条件。换句话说,只有当对应于应用程序的所有带 required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有模块都调用完毕后才将错误消息返回调用他的程序。 反正说白了,就是必须将所有的模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop一样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。
requisite:与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光明正大一些。
sufficient: 表示该行以及所涉及模块验证成功是用户通过鉴别的充分条件。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。
optional: 他表示即便该行所涉及的模块验证失败用户仍能通过认证。
6. 应用安全
各种常用服务 ftp、samba、nfs、rsync、mysql、http
web安全(漏洞:文件上传、xss、sql注入、CSRF、访问控制)
文件上传: 就像discuz论坛的图片上传,如果图片上传服务器时的目录可以执行php脚本,那么这就意味着,用户可以上传木马脚本,然后可以执行
xss:跨站脚本漏洞(Cross Site Scripting,常简写作XSS)是Web应用程序在将数据输出到网页的时候存在问题,导致攻击者可以将构造的恶意数据显示在页面的漏洞。因为跨站脚本攻击都是向网页内容中写入一段恶意的脚本或者HTML代码,故跨站脚本漏洞也被叫做HTML注入漏洞(HTML Injection)。
sql注入:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。PHP + MYSQL编程,引发SQL注入攻击的主要原因有两点:(1) PHP配置文件php.ini中的magic_quotes_gpc选项没有打开,被设置为off。(2) 开发者没有对数据类型进行检查和转义。第二点最为重要,如果没有第二点的保证,magic_quotes_gpc选项不论为on,还是off,都可能引发SQL注入攻击。
CSRF: (Cross-site request forgery,跨站请求伪造)伪造用户的请求利用受信任的网站来做一些用户不知道的事。当用户访问网站通过登录操作会得到身份标识的cookie,在不关闭浏览器并未注销登录的情况下会带着cookie,这种状态下就有可能会让攻击者去伪造请求。因为CSRF不容易被发现,所以用户通常不容易察觉但是其危害性是很明显的。
访问控制:
apache配置:
apache的order allow deny http://www.aminglinux.com/bbs/thread-832-1-1.html
apache限制某个目录下的php文件没有执行权限 http://www.aminglinux.com/bbs/thread-1000-1-1.html
apache 针对访问uri 限制ip http://www.aminglinux.com/bbs/thread-5365-1-1.html
几种限制ip的方法 http://www.aminglinux.com/bbs/thread-6519-1-1.html
nginx配置
限制只让某个ip访问 http://www.aminglinux.com/bbs/thread-450-1-1.html
禁止通过ip访问站点 http://www.aminglinux.com/bbs/thread-38-1-1.html
禁止某个IP或者IP段访问站点的设置方法 http://www.aminglinux.com/bbs/thread-546-1-1.html
使用 user_agent 控制客户端访问 http://www.aminglinux.com/bbs/thread-846-1-1.html
7. 入侵检测
snort (https://www.snort.org/)
snort中文手册: http://www.360doc.com/content/08/0114/14/25127_972488.shtml