想要在一台新买的VPS上拿到root权限,最直接了当的办法就是:用SSH登录后敲 sudo -i,或者直接使用系统商在控制台给你的初始root密码登录。
这只是个开始,很多服务器在后台默认禁用了root直连,或者你接手的是别人配置过的旧机器,真正要顺畅地搞定root权限,你得理解系统商那套安全机制是怎么想的,下面咱们掰开揉碎了聊。
不同环境下获取Root权限的三种实操思路
云服务器厂商(简米云、酷番云、AWS) 的逻辑是,不让你用root到处乱跑,需要时临时提权,而独服或高防服务器商家,经常把root密码直接发到你邮箱。
云服务器怎么获取root权限
咱们以最常见的CentOS和Ubuntu系统为例。
- 先用普通用户登录,
ubuntu或centos。 - 敲下这行命令切换到root:
sudo -i或者sudo su -。 - 如果提示需要密码,输入你普通用户的密码即可。
这种云服务器获取root权限的方法,是临时的,根治不了问题,如果你嫌麻烦,想直接用root登录SSH,就得做下面两步,这也是百度上关于“服务器怎么获取root权限密码”最常问的操作:
| 步骤 | 操作命令 | 作用说明 |
|---|---|---|
| 1 | sudo passwd root |
给root账户设置一个新密码,注意输入时屏幕没反应,正常现象 |
| 2 | sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config |
让SSH服务允许root直接登录 |
| 3 | sudo systemctl restart sshd |
重启SSH服务,让配置生效 |
独立服务器(物理机)的默认Root密码
有些服务商为了省事,会在你购买后把root密码发到注册邮箱,如果你没找到,就去控制台的“运维”或“远程管理”面板里找“重置密码”按钮,这属于服务器获取root的基础操作,每个面板叫法不一样,但核心逻辑是通用的。
操作路径:控制台 -> 实例列表 -> 更多 -> 密码/密钥 -> 重置密码。
搞不定Root权限?大概率卡在这两个坎上
很多朋友反馈,明明按教程做了,服务器获取root权限还是失败,这里头有两处细节,最容易被忽略。
SSH配置文件里的坑
上面的命令里,那行sed替换是分系统版本的,起码有一半的场景下,你执行完那条sed命令,SSH配置文件根本没改对,因为老版本系统的配置项是 #PermitRootLogin yes,这时候你再执行完了SSH重启命令,就坏事了,直接断开连接,再也连不上更别提获取root了。
推荐做法:别用sed了,直接用 vi /etc/ssh/sshd_config 打开文件,手动找到 #PermitRootLogin 这一行,删掉前面的 注释符号,把 prohibit-password 改成 yes,保存退出后,用 sshd -t 检查一下语法,没报错再重启服务。
安全组或防火墙拦截了SSH端口
你改了配置,密码也对了,但就是连不上,行业共识认为,八成原因是云服务器的安全组策略没放行来自你本地IP的SSH访问。
- 检查云控制台安全组,入方向规则是否允许TCP端口22。
- 检查服务器内部防火墙,执行
systemctl status firewalld查看状态。
如果你是在内网穿透或者局域网环境想服务器获取root,这一步尤其关键,因为不同网络环境对22端口的封锁策略千差万别。
容器环境(Docker)里的Root权限怎么拿
如果是跑Docker容器,情况又不一样了,很多镜像为了安全,默认用非root用户运行进程,这时候你想要root权限,不能用上面那套思路,容易给容器搞出权限漏洞。
- 进入容器并拿到root:如果你是用
docker exec -it 容器名 /bin/bash进入的,在容器内执行su root试试,多数官方镜像不给密码,会报错。 - 从宿主机切过去:直接在宿主机上
docker exec -u root -it 容器名 /bin/bash,无视容器内的用户限制,直接以root身份切入,这是最干净利落的办法。
值得一提的是,很多朋友在这个阶段经常混淆概念,以为拿到了容器root就等于拿到了宿主机root,容器内root权限受限很大(受Capabilities限制),这是两码事。
彻底搞不定时,用救援模式绕过密码
如果你彻底忘了密码,或者上面改配置把自己锁外面了,别慌,主流的云厂商都提供了VNC登录和救援模式,救援模式本质上是一个临时的微型Linux系统,你可以挂载原来的系统盘,把密码重置掉。
这个操作因为各家控制台UI差异太大,没有统一命令行教程,记住核心口诀:控制台 -> 停机(不付费的按量付费实例注意别产生费用) -> 救援模式 -> 挂载磁盘 -> 用chroot进入原系统 -> passwd root。
所以遇到这种救急场景,搜索“VPS获取root权限在哪里修改”这类问题,往往不如直接搜你家云厂商名字加“救援模式”来得快,毕竟每家厂商的挂载路径和命令参数不一样,没法给一套固定答案。
Root权限获取后的安全加固清单
拿root不是为了折腾,是为了更好地管理,拿到权限后别急着去跑一堆命令,先看看下面这几点,不然服务器分分钟变成别人的“肉鸡”。
- 修改SSH默认端口:把22改成高位端口如22026,能挡掉90%的暴力破解扫描。
- 禁止密码登录,改用密钥:如果你特别依赖密码,至少密码得复杂些,类似
Gk#9zX!pLq2@xR7v这种长度。 - 装个Fail2ban:它能在你连续输错密码几次后,自动封禁这个IP一段时间,据工信部近年发布的网络安全态势报告来看,暴力破解依然占据服务器入侵原因中相当一部分比例。
关于服务器获取Root的Q&A快问快答
为什么我sudo -i之后提示command not found?
这说明你的系统是个精简版镜像,连sudo命令都没装,需要切换到root用户:`su -`,然后输入root密码,再执行 `apt install sudo` 或 `yum install sudo`,这个报错在Debian系的容器里很常见,属于镜像裁剪过度引发的,不用慌。
重置root密码后,原来的密钥登录会失效吗?
不会失效,密钥登录走的是公钥认证体系,跟密码是两套逻辑,如果你在重置root密码的过程中,手工改动过 `/root/.ssh/authorized_keys` 这个文件的内容,密钥登录才会失效,多数情况下,重置密码只是改了 `/etc/shadow` 文件里的哈希值,与密钥文件无直接关联,厂商控制台的重置密码功能,通常只做这一件事。
服务器获取root权限对网站性能有提升吗?
没有任何直接提升,性能瓶颈多半在CPU、内存、带宽和数据库查询上,而权限只是一个门禁,换句话说,平时用一个普通用户跑网站,PHP-FPM和Nginx也完全跑得起来,如果你哪天发现某个进程需要读一个文件但提示权限不足,直接给对应文件加个 `chmod` 授权即可,没必要为这个全面放开root,放开root反而会带来误操作删库的风险,那样的话,损失可不止性能本身。