Linux安全tips

Table of Contents

1 说明

本文总结一些Linux安全相关的通用技能。

2 Linux发行版选择

一个发行版要做到安全和稳定,并且软件包丰富,是需要投入大量的人力,这不是一般小组织可以搞定的。所以无论是作为服务器系统,或是个人桌面,都得优先选用成熟的发行版。

可以从很多角度判断一个系统是否成熟,例如:

  • 社区活跃度
  • 是否有商业公司的支持
  • 用户量
  • 发行版对待安全的态度
  • 更新频率,有些是半年发布一个版本,有些是滚动更新,有些甚至连发行周期都不知道

推荐的发型版:

  • RedHat/Fedora/CentOS
  • Debian
  • SUSE/openSUSE
  • Arch Linux
  • Gentoo

3 磁盘分区

3.1 任何用户可写的目录,挂载到独立的分区上

  • /tmp独立为一个分区,并且禁止执行程序。因为任何用户都可以在这里读写。比如Linux存在一个本地提权漏洞,黑客可以将Exploit代码放在/tmp下编译并执行。

可以重新挂载/tmp并设置成不可执行文件:

mount -o remount,noexec /tmp

并在/etc/fstab中设置,让下次启动也生效:

/dev/sdb1 /tmp ext2 defaults,noexec 0 0
  • /var/tmp和/tmp设置一样,因为/var/tmp也可以让任何用户读写。
  • 另外用户可随意读写的目录挂载到其他目录中,也可以防止用户写过大的文件影响到根分区。

4 端口

  • 谨慎监听0.0.0.0。
  • 无需外网访问、只需内网访问的端口,监听内网地址。
  • 外网和内网都不需要访问的端口,监听127.0.0.1。
  • 开发环境监听端口需谨慎,因为开发中的程序不可靠、不安全,并且带有太多调试信息,只监听127.0.0.1。

5 系统配置

5.1 软件设置

  • 生产服务器尽量避免安装GCC、Clang等C源码编译器。因为安装Rootkit或者用Exploit提权,都需要编译代码。
  • 主流发行版的软件源中包含官方源,因为出现重大漏洞后,可以及时获得官方修复补丁。
  • 同类产品,优先选用安全等级较高的,比如OpenSSL近年来爆出太多漏洞,可考虑用LibreSSL代替:
$ wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.2.0.tar.gz
$ tar xvf libressl-2.2.0.tar.gz
$ cd libressl-2.2.0/
$ ./configure
$ make && sudo make install
$ ldconfig

6 文件安全

6.1 特权文件

以下命令助你找到系统中的特权文件:

sudo find / -perm -4000

该去掉s标志位的程序可去掉,尽量保留最少。

7 帐号安全

  • 帐号强密码。误使用弱口令(如:123456)。
  • 定期巡查/etc/shadow哪些帐号被设置了密码,警惕陌生帐号。

7.1 环境变量

如果想环境变量应用到系统每个账户上,可把环境变量写在/etc/profile中。

如果不希望用户修改环境变量,可用readonly将变量设为只读。如:

export TMOUT=100
readonly TMOUT

7.1.1 HISTSIZE

HISTSIZE指定保存命令历史数目。

生产服务器上应设置小一点的值,以免管理员操作服务器的历史记录泄露敏感信息。不过我的桌面系统里设置的值却很大,因为这会便于我更高效地工作。

7.1.2 TMOUT

TMOUT指定用户空闲多少秒后断开会话。个人桌面系统不建议设置此变量。

7.2 配置/etc/login.defs

  • PASS_MAX_DAYS:密码有效期
  • PASS_MIN_LEN:密码最小长度

7.3 sudo配置

sudo配置文件路径:/etc/sudo.conf。

  • 单独存放sudo日志,便于日志分析。配置中加上:
Defaults logfile=/var/log/sudo.log

例,查看密码错误日志:

fgrep 'incorrect password attempts' /var/log.sudo.log
  • 配置保护路径,防止环境变量被修改:
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

8 SSH配置

  • 帐号登录使用证书认证,禁用密码登录。
  • 禁止root帐号登录。
  • ssh登录系统后,可以执行写在/etc/ssh/sshrc里的命令,如下是一个ssh后自动发邮件的命令:
echo "${SSH_CLIENT}登录了${USER}" | mail -s "黑客来了" hacker@shellcodes.org

9 其他

9.1 关注安全通告

关注主流安全咨询网站,以便及时获得跟系统切身相关的安全信息。

也可订阅相关发行版安全相关的邮件列表,如:

等等。