拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu 18.04服务器初始化:修改root密码、配置SSH与vsftpd指南

Ubuntu 18.04服务器初始化:修改root密码、配置SSH与vsftpd指南 简介面向Linux初学者与运维人员的Ubuntu 18.04系统配置实操指南完整覆盖修改root用户密码、安装并启用SSH服务、开放root远程登录权限以及安装配置vsftpd文件服务器的全过程。文档以图文结合方式逐步演示关键命令与配置文件修改包括使用sudo passwd root重置密码、通过apt-get安装openssh-server、编辑sshd_config开启PermitRootLogin、用netstat查看服务状态以及去除vsftpd.conf中write_enable的注释等并附带服务重启与FileZilla上传验证方法可帮助读者快速建立服务器远程管理与文件传输能力。资源包为单个docx文档容量仅556KB内容集中精炼适合边看边操作或作为速查手册。目前已有364人学习使用是Ubuntu服务器部署与安全配置的实用参考资料。1. 先想清楚再动手为什么改 root 密码、装 SSH、装 vsftpd 这三步总是连着做拿到一台刚装好的 Ubuntu 18.04 服务器无论是物理机还是 VMware 虚拟机你第一件要办的事往往就是这三件给 root 设一个自己能记住的密码、装 SSH 让自己能远程登进去、再装一个 vsftpd 让文件能传上服务器。很多新手在这三步上翻车——root 密码设完却登不上、SSH 装完连不上、FTP 能连却传不了文件每个环节都有隐藏门槛。这篇笔记按一个服务器初始化最常见的顺序讲完这三件事把每步的命令、参数和坑都交代清楚。适合刚接手 18.04 服务器、或者正给实验环境开远程入口的从业者照着走一遍就能把这套链路跑通。2. 修改 root 密码两种场景、五个参数与一条后悔药修改 root 密码是这套流程的第一步但它分两种完全不同的场景一种是你能正常登录系统另一种是你把密码忘了、连系统都进不去。两种场景的操作路径不一样先分清你是哪一种再动手。2.1 已登录系统用 passwd 修改 root 密码的标准流程如果你还能用普通用户登录比如安装系统时创建的那个账户那改 root 密码的标准做法是sudo passwd root。但动手之前我建议先看一眼 root 当前的密码状态# 查看 root 在 /etc/shadow 中的密码字段 sudo grep ^root: /etc/shadow这条命令输出的第二段两个冒号之间的部分就是加密后的密码散列。如果这段以!或*开头说明 root 密码目前是锁定状态也就是 root 账户根本没有可用的密码。Ubuntu 18.04 默认就是这种状态——安装时只让你创建普通用户root 的密码字段默认锁定。这解释了很多人的疑惑明明没给 root 设过密码为什么su - root一直报认证失败。确认状态后执行密码修改# 给 root 设置新密码 sudo passwd root # 输入两次新密码后验证切换到 root su - root这里的passwd root只能用 root 权限执行普通用户不借助 sudo 改不了别人的密码。su - root和su root的区别要注意加了-会同时加载 root 的完整环境变量和家目录不加-只切换用户身份环境变量还是原来的。我建议验证时习惯用su - root因为后续在 root 下执行命令时PATH 等环境变量是否完整直接决定了你能不能找到apt、ls这些命令。如果密码设置成功但su - root依旧报错多半不是新密码的问题而是 root 账户被锁定后没有真正解锁。这时执行sudo passwd -u root解锁再重新验证。这种设置密码后仍无法登录的现象很常见尤其是用过一些自动化初始化脚本的机器。2.2 忘记密码通过 GRUB 引导进入恢复模式忘记 root 密码、连普通用户也进不去的时候唯一的入口就是 GRUB 引导菜单。这个方法在物理机和虚拟机上通用操作前先把虚拟机做个快照给自己留条后悔药。重启机器在 GRUB 菜单出现时按下方向键暂停自动启动选中默认的内核行按e键进入编辑模式。找到以linux开头的那一行在行尾追加一段内核参数# 在 linux 那行末尾追加以下内容 init/bin/bash consoletty0追加完成后按Ctrlx或F10引导系统会直接进入一个 root shell。注意这个阶段根文件系统是只读挂载的直接输入passwd root会报错。先重新以读写模式挂载根文件系统再修改密码# 重新以读写模式挂载根文件系统 mount -o remount,rw / # 修改 root 密码 passwd root # 修改完成后重启 reboot -f值得强调的一点是进入这段紧急 shell 后环境变量可能不完整passwd这类命令如果提示找不到通常是因为 PATH 里没有/usr/bin和/bin用绝对路径/usr/bin/passwd root就能解决。这个问题和系统里环境变量配置错误导致命令找不到是同一类故障排查思路一致。如果屏幕提示System is rebooting卡住直接强制断电再开机密码已经写进 shadow 文件不会丢。2.3 passwd 的参数边界锁定、解锁、删除与强制过期passwd修改密码只是它的基本功能日常运维里更常用的是它的一堆参数。我把它整理成了一个参数表遇到改了密码但登不上这类问题时逐个排查这几个状态。参数作用适用场景passwd -l root锁定 root 密码密码字段前加!临时禁用 root 登录不需要删账户passwd -u root解锁 root 密码锁定后要恢复登录时passwd -d root删除 root 密码变成空密码测试环境不推荐生产使用passwd -e root强制 root 下次登录时修改密码给账户设置临时密码并强制轮换chpasswd批量修改密码支持管道输入写初始化脚本时批量设置命令行里还有一个实用技巧用chpasswd批量改密码一条命令解决适合在脚本里使用# 通过管道把 用户名:新密码 传给 chpasswd echo root:YourNewPass123 | sudo chpasswd这里有一个容易踩的细节passwd -d删除密码后某些 SSH 配置下会允许空密码登录如果sshd_config里恰好开了PermitEmptyPasswords yes那 root 就能无密码远程登录这是最危险的组合之一。我的建议是生产环境永远不要用空密码改密码后的第一件事是验证su - root和ssh rootlocalhost两条链路都能正常走通。3. 安装 SSH 并允许 root 远程登录PermitRootLogin 的三个可选值怎么选改完 root 密码下一步是装 SSH 服务。Ubuntu 18.04 桌面版默认没装 openssh-server最小化安装的服务器版同样没有所以这个步骤基本必做。装完之后真正的重点是 sshd_config 里的PermitRootLogin参数怎么配——这也是网上问得最多的一个问题为什么 root 密码明明正确SSH 就是登不进去。3.1 安装 openssh-server 的最小命令集先做系统软件源检查再安装。18.04 的官方源已经停止标准支持如果apt update报 404你需要先把源切换到 old-releases 镜像这个坑我在后面避坑章节单列一条这里先按正常流程走# 更新软件源索引并安装 SSH 服务端 sudo apt update sudo apt install -y openssh-server # 设置服务开机自启并立即启动 sudo systemctl enable --now ssh # 确认服务运行状态 systemctl status ssh安装包名是openssh-server但服务名是ssh这点容易混淆。systemctl status ssh能看到active (running)就说明服务起来了。如果用systemctl status sshd查不到不是服务有问题而是名字查错了。另外 18.04 上ssh.service对应的守护进程二进制文件仍然是sshd你可以在ps aux | grep sshd里看到它。3.2 PermitRootLogin 与 PasswordAuthentication 的组合判断安装完成后核心配置文件是/etc/ssh/sshd_config。允许 root 远程登录的关键参数就是PermitRootLogin它有四个可选值我一般按下面的表格来判断该选哪个可选值行为推荐场景yes允许 root 使用密码和公钥登录内网实验环境图省事时用prohibit-password只允许 root 使用公钥登录禁止密码登录有公网暴露的服务器安全底线forced-commands-only只允许 root 通过公钥执行强制命令极少用一般做自动化备份时用no禁止 root 登录安全要求极高的生产环境Ubuntu 18.04 自带的 openssh-server 默认值是prohibit-password这意味着一件事你刚装完 SSH 就用 root 加密码去登录系统会直接拒绝你报Permission denied因为默认配置里 root 只能走公钥认证密码认证对 root 是禁用的。这也是为什么我的 root 密码对、SSH 却拒绝我的最常见原因。两个参数必须放在一起判断PermitRootLogin负责root 能不能登PasswordAuthentication负责密码这种认证方式可不可用。组合关系如下# 允许 root 使用密码远程登录内网环境常用 sudo sed -i s/^#PermitRootLogin.*/PermitRootLogin yes/ /etc/ssh/sshd_config echo PasswordAuthentication yes | sudo tee -a /etc/ssh/sshd_config如果PasswordAuthentication no那即使PermitRootLogin yesroot 用密码也是登不进来的因为整个系统的密码认证都被关掉了所有用户都只能靠密钥。建议在改配置之前先做备份一条命令的事# 修改前备份出问题时可以立刻回滚 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date %F)这个备份习惯很便宜但非常救命。SSH 配置改错导致服务起不来的话如果没有备份就得进恢复模式改回去了。3.3 让配置生效并验证登录修改完配置后不能直接重启服务了事先检查语法再平滑重载# 语法检查任何配置错误都会在这里暴露 sudo sshd -t # 语法正常后重启服务 sudo systemctl restart ssh # 本机验证 root 能否登录 ssh rootlocalhostsshd -t是绝对要跑的一步。它只做配置解析不启动服务语法错误会直接提示哪一行有问题。常见错误是手写配置时把PermitRootLogin拼错或者在重复的Include文件里写了互相冲突的参数——18.04 的sshd_config默认带一行Include /etc/ssh/sshd_config.d/*.conf云镜像装出来的系统常常在这个目录下已经有一个cloud-init.conf里面可能写了自己的PasswordAuthentication配置你在主配置里改了半天发现不生效原因就在这。如果 root 密码正确但登录报错优先看/var/log/auth.log里面有具体的拒绝原因# 查看 SSH 登录失败的详细日志 sudo tail -30 /var/log/auth.log日志里Failed password for root说明密码错root not allowed because not listed in AllowUsers说明账户被AllowUsers白名单拦了Permission denied (publickey)说明密码认证没开。看清日志里的拒绝原因再改配置别瞎猜。4. 安装 vsftpd 服务器匿名、本地用户与 root 登录的边界文件传输是服务器初始化的另一个高频需求。vsftpd 是 Ubuntu 上最常用的 FTP 服务端之一安装简单、性能好、配置也不复杂但 root 登录和被动模式这两个点坑了不少人。先把最小可用流程跑起来再讲参数边界。4.1 安装启动 vsftpd 的最小可用流程# 安装 vsftpd sudo apt install -y vsftpd # 设置开机自启并启动 sudo systemctl enable --now vsftpd # 确认服务状态和监听端口 systemctl status vsftpd ss -tlnp | grep :21安装完成后 vsftpd 默认就会监听 21 端口。如果你执行完看到 21 端口没起来多半是配置文件里listenNO或者listen_ipv6YES与当前网络栈不匹配。18.04 的 vsftpd 默认配置同时涉及 IPv4 和 IPv6这个我在下一节参数表里细说。4.2 核心配置参数逐项说明主配置文件在/etc/vsftpd.confUbuntu 的默认配置已经适合本地用户访问的多数场景。我用这份配置来跑通本地用户和 root 登录# 编辑主配置 sudo nano /etc/vsftpd.conf配置文件中需要重点确认或修改的参数如下参数值作用与坑listenYES开启 IPv4 监听停止/etc/init.d/vsftpd与 systemd 的冲突写法listen_ipv6NO关闭 IPv6 监听双栈机器上YES可能导致 21 端口不监听anonymous_enableNO关闭匿名访问默认是 NO安全需要local_enableYES允许本地用户登录不开启则 root 和普通用户都无法登录write_enableYES允许写入不开这个上传文件必然报 550 Permission deniedlocal_umask022文件权限掩码022 生成 644 文件077 更安全chroot_local_userYES锁定用户在自己的家目录防止用户浏览整个文件系统allow_writeable_chrootYES允许对 chroot 根目录写入chroot 后家目录可写时必须开这个pasv_enableYES开启被动模式穿透 NAT 环境必需pasv_min_port40000/pasv_max_port40010被动模式端口段防火墙需要放行这段端口其中chroot_local_userYES配合allow_writeable_chrootYES这个组合非常容易漏。如果你只开了chroot_local_userYES用户会锁在根目录里但根目录默认不可写于是一登录就连不上或无法上传。看到了500 OOPS: vsftpd: refusing to run with writable root inside chroot()这个报错就是第二个参数没开。4.3 root 用户登录 vsftpd 的特别处理默认安装完的 vsftpdroot 是登不进来的因为 root 被写进了/etc/ftpusers这个黑名单文件。注意这个文件名很具有迷惑性——它是禁止使用 FTP 的用户列表不是允许使用 FTP 的用户列表。编辑时需要把 root 那行注释掉# 查看黑名单中是否有 root grep -n ^root /etc/ftpusers # 注释掉 root 那行行首加 # sudo sed -i s/^root/#root/ /etc/ftpusers如果配置文件里还启用了userlist_enableYES和userlist_denyYES那么/etc/vsftpd.userlist也是黑名单root 同样不能登录。反过来如果userlist_denyNO这个文件就变成白名单只有写进文件里的用户才能登录 FTP这适合只开放固定账户的场景。root 经过 chroot 之后家目录是/root如果allow_writeable_chrootYES没开而/root又是可写的也会触发前面那个500 OOPS错误。完整的 root 登录配置流程是# 1. 注释黑名单 sudo sed -i s/^root/#root/ /etc/ftpusers # 2. 如启用了 userlist确认没有把 root 当黑名单列出 sudo grep -n ^root /etc/vsftpd.userlist # 3. 改完配置后重启服务 sudo systemctl restart vsftpd5. 避坑SSH 连不上、FTP 传不了文件的常见问题排查前面三章把正向流程走完了但实际运维里反而是故障排查占了大半时间。我把这几件事里最常见的故障整理成一条条踩坑记录每条按现象、原因、解决三步写遇到问题可以直接对照查。5.1 SSH 连接超时或拒绝连接现象客户端执行ssh root服务器IP后一直卡住不动最后报Connection timed out或者直接提示Connection refused。原因两种报错对应不同的问题。Connection refused通常是 sshd 服务没有运行或端口不是 22Connection timed out通常是防火墙拦截或云安全组没放行 22 端口。18.04 上 ufw 默认可能是 inactive但如果你装系统后执行过ufw enable默认策略是拒绝入站SSH 就会超时。解决先在服务器本机执行以下命令逐层排查# 1. 确认 sshd 进程在跑 systemctl status ssh # 2. 确认 22 端口在监听 ss -tlnp | grep :22 # 3. 确认防火墙规则 sudo ufw status verbose # 4. 放行 SSH如果 ufw 是开启的 sudo ufw allow 22/tcp云服务器还要在控制台安全组里放行 TCP 22 端口这个层面和操作系统无关但最容易让人忽略。物理机则要检查机房网络是否对 22 端口做了限制。5.2 root 密码正确但 SSH 登录提示 Permission denied现象输入 root 密码后始终提示Permission denied, please try again.确认密码没有输错。原因这又回到第三章讲过的组合问题。要么PermitRootLogin是prohibit-password要么PasswordAuthentication被设为no。18.04 默认这两个值是prohibit-password和yes所以只改第一个就能让 root 用密码登录。另外云镜像的sshd_config.d/cloud-init.conf可能覆盖了主配置。解决备份后修改配置检查两处参数再sshd -t验证语法后重启sudo grep -E PermitRootLogin|PasswordAuthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf这个 grep 会把主配置和附加配置里的相关行一次性列出来哪个文件里写了什么一眼就能看清。5.3 FTP 能登录但列不出目录、传不了文件现象FileZilla 能输入用户名密码并成功登录但列目录时一直转圈最终超时报Failed to retrieve directory listing。原因这是 FTP 被动模式的典型故障。登录走的是 21 端口但列目录和传数据走的是随机高端口客户端没法主动与服务器建立数据连接。没有防火墙拦截时可能侥幸能通但一旦开了 ufw 或云安全组随机高端口就被挡住了。解决在 vsftpd.conf 中固定被动模式端口段并放行防火墙# 在 vsftpd.conf 末尾追加固定端口段 echo pasv_enableYES | sudo tee -a /etc/vsftpd.conf echo pasv_min_port40000 | sudo tee -a /etc/vsftpd.conf echo pasv_max_port40010 | sudo tee -a /etc/vsftpd.conf # 重启 vsftpd sudo systemctl restart vsftpd # 放行防火墙端口段 sudo ufw allow 40000:40010/tcp云服务器同样需要在安全组里放行这段端口。客户端这边记得把传输模式设为被动模式大部分 FTP 客户端默认就是被动模式但使用命令行ftp时默认是主动模式这也会产生类似问题。5.4 修改 sshd_config 后服务启动失败现象改完配置执行systemctl restart ssh系统没有任何提示但服务就是起不来或者直接报Job for ssh.service failed。原因配置语法错误最常见的是PermitRootLogin值写错比如写成without-password旧版本兼容这个值18.04 的 OpenSSH 7.6 仍然接受但会产生警告、参数行前后多余空格、或重复指定了同一参数且值冲突。解决先跑语法检查再重启这一条我在前面强调过一次这里再给一次完整排查路径# 语法检查指出具体错误行 sudo sshd -t # 如果语法检查通过但服务仍失败看日志 sudo journalctl -u ssh --since 5 minutes ago另一个隐蔽点来自Include /etc/ssh/sshd_config.d/*.conf这个目录下如果同时有多个文件文件名的字典序会决定加载顺序后加载的配置会用同一个参数值覆盖前面的配置。多文件管理时尽量把自定义配置写到99-local.conf确保最后加载、优先级最高。5.5 Ubuntu 18.04 apt update 连不上源现象执行sudo apt update时报无法解析archive.ubuntu.com或者连接超时、404 Not Found。原因Ubuntu 18.04Bionic Beaver已经结束标准支持官方源里的 18.04 目录被迁移到 old-releases 镜像服务器。如果系统时间不对或者 DNS 解析异常也会出现类似现象但 18.04 特有的情况就是源失效。解决将源地址从archive.ubuntu.com替换为old-releases.ubuntu.com并去掉所有-security和-updates之外的第三方源配置# 备份原有源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 用 sed 替换镜像地址 sudo sed -i s/archive.ubuntu.com/old-releases.ubuntu.com/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/old-releases.ubuntu.com/g /etc/apt/sources.list # 更新源 sudo apt update这个方案只对 18.04 适用更新的版本如果也遇到源失效那多半是网络问题而不是生命周期问题。做完这步之后可能仍然有个别软件包索引不完整但不影响apt install openssh-server vsftpd这类基础包安装。6. 验证链路从 SSH 到 FTP 的自检顺序与常用命令配置全部完成后建议按一套固定顺序把整条链路从头到尾验证一遍而不是只看服务状态是 running 就以为万事大吉。我自己的验证习惯是按端口、本地、远程三层递进哪一层卡住就立刻定位到具体环节。第一步确认端口监听和防火墙。执行ss -tlnp看 22 和 21 端口是否都在 LISTEN 状态再用sudo ufw status确认没有阻断。第二步本地验证在服务器本机执行ssh rootlocalhost和ftp localhost这一步能排除网络因素纯粹验证服务端配置是否正确。第三步才是远程验证从你的客户端机器执行同样的命令。远程验证时用ssh -v root服务器IP可以输出详细的握手日志debug1: Authentications that can continue:这一行会列出当前允许的认证方式如果只有publickey就说明密码认证没开。FTP 侧推荐用lftp代替命令行ftp退出码和报错信息更清晰# 用 lftp 连接并测试上传下载 lftp root服务器IP lftp ls lftp put /etc/hostname lftp quit关于 SSH 配置还有一个实用技巧18.04 的 sshd 支持Include机制把自定义配置放到/etc/ssh/sshd_config.d/99-local.conf里比直接改主配置更利于后续升级和回滚。主配置保持默认所有个性化设置集中在 99 号文件里排查时只需看这一个文件。我吃过一次亏给一台公网服务器配了PermitRootLogin yes加上弱密码第二天看日志全是爆破尝试虽然没破进来但冷汗直流。现在的习惯是公网机器一律prohibit-password只允许密钥登录密码认证全关内网实验机才放宽用密码。这个习惯也建议你直接复制过去希望帮到你。本文还有配套的精品资源点击获取
返回列表