新的 Centos 服务器初始化配置

当你初次创建新的 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 更加安全和可用,如果你不想每次创建服务器都要做同样的步骤,建议你上面的内容都写都脚本中。
新的 Centos 服务器初始化配置的更多相关文章
- 搭建yum本地源_阿里云CentOS服务器初始化设置
CentOS服务器初始化设置其实不分阿里云或其它服务器了,操作配置过程与步骤也差不多一.挂载硬盘 1.磁盘分区 fdisk -l #查看设备,一般可以看到设备名为/dev/xvdb fdisk /de ...
- CentOS服务器初始化设置
CentOS服务器初始化设置 以阿里云服务器为例 一.挂载硬盘 1.磁盘分区 fdisk -l #查看设备,一般可以看到设备名为/dev/xvdb,或者为/dev/vdb(阿里云io优化型) fdis ...
- Ubuntu 系统服务器初始化配置、安全加固、内核优化和常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875402?spm_id_from=333.999.0.0 描述: 适用于企业内部 Ubuntu 操作服务器初始化.系统安 ...
- CentOS7 系统服务器初始化配置、安全加固、内核升级优化常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875630?spm_id_from=333.999.0.0 描述: 适用于企业内部 CentOS7 系列操作服务器初始化. ...
- centos系统初始化配置
.改主机名: sed -i 's#HOSTNAME=.*#HOSTNAME=u05mix06.yaya.corp#g' /etc/sysconfig/network && hostna ...
- 在centos服务器上配置gitlab钩子引发的一系列问题
为了给公司的服务器上搭建gitlab环境并且配置钩子(实现在本地git push之后服务器自动git pull),整了好久,最后终于把问题解决了,下面是记录安装gitlab之后引发的一系列问题: 首先 ...
- ansible-playbook编写服务器初始化脚本
1.原理:通过limit的参数,限制新定义的服务器.即可给新买的服务器初始化优化.(如下图所示) 首先我们编写一个总入口的palybook脚本: init.yml --- - hosts: all u ...
- 【转】CentOS 6 服务器安全配置指南
原文连接: CentOS 6 服务器安全配置指南(通用) Linux 是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入 L ...
- Linux - CentOS6.5服务器搭建与初始化配置详解(下)
传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面 因为这就是最小化安装 ...
随机推荐
- Docker学习之1—基础及安装
Docker介绍: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...
- DDD实战进阶第一波(十三):开发一般业务的大健康行业直销系统(订单上下文领域逻辑)
前一篇文章主要讲了订单上下文的POCO模型,其中订单与订单项中有大量的值对象.这篇文章主要讲讲这些值对象以及订单项.订单相关的领域逻辑. 1.ProductSKUs值对象领域逻辑:ProductSKU ...
- Android自动化测试之MonkeyRunner使用
MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制A ...
- ASP.NET-FineUI开发实践-18
Grid编辑下垃级联 看了看专业版的例子,分为以下几步,都是前端的 1.编辑父下拉框后,重置子下拉框 2.编辑子下垃框前,通过父下垃框数据得到下垃项,然后绑定数据 所以这里要截取Grid的两个事件,编 ...
- Mysql的跨表更新
本文介绍mysql多表 update在实践中几种不同的写法. 假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是ProductPrice表,我们要将Pro ...
- Jenkins结合.net平台工具之ReportGenerator
上一节我们讲解了如何使用opencover生成单元测试覆盖率报告,opencover默认生成的report为xml格式,可读性并不是特别强,如果靠阅读opencover生成的results.xml来分 ...
- 正则表达式-linux路径匹配
转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9860994.html 需求 注:此正则只用于规范linux路径格式. linux路径支持很多的特殊字符,但是 ...
- [转]RPA流程自动化-Blueprism认证考试介绍
本文转自:https://www.cnblogs.com/digod/p/9190186.html RPA流程自动化-Blueprism认证考试介绍 接触RPA有一段时间了,几种RPA相关工具也都试用 ...
- C#集合。
集合命名空间: using system.collections. 非泛型集合 using system.collections.Generic. 泛型集合 为什么要用集合: 1.数组一旦声明长度就 ...
- C#静态成员静态类。
1. 在静态类中,所包含的所有成员必须是静态的.但不是所有静态成员都必须写在静态类中. 实例成员属于具体的对象,静态成员是属于类的.所以访问静态成员的时候不能通过对象来访问,只能通过类名直 ...