开发网站的时候,常常需要自己配置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》。
(完)
南 靖男 说:
root 可以 sudo passwd -d root 干掉密码。
PasswordAuthentication no
UsePAM no
的修改建议放在最后确认后再改,不然的跑机房或者远程重装了。
https://code.google.com/p/puttycn/wiki/ConfigurationGuide
另外,建议使用 byobu。
2014年3月14日 11:52 | # | 引用
tim 说:
适合初学者
2014年3月14日 12:09 | # | 引用
ovalpo 说:
基本够了
2014年3月14日 12:35 | # | 引用
Jarod Liu 说:
>将本机的公钥拷贝到服务器的authorized_keys文件
这个可以直接用ssh-copy-id命令
2014年3月14日 16:24 | # | 引用
赖信涛 说:
这个主页是阮老师自己用linux搭建的吗?
2014年3月14日 18:21 | # | 引用
影子 说:
自己使用的 Linux 服务器这样做基本够用了, 如果是企业级的应用还有很多需要做的工作,比如:
安装应用管理软件,预装一些必须的客户端软件。在中央为设备配置业务、设置监控等等。
2014年3月16日 15:14 | # | 引用
teeceepee 说:
>"在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数..."
65536不可以吧,16位无符号整数最大值65535。还有,最小值貌似是1024。
2014年3月18日 08:16 | # | 引用
Alvin Ye 说:
将本机的公钥拷贝到服务器的authorized_keys文件。
这步建议用 ssh-copy-id 命令
2014年3月18日 12:29 | # | 引用
nyynk 说:
《Secrets of the JavaScript Ninja》
你能不能抽时间将这本书翻译一下。
2014年3月19日 10:23 | # | 引用
原来名字也可以起的这么长啊 说:
浏览你的网站,有时会造成网页无法访问,要等好一会儿才能继续浏览,还是特定的几篇。
2014年3月20日 02:05 | # | 引用
morgan 说:
这篇文章是我读过关于搭服务器最好的文章,没有之一。希望接下来一篇可以介绍如何搭个人网站,好让我看看自己有哪些地方疏忽了。非常感谢!
2014年3月20日 13:00 | # | 引用
keenwon 说:
牛,一些很少用到,买的VPS都是安装好的,也可以通过面板一键重装。然后直接使用putty连接。
2014年3月20日 17:56 | # | 引用
zeroly 说:
发现两处错误
增加组的命令是
groupadd admin
重启ssh服务的命令应该是
sudo service ssh restart
# 或者
sudo /etc/init.d/ssh restart
2014年3月26日 11:59 | # | 引用
lumm 说:
阮老师,你好,看到你的博客是有支持中英文,不知道是如何到国际化的?能否写一篇博文来介绍一下。
2014年3月26日 15:02 | # | 引用
张大发 说:
刚有搭建服务器的想法就看到了这篇文章,幸运啊!!
2014年3月26日 15:46 | # | 引用
maca 说:
好文,适用初学者
2014年3月26日 16:49 | # | 引用
xBei 说:
最最最初步配置应该是配置SSH远程登录吧。。。
2014年4月 2日 15:01 | # | 引用
stoneax 说:
写得挺实用,学习了。
但修改端口部分漏了一个细节,“在IPTABLES开放修改后的端口”,否则会要跑趟机房。我用的是CENTOS.
2014年5月 2日 00:20 | # | 引用
thinkstream 说:
写得很好,mark一下。不知道为什么我在前面一个页面不能留言。
2014年5月 9日 10:10 | # | 引用
guoc 说:
确实有必要提一下开放端口,否则,如果ssh是唯一的连接方式的话,问题就严重了。
2014年6月20日 16:10 | # | 引用
butbueatiful 说:
您既然设置了这一行
bill ALL=(ALL) NOPASSWD: ALL
那么这两行
addgroup admin
usermod -a -G admin bill
就没有什么意义了
2014年6月24日 23:00 | # | 引用
RainFlying 说:
没有最小值的说法,只要端口没被占用,用 21 也可以。
之所以说最小值是 1024 是因为绑定 1024 以内的端口需要 root 权限,但是 sshd 是 root 权限运行的,所以没啥问题,看哪个顺眼选哪个。
2014年6月25日 09:11 | # | 引用
RainFlying 说:
像我等一个私钥到处拷的可能找不到公钥文件嘛
从私钥导出公钥 ssh-keygen -y -f .ssh/id_rsa
2014年6月25日 09:14 | # | 引用
gosnb 说:
受教了。好文,适合新手。
2014年8月 9日 23:22 | # | 引用
好邻居 说:
大多还是看懂了,"在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数..."65536不可以吧,16位无符号整数最大值65535。还有,最小值貌似是1024。
2014年8月27日 09:51 | # | 引用
xxd 说:
请问在编辑SSH配置文件/etc/ssh/sshd_config时,
为何要有如下命令:
`sudo cp /etc/ssh/sshd_config ~`
2014年10月11日 01:02 | # | 引用
单华江 说:
受教了,虽然做过很多次Linux安装配置,但是有些细节仍然受用。
2014年10月29日 14:57 | # | 引用
JunkFood 说:
1024 以下也是可以用的。只是需要 root 权限而已,对 sshd 来说其实没啥问题。
2014年10月30日 20:17 | # | 引用
JunkFood 说:
其实只要开了 PasswordAuthentication no 就不需要 fail2ban 了,证书登录还没有暴力破解的可能性吧(有这能力干嘛不去攻击银行 XD)
2014年10月30日 20:19 | # | 引用
andy chen 说:
我觉得是不是还要设置一下时区呢!?
2015年6月14日 15:42 | # | 引用
yushu 说:
谢谢这么细致的介绍
有一处修改为才好使用哈
sudo /etc/init.d/ssh restart ->
sudo /etc/init.d/sshd restart
2017年1月10日 16:42 | # | 引用
jo 说:
懒得折腾的人,可以使用面板,例如宝塔linux面板,已经集成环境安装,软件管理等一系列功能。
2017年3月 3日 08:52 | # | 引用
一切都是浮云 说:
为了备份下配置文件,防止配置错误可以还原。
2021年7月 6日 14:22 | # | 引用