文章还是在看之前的搜藏笔记时找到的,当时自己在刚开始搭建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 locale–gen en_US en_US.UTF-8 en_CA.UTF-8
sudo dpkg–reconfigure locales
然后,更新软件。
sudo apt–get update
sudo apt–get 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 条评论
Easy full stack backup operations on UNIX-like systems.
https://github.com/backup/backup
http://backup.github.io/backup/v4/
将文件定期备份至Dropbox
https://github.com/andreafabrizi/Dropbox-Uploader
Linux系统安全需要注意的一些问题
http://www.mottoin.com/98011.html
`
1.系统用户优化
2.系统服务优化
3.ssh访问策略
4.系统内部安全配置
5.系统应用安全配置
`
为SSH添加两步验证
https://www.felix021.com/blog/read.php?2133
ssh两步验证强化版(publickey+google authenticator)
https://www.felix021.com/blog/read.php?2172
[安全漏洞公告专区]Linux服务器安全配置-万潮新
https://bbs.aliyun.com/read/160344.html
https://www.aliyun.com/ss/?k=Linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE
site:linux.cn 安全 配置
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移动网络访问远程服务器,或者从国内访问国外服务器等特殊场景。
`
SSH的Server端配置审计(banner, key exchange, encryption, mac, compression, compatibility, security, etc)
https://github.com/arthepsy/ssh-audit
一次乌龙的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登录记录。
`
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,默认为空字符串。
`
我怎么创建和修改用户帐号,让它有一个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
`
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
`
限制每个用户/组/系统的SSH登录次数
https://bynss.com/2020/306366.html
`
$ sudo nano /etc/security/limits.conf
ostechnix hard maxlogins 1
@mygroup hard maxlogins 1
`
Limit The Number Of SSH Logins Per User/Group/System
https://www.ostechnix.com/limit-the-number-of-ssh-logins-per-user-group-system/