当你初次创建新的 Centos 服务器的时候, Centos 默认的配置安全性和可用性上会存在一点缺陷(运维人员往往会有初始化的脚本)。为了增强服务器的安全性和可用性,有些配置你应该尽快地完成。 这篇文章大致从这方面去讲 - 账号安全 - ssh 安全 - 防火墙 - 交换区文件(swap file)
用户密码安全
关于 root 用户
root 用户是在linux环境下拥有非凡权限的的超级管理员。因为root用户的权限很高,所以在日常使用中不建议使用。这是因为 root 用户能做出一些非常有破坏性的行为,甚至是事故。(比如是臭名昭彰的rm -rf /
,或者你会对这篇文章《Linux 中如何避免 rm -rf /*》感兴趣) 下一步,我们为了日常工作会设置一个权限较小的替代用户。我们会教你当你需要更大的权限的时候怎样获取。
创建一个新的用户
这个例子会创建一个用户叫 demo,你可以替换成你喜欢的用户名:
adduser demo
下一步,为新的用户分配密码(再次说明,用你刚创建的用户替换demo)
passwd demo
输入一个强密码,然后再重复输入以完成验证。
用户权限
现在,我们已经有了一个普通权限的用户。然而我们有时需要执行一些管理员任务。 为了避免要注销普通用户,然后用 root 用户重新登录,Linux 中有个优雅的解决方式,系统授权特定用户或用户组作为 root 或他用户执行某些(或所有)命令系统。在这个用户组的用户在每条命令前加个单词 sudo,就可以用管理员权限执行命令。
安装 sudo
有些版本会没有 sudo
命令的,所以首先要安装 sudo
yum install -y sudo
属于wheel
用户组的用户可以使用sudo
命令。 在 RedHat 系只需我们需要添加用户到那个wheel
组。属于wheel
组的用户可以使用sudo
命令。 以root
的身份执行以下命令,会将新用户添加到wheel
组中(将 demo 替换成你的新用户)
gpasswd -a demo wheel
ssh 安全
保护你的服务器的下一步是为你的新用户设置公钥认证。通过使用 SSH 私钥登录来会提高服务器的安全性。
生成密钥对
如果你没有包含公钥和私钥的密钥对,你需要生成一个。如果你已经有了想要使用的密钥,请跳到复制公钥的步骤。 要生成新的密钥对,请在本地机器终端输入以下命令:
ssh-keygen
假设你的本地用户叫 localuser
,你会看到的输出如下所示
ssh-keygen output
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):
按回车键以接受这文件名和路径(或者输入新的名称) 下一步,系统会提示你输入密码确保密钥的安全。你可以输入密码或者将密码留空。 注意:如果你将密码留空,你可以用私钥进行身份验证,不输入再输入密码。如果你输入密码了,你需要私钥和密码才能登陆。使用密码保护密码会更加安全,但两者都有自己的用途,并且都比基本密码验证更安全。 这会在 localuser 的Home
(主)目录的 .ssh
文件夹 中生成一个私钥 id_rsa
和一个公钥 id_rsa.pub
。记住私钥不要和任何不该访问你服务器的人共享。
复制公钥
生成 ssh
密钥对后,你需要将你的公钥复制到新的服务器上。我们将介绍两种简单的方法来做到这点。
方案一: 使用 ssh-copy-id
如果您的本地计算机安装了 ssh-copy-id ,则可以使用它将你的公钥安装到你拥有登录凭据的任何用户。 执行 ssh-copy-id脚本需要指定要安装密钥的服务器的用户名和 IP 地址来,如下所示:
ssh-copy-id demo@SERVER_IP_ADDRESS
在提示符处输入密码后,你的公钥用会被添加到远程用户的.ssh/authorized_keys
的文件中。现在可以使用相应的私钥登录到服务器了。
方案二:手动配置密钥
1.如果服务器上没有.ssh/authorized_keys
文件, 要先创建.ssh
文件夹以及.ssh/authorized_keys
文件
cd ~
mkdir .ssh
chmod 700 ~/.ssh
cd ssh
touch authorized_keys
chmod 600 authorized_keys
2.复制公钥内容到服务器上
scp id_rsa.pub userName@host:/home/userName/.ssh/wait_to_authorized_key
3.将公钥字符串添加到authorized_keys
文件中
cat wait_to_authorized_key >> authorized_keys
禁止 root 用户登录
现在我们有了新用户,通过修改 SSH 的守护进程(允许我们远程登录的程序)的配置来禁止远程SSH访问 root 用户,这样可以更好第保护我们的服务器。 /etc/ssh/sshd_config
中
#PermitRootLogin yes
改成
PermitRootLogin no
- (可选) 禁止密码登录: 把
PasswordAuthentication yes
修改为PasswordAuthentication no
然后重载一下ssh
的配置
sudo systemctl reload sshd
现在,在我们退出服务器之前,我们应该测试我们的新配置。直到我们确认可以成功建立新的连接。
更多
你可以看我这篇文章 提高-ssh-安全性
防火墙设置
防火墙能控制端口、应用程序的流量,让服务器更加安全。在 Centos 7 中引进 firewalld 作为 iptables 的前端。firewalld 对比 iptables,有区域(zones)划分, 更简单,能动态配置等特点。 下面主要介绍杂在新服务器中 Firewalld 的基本配置 启动
sudo systemctl start firewalld
设置默认区域
sudo firewall-cmd --set-default-zone=public
查看激活区域
sudo firewall-cmd --get-active-zones
如果激活区域中没有public
的话,可能是没有为public
区域设置接口,你需要用id addr
查看网卡接口(其中 lo 是本地回环接口),再使用设置
sudo firewall-cmd --permanent --zone=public --change-interface=eth0
给防火墙添加允许通过的服务
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=ssh
查看更多可以添加的服务
sudo firewall-cmd --get-services
查看你的 firewalld 信息
sudo firewall-cmd --list-all
重载配置
sudo firewall-cmd --reload
开机启动
sudo systemctl enable firewalld
更多
更多的你可以看官方文档
设置交换分区(可选)
当你服务器内存不够用的时候,就会被访问频率较低暂时放在交换分区的磁盘文件中。现在设置交换分区的公司应该不多,因为不够用还不如直接加内存。分区文件执行效率肯定比内存低很多。 为何还是会有人用分区文件呢? 穷。比如我(逃 下面来讲下如何设置分区文件。 交换分区的大小大概等于或者是物理内存的2倍。 比如说,如果我们需要创建一个4千兆字节的文件,我们可以通过输入以下内容创建在 /swapfile
的交换文件
sudo fallocate -l 4G /swapfile
我们需要限制对文件的访问,要让其他用户或其他进程无法看到写入的内容
sudo chmod 600 /swapfile
格式化分区文件
sudo mkswap /swapfile
告诉系统可以用这个文件可以用于交换
sudo swapon /swapfile
开机自动执行
sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'
可以用free -m
查看使用的情况
最后
以上几个步骤会让你的 Linux 更加安全和可用,如果你不想每次创建服务器都要做同样的步骤,建议你上面的内容都写都脚本中。