Harden your installation | 让你的系统更安全

2019 11 24, Sun

看国内很多博客会和小白讲

用root用户就好

关掉SELinux就好

chmod -r 777 xxx

ssh用密码登陆就行,搞什么密钥

(口吐芬芳)

这显然是不科学的。稍微给小白用户大概描述一下,我们应该如何让我们的Linux更安全一些

远程连接 - ssh

Linux一般都是用ssh登陆。

多使用密钥登陆

ssh支持密钥登陆。密钥具体来讲很长,简单说就是上锁和开锁的钥匙不一样的一种机制。可以在服务器上留下公钥,自己使用私钥登陆,而这是完全安全的。因为密钥长度一般远高于我们能基于的密码长度,所以是非常安全的,不用担心爆破。私钥可以设置密码,就更安全一些了。

建议设置好密钥以后直接禁用密码登录。

限制登陆的用户

可以从两方面限制登陆用户

登陆shell

通过usermod或者chsh可以修改我们的登陆shell,一般把登陆shell设置为/usr/sbin/nologin就可以阻止这个用户登陆。

AllowUsers

sshd的配置文件/etc/ssh/sshd_config中,可以配置AllowUsers,就可以阻止没有被允许的用户登陆。

chroot

有的时候,我们希望一个用户登陆上去以后,只能看到我们想给他看的文件。那么我们可以为这个用户配置chroot。

略微麻烦一些。参照https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/

用户权限和ACL

用户权限是Linux非常重要的一部分,尤其是ACL的出现,可以非常方便的按照用户和组允许或者阻止访问。参考https://wiki.archlinux.org/index.php/General_recommendations#Users_and_groups

建议直接合理的按照访问情况,分出来合适的用户组,按照需要把文件按照组给出权限。比如说建立一个用户组叫nas,把挂载点递归改变owner的group为nas。把需要访问目录的用户加到nas组里面就好。

特权下放 - sudo

有的命令需要root权限,但是我们又不想/不能用root用户怎么办?用sudo

sudo是一个相对比较完善的下放权限的工具,可以通过visudo来配置,可以限制用户可以/不能用的特权命令或者是搭配的参数。

SELinux

ACL好用,但是问题是粒度还是很大,而且只限于文件管理。所以后面为了细化权限管理,又有了SELinux,权限粒度可以细化到某个syscall。

在SELinux的管理下,每个文件和进程都有自己的user、role、type,我们关心的主要是type。进程、文件、端口、函数执行或者是类型转换都是对象。我们可以允许or拒绝某一个type具体可以对什么对象做什么事情。

比如说我挂载了一个目录到容器内,要允许容器可以读写这个的目录,就需要允许container_t读写这个目录的文件,或者让container_t进入permissive模式,允许这个类型的所有操作。

iptables/firewalld

每个人写的程序都不是没有bug的,只是多少的问题,对于挂在网上的程序来说bug就格外的致命,很容易被利用。为了减少这种可能性我们就需要阻止我们不希望的访问,具体来说就是用防火墙。

一开始我们大部分人用的都是iptables,后来有了firewalld,对新人更友好一些。

此外iptables还可以做很多很骚的操作,以后再说