在Unix虚拟机中正确配置网络与用户权限,核心是先把虚拟网络模式选对,再用静态地址和最小权限把访问边界收住。 网络决定“能不能通”,权限决定“谁能动”,两条线要一起验收。
Unix虚拟机网络配置教程:桥接模式和NAT模式区别
虚拟化平台通常提供桥接、NAT、仅主机等模式,选错模式,后面改IP、开端口都容易白忙,先看用途,再动配置文件。
桥接模式和NAT模式区别
| 模式 | 典型用途 | 地址来源 | 外部可达性 | 注意点 |
|---|---|---|---|---|
| 桥接 | 虚拟机要像局域网主机一样被访问 | 路由器DHCP或静态 | 局域网可直接访问 | 易出现IP冲突、MAC冲突 |
| NAT | 开发测试、只需出网 | 虚拟网络DHCP | 外部入站需端口转发 | 宿主能访问,局域网默认进不来 |
| 仅主机 | 隔离测试、宿主与虚拟机互访 | 虚拟网络DHCP或静态 | 不直接出外网 | 适合漏洞演练和离线环境 |
选择时可按下面几条判断:
- 需要被办公室其他电脑访问,选桥接,并在路由器做DHCP保留。
- 只需要下载依赖、访问宿主服务,选NAT,入站服务用端口转发。
- 做隔离测试,选仅主机或内部网络,别把测试服务暴露到办公网。
- 克隆虚拟机后先改MAC、主机名和IP,避免地址冲突。
配置前先确认网卡名和虚拟网络,KVM环境可看virsh net-list --all,VirtualBox可看VBoxManage list bridgedifs,进入虚拟机后执行:
ip -br link ip -br addr ip route
网卡名可能是ens33、ens160、enp0s3,不要照抄教程里的旧名称。
Ubuntu虚拟机如何配置静态IP
Ubuntu常用netplan,先列出配置:
ls /etc/netplan/
编辑对应YAML文件,例如/etc/netplan/50-cloud-init.yaml:
network:
version: 2
ethernets:
ens33:
dhcp4: false
addresses: [192.168.10.50/24]
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses: [223.5.5.5, 1.1.1.1]
要点很实在:
- 网关要和静态地址在同一网段。
- 不要同时开DHCP和静态地址。
- YAML缩进用空格,不要用Tab。
- 文件权限建议
chmod 600 /etc/netplan/.yaml。 - 先
sudo netplan try,确认能回滚再sudo netplan apply。
验证不要只看“配置成功”:
ip addr show ens33 ip route ping -c 3 192.168.10.1 ping -c 3 223.5.5.5 getent hosts example.com ss -lntp
能ping网关说明二层和路由基本通,能解析域名说明DNS可用,ss -lntp看服务是否真的监听,Debian传统环境可改/etc/network/interfaces;NetworkManager环境可用nmcli con mod设置ipv4.method manual、ipv4.addresses、ipv4.gateway、ipv4.dns,再nmcli con up。
防火墙只放必要端口,Ubuntu可用ufw allow 22/tcp,RHEL系可用firewall-cmd --add-service=ssh --permanent,据工信部公开信息,云服务安全治理中配置核查是基础环节,虚拟机同样适用。
Linux虚拟机用户权限管理方法:sudo与root场景
网络通了不等于安全,共享root、随手chmod 777、sudo给全部命令,都是常见隐患,行业共识认为,最小权限原则应贯穿用户管理,业内专家指出,服务账户和运维账户要分开,别让一个账号承担所有职责。
sudo权限配置场景:只给需要的人
创建普通用户并加入sudo组:
sudo adduser dev1 sudo usermod -aG sudo dev1 id dev1
更细的控制放在/etc/sudoers.d/,用visudo编辑:
sudo visudo -f /etc/sudoers.d/devops
示例只允许重启Nginx和看日志:
dev1 ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/journalctl -u nginx
命令路径要用which systemctl确认,不要写ALL=(ALL) NOPASSWD:ALL图省事,需要免密时只对单条命令开,并确认审计日志能落到/var/log/auth.log或journal中,定期用sudo -l -U dev1复核授权。
文件权限、ACL与SSH边界
应用目录按“属主可写、同组可读执行、其他人无权限”处理:
sudo chown -R app:app /srv/app
sudo chmod 750 /srv/app
sudo find /srv/app -type d -exec chmod 750 {} \;
sudo find /srv/app -type f -exec chmod 640 {} \;
umask 027
多人协作可用ACL,不必放宽整组权限:
sudo setfacl -m u:dev1:rx /srv/app getfacl /srv/app
SSH侧建议在/etc/ssh/sshd_config.d/99-hardening.conf中设置PermitRootLogin no、PasswordAuthentication no、AllowGroups sshusers,改完先sshd -t检查语法,再重载服务,密钥登录后确认~/.ssh为700、authorized_keys为600,审计可看last、who、journalctl -u ssh --since today。
场景化验收清单
- 开发测试:NAT出网,普通用户sudo白名单,改配置前打快照。
- 生产托管:桥接或固定NAT映射,SSH密钥登录,禁root,防火墙只开业务端口。
- 多租户:每台虚拟机独立用户和组,避免共享UID,集中收集sudo与SSH日志。
- 克隆部署:先改
/etc/hostname、/etc/machine-id、MAC和IP,再启动服务。
收束:先通后权,先最小后审计
网络配置要用ip route、DNS解析和端口监听三项验收;用户权限要用sudo白名单、文件权限和SSH边界三项验收,把这两条线做成清单,虚拟机才既好用又可控。
Unix虚拟机网络与用户权限配置Q&A
Q1:虚拟机桥接后宿主机能通,局域网其他电脑不通怎么办?
先查虚拟机IP是否与物理网同网段,再查网关和ARP,公司网络可能启用端口安全或MAC限制,桥接网卡也可能绑定了错误物理网卡,用ip route确认默认路由,用ping测网关,再在路由器侧看DHCP保留和隔离策略。
Q2:普通用户只想允许重启某个服务,sudoers怎么写更稳?
用绝对路径写命令白名单,例如只允许/usr/bin/systemctl restart nginx,参数复杂时,sudo白名单难以精确限制,可封装固定脚本,再只授权该脚本,改完用visudo -c检查语法,并用sudo -l -U 用户名复核。
Q3:改网络配置后SSH断开,怎么恢复?
从虚拟化控制台登录,不要反复重启,先用ip -br addr看网卡名是否写错,再用netplan try的超时回滚机制恢复,若已apply,改回YAML并检查网关是否同网段,生产虚拟机改网络前先打快照,回滚快照并重启前,先用控制台确认网卡名和路由表,这是恢复连通性的第一步。