Linux服务器的初步配置流程


文章还是在看之前的搜藏笔记时找到的,当时自己在刚开始搭建blog的时候也有参考,但没有系统的记录下一个大概的流程,为了方便以后重装或是换主机,觉得有必要记录成文供以后参考。


作者: 阮一峰

开发网站的时候,常常需要自己配置Linux服务器。

本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情。这主要是我自己的总结和备忘,如果有遗漏,欢迎大家补充。

下面的操作针对Debian/Ubuntu系统,其他Linux系统也类似,就是部分命令稍有不同。

第一步:root用户登录

首先,使用root用户登录远程主机(假定IP地址是128.199.209.242)。

ssh [email protected]

这时,命令行会出现警告,表示这是一个新的地址,存在安全风险。键入yes,表示接受。然后,就应该可以顺利登入远程主机。

接着,修改root用户的密码。

passwd

第二步:新建用户

首先,添加一个用户组(这里假定为admin用户组)。

addgroup admin

然后,添加一个新用户(假定为bill)。

useradd -d /home/bill -s /bin/bash -m bill

上面命令中,参数d指定用户的主目录,参数s指定用户的shell,参数m表示如果该目录不存在,则创建该目录。

接着,设置新用户的密码。

passwd bill

将新用户(bill)添加到用户组(admin)。

usermod -a -G admin bill

接着,为新用户设定sudo权限。

visudo

visudo命令会打开sudo设置文件/etc/sudoers(并会对该文件的语法进行检查,比起直接sudo vim要好),找到下面这一行。

root    ALL=(ALL:ALL) ALL

在这一行的下面,再添加一行。

root    ALL=(ALL:ALL) ALL
bill    ALL=(ALL) NOPASSWD: ALL

上面的NOPASSWD表示,切换sudo的时候,不需要输入密码,我喜欢这样比较省事。如果出于安全考虑,也可以强制要求输入密码。

root    ALL=(ALL:ALL) ALL
bill    ALL=(ALL:ALL) ALL

然后,先退出root用户的登录,再用新用户的身份登录,检查到这一步为止,是否一切正常。

exit
ssh [email protected]

第三步:SSH设置

首先,确定本机有SSH公钥(一般是文件~/.ssh/id_rsa.pub),如果没有的话,使用ssh-keygen命令生成一个(可参考我写的SSH教程)。

在本机上另开一个shell窗口,将本机的公钥拷贝到服务器的authorized_keys文件。

cat ~/.ssh/id_rsa.pub | ssh [email protected] 'mkdir -p .ssh && cat - >> ~/.ssh/authorized_keys'

# 或者在服务器端,运行下面命令

echo "ssh-rsa [your public key]" > ~/.ssh/authorized_keys

然后,进入服务器,编辑SSH配置文件/etc/ssh/sshd_config。

sudo cp /etc/ssh/sshd_config ~
sudo nano /etc/ssh/sshd_config

在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数(这里假定为25000)。

Port 25000

然后,检查几个设置是否设成下面这样,确保去除前面的#号。

Protocol 2

PermitRootLogin no
PermitEmptyPasswords no
PasswordAuthentication no

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

UseDNS no

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

接着,在配置文件的末尾,指定允许登陆的用户。

AllowUsers bill

保存后,退出文件编辑。

接着,改变authorized_keys文件的权限

sudo chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh/

然后,重启SSHD。

sudo service ssh restart

# 或者

sudo /etc/init.d/ssh restart

下面的一步是可选的(会对效率提高有所帮助)。在本机~/.ssh文件夹下创建config文件,内容如下。

Host s1
HostName 128.199.209.242
User bill
Port 25000

最后,在本机另开一个shell窗口,测试SSH能否顺利登录。

ssh s1

第四步:运行环境配置

首先,检查服务器的区域设置。

locale

如果结果不是en_US.UTF-8,建议都设成它。

sudo localegen en_US en_US.UTF-8 en_CA.UTF-8

sudo dpkgreconfigure locales

然后,更新软件。

sudo aptget update

sudo aptget upgrade

最后,再根据需要,做一些安全设置,比如搭建防火墙,关闭HTTP、HTTPs、SSH以外的端口,再比如安装Fail2Ban,详细可参考这篇《Securing a Linux Server》

(完)


上面的内容讲解了在配置一台Linux服务器的初步流程,我觉得也可以算是最重要的安全步骤了–设置SSH的公钥登陆、更改SSH默认端口,然后可以选择性的安装DenyHosts/Fail2Ban这样的功能。

之后才是MySQL设置、网站的搭建……

一些有用的参考链接/搜索关键词:
  • vim安装/设置
  • 软件源设置的备份和修改
  • PHP、Python(包括PIP或使用pyenv)、Ruby等环境的搭建
  • 个人目录结构创建(数据备份、脚本备份、配置备份、日志备份、下载文件夹、工具文件夹、临时文件夹……)
  • DenyHosts/Fail2Ban的安装和配置
  • 一些常用工具的安装&配置(nmap、sqlmap、theHarvester)
  • MySQL的密码修改、用户/数据库创建&权限控制
  • 简单实现自动过滤WEB攻击源IP
  • 自动备份功能(将DropboxUploader和自己写的shell脚本放入crontab中自动周期执行)
  • 将一些经常用到的较长命令(Linux网络状态诊断、nginx日志查找/分析、查找大型文件、网站目录篡改分析……)放入一个脚本中方便查阅
  • 给网站增加HTTPS、IPv6的支持
  • WordPress的相关功能/安全设置记录、插件的安装/设置
  • 未完待续……

 

 

, ,

《 “Linux服务器的初步配置流程” 》 有 11 条评论

  1. mosh – 一款替代SSH的UDP远程终端软件
    https://mosh.org/
    https://github.com/mobile-shell/mosh
    https://linux.cn/article-6262-1.html
    `
    Mosh(mobile shell)是一款基于UDP的远程终端软件,包含客户端和服务器两部分,用于代替SSH。因为Mosh基于UDP,所以它可以提供不间断的连接,非常适用于在网络状况不好或时延较大的网络中进行远程终端访问。比如,在GPRS或3G移动网络访问远程服务器,或者从国内访问国外服务器等特殊场景。
    `

  2. 一次乌龙的SSH攻击处理
    http://mental.we8log.com/mental/entry/325/my_weblog
    http://ju.outofmemory.cn/entry/348726
    `
    FreeBSD有个很好的功能就是每天会自动给root用户发两封邮件,一封是日常报告,一封是安全报告。我一般都会把这个邮件转发到自己的邮箱,这样每天就可以在手机上关注一下系统状态了。

    原因是:
    pycharm每隔五分钟会调用hg serve –studio连我的hg服务端检查更新,我又在这个项目的hgrc里配置了默认的ssh连接,但是这台电脑又没有配置ssh证书,需要登录密码,于是pycharm的这个操作就会立即失败,在服务端就留下了一次失败的ssh登录记录。
    `

  3. Linux下如何创建一个不可登录的用户(How can I create a non-login user?)
    https://superuser.com/questions/77617/how-can-i-create-a-non-login-user
    `
    # 方法一
    useradd -M $username
    usermod -L $username

    # 方法二
    useradd -r $username

    相关解释如下 manual 说明:
    # man useradd
    -r, –system
    创建一个系统账户。

    System users will be created with no aging information in /etc/shadow, and their numeric identifiers are chosen in the SYS_UID_MIN-SYS_UID_MAX range, defined in /etc/login.defs, instead of UID_MIN-UID_MAX (and their GID counterparts for the creation of
    groups).

    注意:useradd 不会为这种用户创建主目录,无论 /etc/login.defs (CREATE_HOME) 中是的默认设置是怎样。如果想为要创建的系统账户创建主目录,需要指定 -m 选项。

    -m, –create-home
    如果不存在,则创建用户主目录。骨架目录中的文件和目录(可以使用 -k 选项指定),将会复制到主目录。

    默认上,如果没有指定此选项并且 CREATE_HOME 没有启用,不会创建主目录。

    The directory where the user’s home directory is created must exist and have proper SELinux context and permissions. Otherwise the user’s home directory cannot be created or accessed.

    -M, –no-create-home
    Do not create the user’s home directory, even if the system wide setting from /etc/login.defs (CREATE_HOME) is set to yes.

    -s, –shellSHELL
    用户的登录 shell 名。默认为留空,让系统根据 /etc/default/useradd 中的 SHELL 变量选择默认的登录 shell,默认为空字符串。
    `

  4. 我怎么创建和修改用户帐号,让它有一个nologin shell?
    https://www.iteye.com/blog/yingxiong-642872
    `
    要修改一个已经存在的用户,执行这个命令:
    usermod -s /sbin/nologin

    对新用户,可以使用这个命令:
    useradd -s /sbin/nologin

    要确保用-D选项把每个用户的登录shell设置成缺省的/sbin/nolgin
    useradd -D -s /sbin/nologin
    这样,在使用useradd增加新用户的时候,就不需要用-s选项指定登录shell了,缺省的登录shell就是/sbin/nologin。
    `

    Howto: Linux shell restricting access
    https://www.cyberciti.biz/tips/howto-linux-shell-restricting-access.html
    `
    # useradd -s /sbin/nologin tony
    `

  5. Linux安全配置规范
    https://mp.weixin.qq.com/s/RMocWCJGt001ASgmRbpP7Q
    `
    适用于redhat、suse、fedroa Linux操作系统。
    本规范明确了设备的基本配置安全要求,为设备工程验收和设备运行维护环节明确相关安全要求提供指南。
    一. Linux企业版安全配置规范
    1.1 口令帐号
    1.1.1 检查空口令帐号
    1.1.2 检查Root帐号
    1.1.3 检查帐号超时注销
    1.1.4 root用户远程登录限制
    1.1.5 检测密码策略
    1.1.6 检查Grub/Lilo密码

    1.2 系统服务
    1.2.1 关闭不需要的服务
    1.2.2 openssh安全配置
    1.2.3 SNMP团体字
    1.2.4 禁用ctlr-alt-del组合键
    1.2.5 检查root 路径
    1.2.6 检查信任主机

    1.3 文件系统检查
    1.3.1 检查系统umask设置
    1.3.2 保留历史命令的条数
    1.3.3 检查关键文件的属性
    1.3.4 检查关键文件的权限

    1.4 检查磁盘分区剩余空间

    1.5 检查日志审核

    # cat /etc/profile | grep TMOUT
    # cat /etc/securetty | grep -i ‘console’
    # cat /etc/login.defs
    # cat /etc/pam.d/system-auth

    # cat /etc/grub.conf | grep password
    # cat /etc/lilo.conf | grep password

    # cat /etc/ssh/sshd_config

    # cat /etc/snmp/snmpd.conf

    # cat /etc/inittab

    # echo $PATH

    # find / -name .rhosts
    # find / -name .hosts.equiv

    # cat /etc/profile

    # cat /etc/syslog.conf
    `

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注