Linux服务器的初步配置流程

作者: 阮一峰

日期: 2014年3月14日

开发网站的时候,常常需要自己配置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这个程序。Debian 系统可以执行下面的命令。


apt-get update && apt-get upgrade 
apt-get install sudo

visudo命令会打开sudo设置文件/etc/sudoers,找到下面这一行。


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》

(完)

留言(33条)

root 可以 sudo passwd -d root 干掉密码。

PasswordAuthentication no
UsePAM no
的修改建议放在最后确认后再改,不然的跑机房或者远程重装了。

https://code.google.com/p/puttycn/wiki/ConfigurationGuide

另外,建议使用 byobu。

适合初学者

基本够了

>将本机的公钥拷贝到服务器的authorized_keys文件
这个可以直接用ssh-copy-id命令

这个主页是阮老师自己用linux搭建的吗?

自己使用的 Linux 服务器这样做基本够用了, 如果是企业级的应用还有很多需要做的工作,比如:
安装应用管理软件,预装一些必须的客户端软件。在中央为设备配置业务、设置监控等等。

>"在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数..."
65536不可以吧,16位无符号整数最大值65535。还有,最小值貌似是1024。

将本机的公钥拷贝到服务器的authorized_keys文件。

这步建议用 ssh-copy-id 命令

《Secrets of the JavaScript Ninja》
你能不能抽时间将这本书翻译一下。

浏览你的网站,有时会造成网页无法访问,要等好一会儿才能继续浏览,还是特定的几篇。

这篇文章是我读过关于搭服务器最好的文章,没有之一。希望接下来一篇可以介绍如何搭个人网站,好让我看看自己有哪些地方疏忽了。非常感谢!

牛,一些很少用到,买的VPS都是安装好的,也可以通过面板一键重装。然后直接使用putty连接。

发现两处错误
增加组的命令是

groupadd admin

重启ssh服务的命令应该是

sudo service ssh restart
# 或者
sudo /etc/init.d/ssh restart

阮老师,你好,看到你的博客是有支持中英文,不知道是如何到国际化的?能否写一篇博文来介绍一下。

刚有搭建服务器的想法就看到了这篇文章,幸运啊!!

好文,适用初学者

最最最初步配置应该是配置SSH远程登录吧。。。

写得挺实用,学习了。
但修改端口部分漏了一个细节,“在IPTABLES开放修改后的端口”,否则会要跑趟机房。我用的是CENTOS.

写得很好,mark一下。不知道为什么我在前面一个页面不能留言。

引用stoneax的发言:

写得挺实用,学习了。
但修改端口部分漏了一个细节,“在IPTABLES开放修改后的端口”,否则会要跑趟机房。我用的是CENTOS.

确实有必要提一下开放端口,否则,如果ssh是唯一的连接方式的话,问题就严重了。

您既然设置了这一行
bill ALL=(ALL) NOPASSWD: ALL
那么这两行
addgroup admin
usermod -a -G admin bill
就没有什么意义了

引用teeceepee的发言:

>"在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数..."
65536不可以吧,16位无符号整数最大值65535。还有,最小值貌似是1024。

引用teeceepee的发言:

>"在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数..."
65536不可以吧,16位无符号整数最大值65535。还有,最小值貌似是1024。

没有最小值的说法,只要端口没被占用,用 21 也可以。
之所以说最小值是 1024 是因为绑定 1024 以内的端口需要 root 权限,但是 sshd 是 root 权限运行的,所以没啥问题,看哪个顺眼选哪个。

像我等一个私钥到处拷的可能找不到公钥文件嘛
从私钥导出公钥 ssh-keygen -y -f .ssh/id_rsa

受教了。好文,适合新手。

大多还是看懂了,"在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数..."65536不可以吧,16位无符号整数最大值65535。还有,最小值貌似是1024。

请问在编辑SSH配置文件/etc/ssh/sshd_config时,
为何要有如下命令:
`sudo cp /etc/ssh/sshd_config ~`

受教了,虽然做过很多次Linux安装配置,但是有些细节仍然受用。

引用teeceepee的发言:

>"在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数..."
65536不可以吧,16位无符号整数最大值65535。还有,最小值貌似是1024。

1024 以下也是可以用的。只是需要 root 权限而已,对 sshd 来说其实没啥问题。

其实只要开了 PasswordAuthentication no 就不需要 fail2ban 了,证书登录还没有暴力破解的可能性吧(有这能力干嘛不去攻击银行 XD)

我觉得是不是还要设置一下时区呢!?

谢谢这么细致的介绍

有一处修改为才好使用哈
sudo /etc/init.d/ssh restart ->
sudo /etc/init.d/sshd restart

懒得折腾的人,可以使用面板,例如宝塔linux面板,已经集成环境安装,软件管理等一系列功能。

引用xxd的发言:

请问在编辑SSH配置文件/etc/ssh/sshd_config时,
为何要有如下命令:
`sudo cp /etc/ssh/sshd_config ~`

为了备份下配置文件,防止配置错误可以还原。

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接