存档

文章标签 ‘Linux’

Linux主机安全

2011年5月12日 没有评论

Linux主机安全

如果服务器都在防火墙的保护下,主机这个层面的安全可以做的不那么苛刻。但是本着一切靠自己的原则,在主机这个层面把安全方面的工作先做充分了,反正这也是有百利而无一害的。

基本原则

  1. 及时更新服务软件包,以防止最新威胁
  2. 尽可能使用安全的协议
  3. 严格监控所有的服务器以便及时发现问题
  4. 关注最新安全信息

帐号安全

  • 每个需要登录的用户一个独立的普通帐号;每个服务使用单独的帐号(没有设置密码、没有合法的shell,不能登录)
  • 如果实在需要ftp服务,ftp的用户使用虚拟帐号
  • 禁止除了root、系统维护人员帐号之外其他所有系统帐号使用shell的权限
  • 锁定临时不用的帐号
  • 系统管理员离职要及时修改超级密码
  • 普通用户离职要及时删除其帐号

口令安全

因为我们都是public_key认证,所以这块儿基本上就是超级用户的口令安全。

  1. 定时重新生成超级用户口令(用密码生成器生成,综合数字、大小写字母以及特殊字符的组合,10字符以上)
  2. 定时重新生成普通用户密钥对

系统参数、属性安全设置

1,TMOUT:设置这个环境变量以防用户忘记退出登录,例如:

export TMOUT=3600

当需要保持session的时候,请用命令screen新建一个screen来实现。

2,更改shell的历史的格式
修改文件/etc/profile,设置HISTTIMEFORMAT为'<%F %T>’

远程登录安全

禁止root直接登录

修改文件/etc/ssh/sshd_config,设置:PermitRootLogin: no

sshd绑定私网网卡

修改文件/etc/ssh/sshd_config,设置:ListenAddress为私网网卡地址

public_key认证用户

不用任何修改,缺省就是支持的。

启动服务安全

在缺省启动里去除不需要的服务

Linux(不管是哪个发行版)启动都会缺省起好些服务,其中有很大一部分都不是 必须要起的,这样既浪费资源,又影响安全(尤其是开tcp端口的服务),于是不管怎样,都要把不需要的服务从缺省启动里干掉。方法主要是:使用 ntsysv命令,把不是必须要起的服务都取消勾选,然后再重启机器(如果允许的话,否则用命令service xxx stop一个一个的停服务)

启动服务最小化

  • 尽量禁止ftp服务,取而代之的是sftp或winscp,或者rz和sz这样利用xmodem的程序
  • mysql如果仅本机用,推荐skip-networking,用unix socks来连(这样性能还更好),否则,也只能听在私网网卡上,绝对不要开在公网上
  • 使用开源的代码的web服务,尽量不要在公网上提供服务(比如phpmyadmin,比如本站用的dokiwiki)
  • 只有对最终用户服务的应用,才能开服务端口于公网上。最理想的情况是在公网网卡上最多只开一个tcp80端口(管理口、数据口都是开在私网上的)

web应用安全

mod_security

基于国外基本上所有的虚拟主机提供商都会启用一种第三方的apache模块儿:mod_security,而且国内业界对其也很推崇,有人说,国内大 多的web防火墙都是基于这个(mod_security)改的。既然评价这么高,我曾想过在公司的web server上推这个东东的,但是结果是:缺省的策略非常不好用,很多开源的应用基本上都跑不了,所以……,还需要好好研究下mod_security, 定制一套适合我们的策略之后,才能在我们的web server上推广使用。

php的安全模式

相对mod_security的缺省设置的不好用,php的安全模式应该还是温和很多的,在忠波同学的强力推荐下,我觉得这个东西还是值得一推的。关 键是要在开发阶段就在开发服务器上把这个(php的安全模式)打开,最后才能在上线的时候在线上服务器上打开(php的安全模式)

日志安全

本地保留日志,同时日志还同步汇总到日志服务器。

kernel及tcp/ip安全

net.ipv4.ip_forward = 0    /* 可忽略,因为缺省就是0 */
net.ipv4.tcp_syncookies = 1    /* 防syn flood攻击 */
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.vs.timeout_timewait = 60

这部分内容可以直接写入/etc/sysctl.conf文件中。

系统自我检测

  • 每台机器安装tripwire来保持系统完整性
  • 每台机器定时使用tiger之类的本地检测工具自检

iptable策略

  • 接受从lo界面上进来的数据包
  • 接受从私网网卡(一般是eth1)上进来且源地址是私网地址的数据包(这里可以配置的更严厉一些)
  • 接受从公网网卡(一般是eth0)上进来且源地址不是私网地址且目标端口是22、80等端口的数据包
  • 接受状态是关联的或已建立连接的数据包
  • 其他包都drop掉

网络安全

刨除系统层面的安全,网络安全也是非常重要的。

内外网分离

只有内外网彻底分离了,才能保证内网上流动的敏感信息的安全。

入侵监测系统(ids)的搭建

机房网络上会部署入侵检测系统(ids),用来检测网络安全问题。

分类: Open Source 标签: ,

一个rpm命令hang住了的问题

2011年1月17日 没有评论

系统是Centos 5.4
这个也算是Rhel5.4的山寨吧
发现突然不管敲入某个参数的rpm命令都会到一定时候就没反应(hang掉,挂住)
strace命令跟了一下
发现hang在了这里:

open(“/var/lib/rpm/Packages”, O_RDONLY) = 3
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=35233792, …}) = 0
futex(0x2ba116b5bad4, FUTEX_WAIT, 1, NULL

于是用rpm -vv –verifydb这个隐含的参数来修,不行
也会hang在上面所示的地方
rpm –rebuilddb来搞,还是不行,问题同上

最后
rm -rf /var/lib/rpm/__db.00?
(删除之前请先做备份)
然后再rpm –rebuilddb
终于搞定了。

分类: tips, TroubleShooting 标签: , , ,

ifconfig输出中的计数器的清零

2010年12月4日 没有评论

  Linux下ifconfig -aifconfig eth0之类的输出中,有好些计数器,如:RX packetsRX bytesTX packetsTX byteserrorsdropped等等。ifconfig的manual里貌似没有提到这些计数器怎么清零,翻了翻google,发现答案,在如下几种情况下,ifconfig输出的计数器会被清零:
  1,计数器达到上限。计数器是一个unsigned interger,所以32位机器的上限是2^32;64位机器的上限是2^64
  2,机器重启的时候,这种情况其实跟后面要讲到的情况的一种类似。
  3,如果网卡驱动不是build in进kernel的,那么可以通过重新reload网卡驱动的方式来清零。像这样:

modprobe -r e1000; modprobe e1000

假设这里的网卡驱动是e1000,如果此时网卡设备的状态还是down的话,还需要ifup eth0ifup eth1把网卡起一下。

分类: tips, TroubleShooting 标签: , , , ,

原来debian缺省的runlevel是2

2010年9月21日 没有评论

呵呵
说实话
这还是刚注意到
我很意外
原来redhat系列的default runlevel貌似都是3
而且
redhat系列的linux好像对runlevel有个很细的说明
0、1和6就不用说了
好像对于2、3、4、5的runlevel都有说法
貌似5是图形界面
2、3、4都是文本界面,他们的区别在于多用户、网络啥的(这个查查资料后再补充:)
而debian
default runleve居然是2
而不是3
仔细看了下debian关于runlevel的文档
也就释然了
原来debian没有把runlevel 2、3、4、5定那么细
用户完全可以自己定义这几个runlevel
(redhat也可以,但貌似不推荐这么做)

分类: tips 标签: , , ,

学习commandlinefu的命令行:echo “foo” > /dev/tcp/192.168.1.1/25

2010年8月22日 没有评论

原文来自commandlinefu

echo “foo” > /dev/tcp/192.168.1.1/25

这个命令将发foo消息到192.168.1.1这台机器的tcp端口25上

这个可以用来测试网络链接是否被防火墙所挡

这是tcp的情况

据说udp和icmp的也都行(没测过:)

分类: tips 标签: , , , , ,

commandlinefu的命令行学习:’ALT+.’ or ‘ .’

2010年8月21日 没有评论

原文来自commandlinefu

‘ALT+.’ or ‘<ESC> .’

这其实是两个命令

一个是按出Alt键不放,再敲.键;

另外一个是先敲Esc键,再敲.键

两个功能是一样的

都是取出前一个命令的最后一个参数

不停执行这两个命令之一

会从最后往前取出每个命令的最后一个参数

这个在bash下测试通过

只是在windows下用secure CRT的时候有一个小问题:

‘Alt + .’这个组合不好使

这是因为Secure CRT把Alt键开头的快捷键都指向操作Secure CRT的菜单了

点击Secure CRT的Options–>Session Options,点击Emacs

再勾选”Use ALT as meta key” ,接着点选”Send escape for meta key”

这下

‘Alt + .’也就好使了。

不过说实话

这些小技巧日常工作中真是用的少

我们一般碰到上个命令最后参数巨长而这个命令又要用的时候

一般是用上箭头键↑呼出上一个命令

再用home键到达命令行首

再删掉不需要的部分

敲入需要的部分再执行的。

分类: tips 标签: , , , ,

从commandlinefu学习命令行:ssh-copy-id user@host

2010年8月20日 1 条评论

原文来自commandlinefu

这条命令好理解

直接看手册就好了

man ssh-copy-id

ssh-copy-id – install your identity.pub in a remote machine’s authorized_keys

需要注意的是-i参数

如果你不提供的话

会将ssh-add -L 命令列出来的公钥都倒过去

如果有-i参数

后面可以指定公钥的文件名(缺省是identify.pub)

分类: tips 标签: , , ,

来自commandlinefu的命令行:!whatever:p

2010年8月19日 没有评论

原文来自commandlinefu

这个命令

!whatever:p

整个是一个word designator

被用冒号(:)分成了event designatormodifiers

!whatever

这个event designator的意思是找出最近执行过的以whatever开头的命令

后面的

:p

这个modifier的意思呢

bash的手册(man bash看)上也有讲:

p      Print the new command but do not execute it.

于是整个命令行的意思就是找出最近执行过的以whatever开头的命令显示出来,不执行

commandlinefu学习之:cp filename{,.bak}

2010年8月18日 没有评论

原文来自commandlinefu

cp filename{,.bak}

这个命令是用来把filename备份成filename.bak的

等同于命令

cp filename filename.bak

这里利用的是bash的brace expansion(大括号扩展)功能

按照bash手册(man bash)所述

bash支持{a,b,c}这样的扩展

比如a{d,c,b}e会被扩展成ade ace abe

所以

filename{,.bak}被扩展成filename filename.bak也就好理解了

来自commandlinefu的命令行学习:^foo^bar

2010年8月17日 没有评论

原文来自commandlinefu

^foo^bar

这个命令用来把上一个命令中第一次出现的foo字串替换成bar字串

然后当做命令执行

bash的manual里是这么解释的

^string1^string2^
Quick  substitution.   Repeat  the  last  command,  replacing  string1  with
string2.  Equivalent to ‘‘!!:s/string1/string2/’’ (see Modifiers below)
这里最后还多了个”^”符号
可是文档上讲
最后那个”^”可以不写
分类: tips 标签: ,