拓冰建站拓冰建站
首页 / 资讯中心 / 正文

树莓派安全入门:从默认pi用户到权限管理与安全加固

1. 从“pi”用户说起树莓派OS的默认身份与安全基石如果你刚拿到一块树莓派兴奋地烧录好系统第一次启动系统大概率会引导你创建一个用户。但你可能不知道在树莓派官方操作系统Raspberry Pi OS旧称Raspbian的“无头”Headless即无桌面环境版本或者某些特定安装方式下系统其实自带了一个开箱即用的默认用户。这个用户就是pi其默认密码是raspberry。这个设定对于无数开发者、教育者和极客来说是踏入树莓派世界最熟悉的敲门砖。它极大地简化了初始配置特别是当你需要通过SSH远程访问一块没有连接屏幕的树莓派时pi用户的存在意味着你无需任何本地交互就能直接登录。然而这个为了方便而生的设计也带来了一个持续近十年的经典安全问题使用默认凭证的pi用户是互联网上暴露的树莓派设备最普遍的入侵点。无数安全意识薄弱的树莓派被恶意脚本扫描并攻破变成了“肉鸡”。因此围绕pi用户的管理、强化乃至弃用成为了树莓派使用者从入门到精进的必修课。这不仅仅是修改密码那么简单它涉及到Linux用户权限管理、系统安全策略和服务配置等多个层面。理解pi用户就是理解如何安全地驾驭你的树莓派。2. 深入“pi”用户权限、家目录与默认环境解析pi用户并非一个拥有至高无上权限的账户。在标准的Raspberry Pi OS安装中pi是一个普通的非root用户但它默认被加入了多个重要的用户组这赋予了它远超普通用户的特权。2.1 默认用户组与权限边界我们可以通过groups pi命令来查看pi用户所属的组。典型输出如下pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi这些组别赋予了pi用户以下关键能力sudo: 这是最关键的一个组。它允许pi用户使用sudo命令以超级用户root权限执行命令。这是进行系统级配置和软件安装的基础。gpio,i2c,spi: 这些组直接赋予了pi用户访问树莓派GPIO引脚、I2C和SPI总线的权限无需root。这对于硬件编程和物联网项目至关重要。video,audio: 允许访问视频和音频设备确保图形界面和声音播放正常工作。dialout: 允许访问串行端口用于连接老式调制解调器或某些串口设备如某些Arduino。adm: 允许读取系统日志文件如/var/log下的文件。这种设计体现了“权限最小化”原则的一种折中pi用户本身不是root但可以通过sudo临时提权同时它被直接赋予了进行硬件实验所需的特定权限避免了新手在操作硬件时频繁使用sudo或切换至root的麻烦。2.2 家目录结构与默认配置pi用户的家目录位于/home/pi。首次启动后这里包含一些默认的目录和隐藏的配置文件。其中.bashrc和.profile文件定义了该用户的Shell环境变量和别名。例如你可能会发现一些为树莓派优化的命令别名。更重要的是许多树莓派相关的软件和工具会默认将配置文件或数据存储在这里。例如早期的raspi-config工具的部分设置可能关联于此。理解这个目录是自定义你的工作环境如设置PATH、别名、脚本的起点。2.3 “pi”用户与桌面环境在带有桌面环境的Raspberry Pi OS版本中pi用户也是自动登录到图形界面的默认账户。这意味着系统启动后直接进入pi的桌面无需输入密码。这虽然方便但从安全角度看特别是在设备可能被物理接触的场景下是一个风险点。你可以在系统设置中关闭自动登录要求输入密码。3. 首要安全实践修改默认密码与禁用“pi”用户使用默认密码raspberry的pi用户就像把家门钥匙放在公认的脚垫下面。互联网上持续有扫描器在探测22端口SSH和尝试用pi/raspberry登录。因此你的第一步必须是改变这个状态。3.1 修改“pi”用户密码这很简单在终端中执行passwd命令以pi用户登录后根据提示输入当前密码raspberry并设置一个强健的新密码即可。passwd注意强密码建议包含大小写字母、数字和特殊符号长度至少12位。避免使用字典单词、生日等易猜信息。3.2 创建一个新的管理员用户并禁用“pi”更彻底的安全做法是创建一个全新的、名称不为人知的管理员用户然后禁用或删除pi用户。这能有效抵御针对“pi”用户名的自动化攻击。步骤1创建新用户并赋予sudo权限sudo adduser alice # 创建一个名为alice的新用户按提示设置密码等信息 sudo usermod -aG sudo alice # 将alice加入sudo组步骤2测试新用户退出当前pi用户的SSH会话用新用户alice和其密码重新登录。登录后测试sudo权限是否生效例如sudo ls /root。步骤3禁用“pi”用户确认新用户可以正常工作后回到alice的会话禁用pi用户。不要直接删除先禁用是更稳妥的做法。sudo passwd -l pi # 锁定pi用户的密码使其无法登录或者你也可以选择删除pi用户但保留其家目录/home/pi以供参考或迁移数据sudo deluser --remove-home pi # 删除用户并同时删除其家目录谨慎 # 或 sudo deluser pi # 仅删除用户保留/home/pi目录 sudo rm -rf /home/pi # 手动删除家目录如果需要实操心得在生产环境或长期运行的设备上我强烈建议执行此操作。即使修改了密码pi这个用户名本身仍然是攻击者的明确目标。使用一个独特的用户名能大幅降低被自动化脚本命中的概率。在禁用pi前务必检查是否有系统服务或cron任务以pi用户身份运行并做好迁移。4. 权限管理进阶理解sudo与用户组配置在树莓派上进行开发尤其是涉及硬件或系统配置时与权限打交道是家常便饭。pi用户的便利性很大程度上源于其预设的sudo权限和硬件访问组。4.1 Sudoers文件权限控制的钥匙sudo的配置核心是/etc/sudoers文件。永远不要直接用文本编辑器如nano编辑这个文件因为语法错误可能导致所有用户都无法使用sudo。正确的工具是visudo命令它会在保存时进行语法检查。sudo visudo在树莓派上通常你会看到这样一行它赋予了sudo组的所有成员无密码使用sudo的权限在最新版本中出于安全考虑可能已默认需要密码%sudo ALL(ALL:ALL) ALL # 或无密码版本不推荐 # %sudo ALL(ALL:ALL) NOPASSWD: ALL%sudo代表sudo用户组。ALL可以在所有主机上执行。(ALL:ALL)可以以任何用户和任何用户组的身份运行命令。最后的ALL可以运行所有命令。你可以为特定用户定制规则。例如只允许用户alice无需密码重启和更新软件包但执行其他sudo命令仍需密码alice ALL(ALL) NOPASSWD: /sbin/reboot, /usr/bin/apt update, /usr/bin/apt upgrade alice ALL(ALL:ALL) ALL4.2 管理硬件访问组当你想让一个新用户比如bob也能直接操控GPIO而不需要每次都在命令前加sudo你就需要将他加入相应的组。sudo usermod -aG gpio,i2c,spi bob-aG参数表示“追加到以下组”避免覆盖用户已有的其他组。修改后用户需要重新登录才能使新的组权限生效。你可以通过/etc/group文件查看所有组的成员列表或者用getent group gpio查看gpio组的成员。4.3 服务以特定用户运行如果你编写了一个守护进程比如用Python写的物联网数据采集脚本并希望它在系统启动时自动运行你需要决定以哪个用户身份运行它。使用pi用户是不安全的特别是如果这个服务存在漏洞。最佳实践是创建一个专用的、权限受限的系统用户来运行服务。例如为你的数据采集服务创建一个用户sudo adduser --system --no-create-home data_collector然后在systemd服务单元文件.service中指定[Service] Userdata_collector Groupdata_collector ExecStart/usr/bin/python3 /path/to/your_script.py这样即使服务被攻破攻击者获得的权限也仅限于这个低权限的data_collector用户无法危及整个系统。5. 常见问题排查与“pi”用户相关的故障解决在实际操作中你可能会遇到一些与用户和权限相关的问题。以下是一些典型场景和排查思路。5.1 无法SSH登录提示“Permission denied”这是最常见的问题之一。排查链路如下检查密码确保输入正确。注意大小写。如果忘记pi用户密码你需要通过物理访问连接显示器和键盘或修改SD卡上的系统文件来重置。检查SSH服务状态在树莓派上通过物理访问运行sudo systemctl status ssh确认服务是active (running)。如果未开启用sudo systemctl enable --now ssh启用。检查用户状态运行sudo passwd -S pi查看pi用户密码状态。如果显示L或LK表示密码被锁定需要用sudo passwd -u pi解锁。检查SSH配置查看/etc/ssh/sshd_config确认PasswordAuthentication是否设置为yes允许密码登录。修改后需重启SSH服务sudo systemctl restart ssh。检查PAM配置极少数情况下Pluggable Authentication Module (PAM)配置可能阻止登录。但新手很少改动这里。5.2 执行命令时提示“用户不在 sudoers 文件中”当你用新创建的用户执行sudo命令时遇到此错误说明该用户未被正确地加入sudo组。解决方案你需要用另一个拥有sudo权限的用户比如你还未删除的pi用户来执行# 用pi用户登录或切换 sudo usermod -aG sudo new_username然后让新用户重新登录。切换用户可以使用su - new_username但更好的方式是断开SSH重新连接。5.3 硬件操作GPIO/I2C报权限错误即使以pi用户或已加入相应组的用户操作有时仍会报错“Permission denied”或“Unable to open /dev/gpiomem”。原因1未加入正确的组。用groups命令确认当前用户是否在gpio、i2c等组中。原因2需要重新登录。将用户加入新组后当前的Shell会话并不会立即获得新组的权限。你必须退出SSH会话重新登录或者启动一个新的登录Shell如执行su - $USER。原因3库或工具使用了错误的设备节点。一些旧的或特定的Python库如RPi.GPIO可能需要访问/dev/mem这需要root权限。更现代的库如gpiozero默认使用/dev/gpiomemgpio组的成员就有权限。确保你使用的库和方式是匹配的。临时解决方案不推荐长期使用用sudo运行你的脚本。但这违背了权限最小化原则。5.4 删除文件或目录时提示“拒绝访问”这与Windows下遇到的“Error 5: Access is denied”或Linux下的“Permission denied”本质相同。在树莓派上你可能在尝试删除/home/pi目录或其他系统目录时遇到。权限不足你当前用户对该文件/目录没有写权限。使用ls -la查看所有者和权限。如果需要删除你可能需要sudo。文件被占用可能有进程正在使用该文件或目录。例如你的当前终端正位于该目录内或者某个程序打开了其中的文件。关闭相关进程或切换到其他目录再尝试删除。可以使用lsof | grep /path/to/file查找占用文件的进程。文件系统只读在某些系统错误如SD卡损坏后文件系统可能会被挂载为只读模式。运行mount | grep “on / ”检查根分区的挂载选项。如果是roread-only表明是只读状态需要排查SD卡健康或系统错误。6. 自动化部署与“pi”用户的最佳实践当你需要批量部署多台树莓派或者在CI/CD流程中自动化配置时如何处理默认用户就显得尤为重要。6.1 使用云初始化cloud-init从Raspberry Pi OS Bullseye开始官方支持了cloud-init。这是一个行业标准的跨平台云实例初始化工具。你可以在首次启动前通过修改SD卡boot分区下的user-data文件来预配置用户、密码、SSH密钥、软件包等。一个典型的user-data配置可以禁用pi用户并创建新用户#cloud-config users: - name: admin sudo: ALL(ALL) NOPASSWD: ALL shell: /bin/bash ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2E...你的公钥 lock_passwd: true # 禁用密码登录仅允许SSH密钥 # 禁用默认的pi用户 system_info: default_user: name: pi lock_passwd: true sudo: []这样设备首次启动后pi用户就被锁定只能通过密钥以admin用户登录。这是最安全、最自动化的初始化方式。6.2 使用Ansible等配置管理工具如果你已经有一台配置好的树莓派“黄金镜像”或者需要在设备上线后统一管理可以使用Ansible。首先你需要确保目标树莓派上有一个能用于SSH和sudo的用户初期可能还是pi。一个Ansible Playbook片段用于创建新用户并禁用pi- hosts: raspberry_pis become: yes tasks: - name: Create new admin user user: name: {{ new_username }} groups: sudo append: yes shell: /bin/bash password: {{ new_user_password | password_hash(sha512) }} state: present - name: Deploy SSH key for new user authorized_key: user: {{ new_username }} state: present key: {{ lookup(file, /path/to/local/public_key.pub) }} - name: Disable pi user password login user: name: pi password_lock: yes - name: Remove pi user from sudo group (optional) user: name: pi groups: append: no运行此Playbook后你就可以用新用户管理设备并大幅降低pi用户带来的风险。6.3 镜像预配置与安全加固在制作自定义系统镜像分发给他人之前务必进行安全加固更改默认密码在打包镜像前务必为pi用户设置一个强密码或者直接锁定。禁用SSH密码登录在/etc/ssh/sshd_config中设置PasswordAuthentication no和PermitRootLogin no强制使用SSH密钥认证。移除或锁定pi用户如前所述创建新的管理用户并禁用pi。更新所有软件包sudo apt update sudo apt full-upgrade -y。启用防火墙安装并配置ufw只开放必要的端口如SSH的22端口。清理历史记录清理bash历史等敏感信息。pi用户是树莓派生态的一个标志性起点它代表了易用性和开放性。但随着你的项目从实验走向生产从个人玩具变成网络中的一员有意识地管理它、超越它是迈向成熟系统管理员和开发者的重要一步。安全不是一次性的任务而是一种贯穿设备生命周期的习惯。从处理好这个默认用户开始为你树莓派上的每一次创新筑起第一道可靠的防线。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门