UNIX下的real user ID /effective user ID/saved set-user ID总结

本文详细解析了APUE2中关于用户ID和组ID变更的机制,包括setuid和setgid函数的使用及限制条件。特别强调了在不同情况(如set-user-ID位开启或关闭)下realuserID、effectiveuserID和savedset-userID的变化。

对于apue2中的8.11 Changing user IDs and Group IDs 重点总结如下:

 #include <unistd.h>

int setuid(uid_t uid);

int setgid(gid_t gid);

Both return: 0 if OK, 1 on error

在apue2中有如下说明:

1.只有超级用户进程才能改变real user ID.一般情况下real user ID在我们登录的时候由login程序设置,随后将不再改变.

2.effective user ID被函数exec设置当且仅当程序文件设置了set-user-ID位.我们可以调用setuid函数在任何时候设置effective user ID为real user ID 或者saved set-user ID.

3.saved set-user ID通过函数exec复制了effective user ID.

所以最终的结果如下图所示:

ID

exec

setuid(uid)

set-user-ID 位关闭

set-user-ID 位开启

超级用户

普通用户

real user ID

不变

不变

设置为uid

不变

effective user ID

不变

设置为程序文件的user ID

设置为uid

设置为uid

saved set-user ID

复制effective user ID

复制effective user ID

设置为uid

不变

 

<think>首先,用户的问题是关于解决“无法从 /c/User/Administrator/.ssh/id_rsa 加载身份公钥”的问题。从引用中可以看到,这是Windows系统上的SSH密钥问题。 回顾引用内容: - 引用[1]显示了在生成SSH密钥时出错:"Saving key "//.ssh/id_rsa" failed: No such file or directory"。这可能是由于文件系统只读或路径不正确。 - 引用[2]显示尝试覆盖现有密钥文件时,用户输入了'y',但路径是/c/Users/Administrator/.ssh/id_rsa。 - 引用[3]建议检查SSH代理中的密钥,添加密钥,并检查配置文件。 - 引用[4]提到Windows下SSH出现权限问题,建议使用git bash而不是cmd或powershell。 用户的具体错误是“无法从 /c/User/Administrator/.ssh/id_rsa 加载身份公钥”。注意用户写的是“/c/User/Administrator”,但标准路径应该是“/c/Users/Administrator”(有's')。这可能是打字错误或实际问题的一部分。 关键点: - 错误表明无法加载公钥,可能是因为文件不存在、路径错误、权限问题或路径拼写错误。 - 在Windows上,SSH密钥通常存储在C:\Users\<username>\.ssh目录下。 我的回答需要: - 使用中文,因为系统指令指定“使用中文回答”。 - 结构化清晰,逐步解决问题。 - 引用相关信息末尾添加引用标识,如[^1]。 - 生成相关问题(系统指令第5点)。 - 确保回答真实可靠。 步骤式解决方案: 1. **确认路径和文件存在**:确保密钥文件存在且路径正确。用户提到了“/c/User/Administrator/.ssh/id_rsa”,但应该是“/c/Users/Administrator/.ssh/id_rsa”。指导用户检查目录和文件。 2. **检查文件权限**:Windows SSH可能有权限问题。引用[4]提到避免使用cmd/powershell,改用git bash。 3. **验证密钥配置**:使用ssh-add添加密钥(引用[3])。 4. **生成新密钥或覆盖**:如果文件不存在或损坏,重新生成密钥(引用[1]和[2])。 5. **检查SSH配置文件**:确保~/.ssh/config正确设置IdentityFile(引用[3])。 组织回答: - 引言:简述问题原因。 - 步骤:逐步指导解决。 - 生成相关问题。 生成相关问题: 基于用户问题,相关问题可能包括: 1. 如何正确生成SSH密钥在Windows上? 2. SSH密钥权限问题如何解决? 3. 如何调试SSH连接问题? 4. Git Bash vs. CMD/Powershell使用SSH的区别? 确保LaTeX格式正确:虽然问题涉及SSH,可能不需要数学表达式,但如果有变量如路径,可以内联使用$...$,例如路径名。 最终回答结构: - 标题或开头:解释问题。 - 步骤列表。 - 结尾:生成相关问题。 </think>### 解决“无法从 /c/User/Administrator/.ssh/id_rsa 加载身份公钥”问题 此问题通常是由于SSH密钥文件路径错误、文件缺失或权限问题导致的。Windows系统中,SSH默认密钥路径为 `/c/Users/Administrator/.ssh/id_rsa`(注意:`Users` 而非 `User`)。根据引用信息,以下是结构化解决方案,逐步操作: #### 步骤1: 确认路径和文件名是否正确 - **问题分析**:用户提到路径为 `/c/User/Administrator/.ssh/id_rsa`,但标准Windows路径应为 `/c/Users/Administrator/.ssh/id_rsa`(多一个 `s`)。拼写错误会导致系统找不到文件。 - **操作步骤**: 1. 打开文件资源管理器,导航到 `C:\Users\Administrator\.ssh`。 2. 检查目录是否存在,以及其中是否包含 `id_rsa`(私钥)和 `id_rsa.pub`(公钥)文件。 3. 如果路径错误或目录缺失,手动创建目录: - 使用命令行(以管理员身份运行): ```bash mkdir C:\Users\Administrator\.ssh ``` 4. 验证路径:确保后续命令使用正确路径 `/c/Users/Administrator/.ssh/id_rsa`。 #### 步骤2: 生成或覆盖SSH密钥文件 - **问题分析**:密钥文件可能未生成或因权限失败而缺失(如引用[1]所示)。引用[2]建议覆盖现有文件时需谨慎操作。 - **操作步骤**: 1. 使用Git Bash(推荐替代cmd/powershell,避免权限问题,见引用[4]): - 右键点击项目文件夹,选择“Git Bash Here”。 2. 运行密钥生成命令: ```bash ssh-keygen -t rsa -C "your_email@example.com" ``` - 当提示“Enter file in which to save the key”时,输入正确路径:`/c/Users/Administrator/.ssh/id_rsa`。 - 如果文件已存在,输入 `y` 覆盖(如引用[2])。 - 密码留空(直接回车)。 3. 检查输出:确保显示 `Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa`。 #### 步骤3: 添加密钥到SSH代理并检查权限 - **问题分析**:SSH代理未加载密钥或权限错误会导致加载失败(引用[3]和[4])。 - **操作步骤**: 1. 启动SSH代理(在Git Bash中): ```bash eval $(ssh-agent -s) ``` 2. 添加密钥到代理: ```bash ssh-add /c/Users/Administrator/.ssh/id_rsa ``` - 如果报错“bad permissions”,修复文件权限: ```bash chmod 600 /c/Users/Administrator/.ssh/id_rsa ``` 3. 验证密钥是否加载: ```bash ssh-add -l # 应列出添加的密钥 ``` #### 步骤4: 检查SSH配置文件 - **问题分析**:配置文件可能指定错误密钥路径(引用[3])。 - **操作步骤**: 1. 打开配置文件: ```bash nano ~/.ssh/config ``` 2. 确保包含以下内容(如引用[3]): ``` IdentityFile ~/.ssh/id_rsa ``` 3. 保存(按 `Ctrl+O`,回车确认)并退出(按 `Ctrl+X`)。 #### 步骤5: 测试连接 - 运行测试命令: ```bash ssh -T git@github.com # 示例:测试GitHub连接 ``` - 预期输出:`Hi username! You've successfully authenticated...` **注意事项**: - 优先使用Git Bash而非cmd/powershell,以避免Windows权限问题(引用[4])。 - 如果问题持续,尝试重启系统或重新安装Git for Windows。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值