Ubuntu Server 新主机的初步设置
一台新 Ubuntu 服务器的配置过程。
概述
个人比较需要的新主机设置主要包括:
- 创建新用户并赋予 sodu 权限
- 配置免密登录(公钥登录)
- sudo 命令免密码
- 禁止 root 登录
- 禁止密码登录
配置过程
以下详述了每一个配置过程。
创建新用户并赋予 sodu 权限
创建之前先检查系统已有的用户,使用以下命令:
1 | cat /etc/passwd |cut -d : -f 1 |
创建用户:
1 | sudo adduser penn # 相比于 useradd 命令,adduser命令使用交互式方式,更加简单。 |
之后再查看 cat /etc/passwd
:
1 | penn:x:1002:1003:,,,:/home/penn:/bin/bash |
按照 “:”
分隔依次是:用户名,密码,用户 ID,用户组 ID,备注,用户 Home 目录,shell 命令所在目录。
给用户 sudo 权限:
1 | sudo usermod -aG sudo penn |
配置免密登录(公钥登录)
首先确保客户机上有密钥对,使用 ssh-keygen -t rsa
可以创建密钥对。密钥对可以有多个,不能同名。
方法一(通用方法):
- 进入
/home/penn
目录 - 切换到
penn
用户 - 创建
.ssh
目录:mkdir .ssh
- 创建文件
authorized_keys
, 贴入公钥并保存
之后在客户机上可以尝试使用公钥登录 ssh -i .ssh/my_private_key penn@xx.xx.xx.xx
。
方法二(需要服务器能够使用密码登录):
执行:ssh-copy-id -i .ssh/my_public_key penn@xx.xx.xx.xx
,
输入密码即可成功上传公钥。
在客户机上为 IP 指定私钥
修改 ssh 配置文件 ~/.ssh/config
,可以获得以下功能:
- 当客户机有多个私钥时,可以对 IP(域名)指定私钥,不用每次都写完整路径
- 可以通过
ssh myserver
这样的别名登录,避免每次输入过长的信息
编辑客户机的 .ssh/config
文件,写入以下配置:
1 | Host my_server |
之后可以通过 ssh my_server
登录机器。
sudo 命令免密码
使用 visudo
命令,编辑配置文件,写入以下行:
1 | penn ALL=(ALL) NOPASSWD:ALL |
可以实现 penn
用户使用 sudo
命令不需要输入密码。
还可以通过 visudo
修改用户组设置实现 sudo 用户组使用 sudo
命令都不需要输入密码。见下:
1 | # 原数据: %sudo ALL=(ALL:ALL) ALL,修改为以下: |
注意:用户的配置如果放在用户组的配置之前,可能会被用户组的配置覆盖掉。可以将这个配置稍微靠后放。
禁止 root 登录,禁止密码登录,开启公钥登录,更改端口
sudo vim /etc/ssh/sshd_config
1 | Port 8022 # 端口 |
重启服务 sudo systemctl restart sshd
docker 命令免 sudo 前缀
默认情况下,非 root 用户使用 docker 是需要加 sudo 前缀的,可以通过将用户加入 docker 用户组来免输 sudo 使用 docker 命令。
1 | groups # 查看自己的用户组 |
用 openssl 创建 CA 证书
写了个脚本完成一下功能:
创建根CA.key, 再根据 根CA.key 自签名得到 根CA.crt
再利用 根CA.crt 对其他证书申请文件(service.csr)进行签发, 得到 service.crt
之后将 service.crt,service.key 分发给服务器,终端用户只需要安装 根CA.crt 即可加密访问 service。
为了节约篇幅,将脚本放置在 github gist 上这里