最小化安装 CentOS

记录最小化安装 CentOS、创建用户和配置以太网卡、SSH 公钥认证、防火墙规则等过程,以便查阅。


准备工作

下载 CentOS-6.9-i386-minimal.iso 文件,以及用于验证该 ISO 文件的验证文件。

CentOS-6.9-i386-bin-DVD1.iso 也提供了 minimal 安装选择,其安装的软件包为229个, 而 CentOS-6.9-i386-minimal.iso 则安装204个软件包。

文件验证方法可以参考: https://wiki.centos.org/TipsAndTricks/sha256sum

在 Windows 环境下,可以下载 sha256.exe ,并将该程序和下载的 ISO 文件以及验证文件放在同一目录下,在 Windows 命令行工具中切换到它们所在的目录,执行命令:

D:\Downloads>sha256sum.exe -c sha256sum.txt

使用 Rufus 创建可引导USB闪存盘,在 创建一个启动盘 后面的下拉列表中选择 ISO 镜像 并点击后面的光盘形状的按钮,在打开的对话框里选择 CentOS-6.9-i386-minimal.iso ,点击开始等待完成即可。

安装 CentOS

安装过程简记如下:

  • 把 U 盘插入笔记本 USB 槽

  • 开机启动,按下相应的功能键使之进入启动菜单选择界面,选择能从 U 盘启动的那一项

  • 进入 CentOS 安装欢迎界面,选择 Install or upgrade an existing system

  • Choose a Language - English

  • Keyboard Type - us

  • Installation Method - Hard drive

  • Select Partition - /dev/sda1

  • Next

  • What type of devices will your installation involve? - Basic Storage Devices

  • Hostname - [主机名]

  • Selected city - Asia/Shanghai

  • Root Password - [root 用户密码]
    Confirm - [root 用户密码]

  • What type of installation would you like? - Create Custom Layout

  • 分区

    • /boot - 200MB
    • swap - 4GB
    • /home - 15GB
    • /data - 20GB
    • / - 剩余
  • Install boot loader on /dev/sda - 修改 BIOS Driver Order 为(非常关键,否则可能不插U盘无法启动系统):

在本测试机器上安装时,sda 是 U 盘,sdb 是硬盘

First BIOS driver: sdb (硬盘)
Second BIOS driver: sda (U盘)

此时,Install boot loader on /dev/sda 自动变为 Install boot loader on /dev/sdb,也就是将 boot loader 安装在硬盘上,而不是安装在U盘上。

  • 等待安装完成,最后重启

  • 如果需要在客户机上使用 SSH 协议远程登录本 CentOS 系统,那么就需要获取密钥指纹。

配置 CentOS

上面安装的 CentOS 是作为服务器系统使用的,所以接下来的配置主要是在另一台作为客户端的机器上远程登录服务器完成的,对于必须在服务器本地进行的操作已经明确注明。

网络

以太网卡

本小节所有操作均在服务器本地执行

修改文件 /etc/sysconfig/network-scripts/ifcfg-eth0,使之符合下面的配置:

ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
IPV6INIT=no

主机名 - hostname (可选)

修改文件 /etc/sysconfig/network : HOSTNAME=your_host_name

SSH

初次登录

在客户端机器的 shell 中执行下面的命令,以 root 用户身份远程通过 SSH 协议远程登录服务器

$ ssh root@192.168.1.10
The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
RSA key fingerprint is SHA256:b9GMyLNUZUCyMTR86H8Oezrj81SU1bxxKxDu3hZ3pmY.
Are you sure you want to continue connecting (yes/no)?

如果上面输出的指纹与服务器公钥指纹相同,则输入 yes 继续,再输入密码即可登录成功;如果两个指纹不同,则输入 no 拒绝连接。

这一步非常重要,只有确定了服务器的公钥是可信的,才能保证以后的通信安全

创建新用户

新建用户组、新建用户、设置密码和将用户添加到用户组的命令如下

# useradd -m -d /home/will -s /bin/bash will
# passwd will
Changing password for user will.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

如果密码过于简单将会发出警告信息。

设置 sudo 权限

# visudo

root ALL=(ALL) ALL 这一行下面添加

will    ALL=(ALL)       ALL

注:使用 sudo -l 可以查看当前用户的 sudo 权限,sudo -l -U user 查看指定用户。

最后退出登录,使用刚刚创建的用户 will 登录,检查是否成功。此后 will 将作为服务器的管理员账户,接下来的任务都是以 will 用户的身份执行的。

SSH 公钥认证

假设客户端机器已有 SSH 密钥,其文件为 ~/.ssh/id_rsa~/.ssh/id_rsa.pub,在客户端 shell 执行下面的命令:

$ cat ~/.ssh/id_rsa.pub | ssh will@192.168.1.10 'mkdir -p .ssh && cat - >> ~/.ssh/authorized_keys'
will@192.168.1.10's password:

上面这步也可以用 scp 把公钥文件 id_rsa.pub 上传到服务端机器上,以便以后设置 git 服务器使用。然后把 id_rsa.pub 的内容写入到 .ssh/authorized_keys 文件中。

以 will 身份远程登录服务器,修改 ~/.ssh~/.ssh/authorized_keys 的权限

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

修改服务器 SSH 配置文件 /etc/ssh/sshd_config
修改前先备份

Port 22

Protocol 2

PermitRootLogin no

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

PermitEmptyPasswords no
PasswordAuthentication no

UseDNS no

以上主要是禁止 root 用户登录和密码方式登录

也可以在配置文件的末尾,指定允许登陆的用户

AllowUsers will

重启 SSH 服务

$ sudo /etc/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

登出服务器,再次远程登录则不需要输入密码,而且也不可能使用密码登录了,因为被禁止了。
所谓”公钥登录”,原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

下面的一步是可选的。在本机~/.ssh文件夹下创建config文件,内容如下。

Host mist
HostName 192.168.1.10
User will
Port 22

这样就可以简化命令了:

$ ssh mist

iptables

从命令行

参考 linux-note/iptables.md

写一个配置防火墙的脚本,在服务器执行即可

从已有的规则文件

下面是一个简单却能保证基本安全的防火墙规则文件的内容

# Generated by iptables-save v1.4.7 on Wed Aug 23 03:13:40 2017
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [110:15439]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A UDP -p udp -m udp --dport 53 -j ACCEPT
COMMIT
# Completed on Wed Aug 23 03:13:40 2017

将已有规则文件中定义的防火墙规则应用到系统

$ sudo iptables-restore < iptables-rules

永久生效

$ sudo /etc/init.d/iptables save

或者

$ sudo service iptables save

时间同步

其他配置

在 .bashrc 文件中重新定义 ll 的别名

# User specific aliases and functions
alias ll='ls -alF --color=auto'

安装软件

YUM

  • yum update & yum upgrade

  • yum install man

  • yum install lrzsz

    可选,可使用 sz rz 与 XShell 进行文件传输

从源码安装

  • 安装编译环境
$ sudo yum -y install gcc
  • 创建自定义系统级别配置文件
$ sudo touch /etc/profile.d/custom.sh

Git 和 Gitolite

Git 暂时由 sshd 进行认证(httpd 认证以后再研究),通过 gitolite 进行授权。

安装 Git

$ sudo yum -y install dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel
$ curl -O https://www.kernel.org/pub/software/scm/git/git-2.14.1.tar.gz
$ tar zxvf git-2.14.1.tar.gz
$ cd git-2.14.1
$ ./configure --prefix=/usr/local/git
$ make
$ sudo make install
$ /usr/local/git/bin/git version
git version 2.14.1
$ sudo vi /etc/profile.d/custom.sh
$ exit
logout
Connection to 192.168.1.10 closed.
$ ssh mist
Last login: Mon Aug 28 00:55:42 2017 from 192.168.1.5
$ git version
git version 2.14.1

服务器上的 Git 无需设置 user.nameuser.email

安装 Gitolite

  • 将公钥上传至服务器,同时重命名
$ scp ~/.ssh/id_rsa.pub will@mist:/tmp/steven.pub
  • 安装和初始化
$ sudo useradd -m -d /home/git -s /bin/bash git
$ sudo passwd git
$ su - git
$ git clone https://github.com/sitaramc/gitolite
$ mkdir $HOME/bin
$ gitolite/install -ln
$ gitolite setup -pk /tmp/steven.pub

安装若出错 Can't locate Data/Dumper.pm in @INC ,执行

 sudo yum install 'perl(Data::Dumper)'

必须为 git 用户设置密码,否则只有 root 用户才能使用 su - git 切换到 git 用户

Gitolite 授权

克隆 gitolite-admin.git 仓库。

$ git clone user@gitserver:gitolite-admin.git
$ cd gitolite-admin
$ ls
conf/  keydir/
$ find conf
conf
conf/gitolite.conf
$ find keydir/
keydir/
keydir/steven.pub