本文主要是为了解决多用户在同一台开发板上开发时,导致的 GitHub 等 SSH key 混乱的问题。
Linux 系统多用户
# 切换到管理员权限
sudo su
# 创建用户 wfy(会自动创建 home 目录)
adduser wfy
# 系统会提示设置密码,输入 1(注意:Ubuntu 默认要求密码复杂度,简单密码可能需要强制确认)
# 按提示完成用户信息设置(可直接回车跳过)
# 将 wfy 添加到 sudo 组
usermod -aG sudo wfy
后续使用 VS Code 或者 cmd 进行 SSH 连接时,使用新的账户即可登录。
GitHub SSH key 生成
使用新用户登录后,执行以下命令:
ssh-keygen -t ed25519 -C "email address" -f ~/.ssh/id_rsa_github
在 /home/wfy/.ssh 目录下会生成 2 个文件:
- 私钥:
id_rsa_github - 公钥:
id_rsa_github.pub
为了让 Git 操作自动使用该用户的密钥,需要在用户的 SSH 配置中指定密钥与 GitHub 的关联。
vim ~/.ssh/config
新增如下内容:
# GitHub 配置(wfy 用户)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github # 指向当前用户的私钥
然后修改文件权限:
chmod 600 ~/.ssh/config
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa_github # 私钥必须是 600 权限
将 ~/.ssh/id_rsa_github.pub 的内容添加到 GitHub 账户的设置中。
我们可以进行连接测试:
wfy@pat-desktop:~$ ssh -T git@github.com
Hi Hachimi-Manbo! You've successfully authenticated, but GitHub does not provide shell access.
用户权限
在新用户下,使用 sudo su 可以访问整台开发板上的所有内容,但是不推荐这样做。
如果调用一些系统库时出现问题,可以先检查新用户的 .bashrc 文件。
为了更好地实现多用户隔离,建议添加用户组。
在默认情况下,/usr 和 /opt 等系统路径是共享的,不需要额外操作。
新用户可使用命令 ls -ld /usr/include 进行验证,输出应为:drwxr-xr-x。
但是对于初始用户中的一些第三方库(如 livox_lidar_sdk 等),需要对用户权限进行特别处理。
这里我们使用用户组的方法,先新建一个用户组,用于统一管理权限。操作前先确认系统已存在的用户组:
wfy@ubuntu:~$ groups
wfy sudo audio video render i2c gdm weston-launch gpio pat_group
如果是首次创建,先新增用户组:
sudo groupadd pat_group
然后将所有需要共享权限的用户加入该组:
sudo usermod -aG pat_group wfy
sudo usermod -aG pat_group wuba
将用户级开发目录的组权限开放为读 + 执行。
这里需要注意:尽量不要递归地设置整个 /home/pat 目录的权限,因为这样会破坏 .ssh 目录密钥文件的安全权限,导致 GitHub 的 SSH 连接失效。
如果其他用户已经完成了下面的操作,你不需要再重复进行。
# 1. 仅修改需要共享的 Deps 目录(及子目录/文件)的所属组
sudo chgrp -R pat_group /home/pat/Deps
# 2. 仅给 Deps 目录添加组 rx 权限
sudo chmod -R g+rx /home/pat/Deps
# 3. 给 /home/pat 目录添加组 rx 权限(让 wfy 能进入 pat 的家目录),但不递归(保留 .ssh 等目录的权限)
sudo chgrp pat_group /home/pat
sudo chmod g+rx /home/pat
# (可选)如果 pat 用户的 .ssh 权限已被破坏,执行以下命令恢复
# 如果还未创建 .ssh 等内容,无需修改,但是注意后面用户不要修改 .ssh 权限
chmod 700 /home/pat/.ssh
chmod 600 /home/pat/.ssh/*
chmod 644 /home/pat/.ssh/*.pub # 公钥文件可以是 644
操作完成后,执行 reboot 重启系统。
进行权限测试:
# 测试系统级头文件
cat /usr/include/stdio.h
# 测试用户级开发库,应该能读取到内容
cat /home/pat/Deps/ws_livox/install/setup.bash
其他设置
.bashrc 文件可能需要复制过来。
复制前,记得先检查主用户中的 .bashrc 是否涉及新用户不可访问的绝对路径。
# 追加内容到现有用户的 bashrc
cat /home/pat/.bashrc >> ~/.bashrc
# 确保 .bashrc 属于 wfy 用户和用户组
# .bashrc 这类私有配置文件推荐用 wfy:wfy 用户私有组
# 共享的开发文件可根据需求用 wfy:pat_group
sudo chown wfy:wfy ~/.bashrc
# 确保权限正确(默认 644 即可)
chmod 644 ~/.bashrc
评论