“su”命令如何工作?

“su”命令如何工作?

我试图在不查看任何 bash 源代码的情况下编写自己的 shell,但有一件事我无法做到。每当我从任何自定义 shell(包括我自己的 shell)运行“su”时,它都会获取我的密码并将我带到 bash 提示符,其中的哈希值指示 root 权限。我输入了代码,以确保我的 shell 在具有 root 权限时会给出哈希提示,但这只是在以 root 身份运行时,因为每当我尝试从 shell 中使用 su 成为 root 时,它都会强制我执行 bash。有没有什么方法可以让我自己提供su,甚至可能是我的自定义su可执行文件,它只要求root密码并为您提供特权,将您送回您正在使用的shell而不带您进入bash?多谢。

答案1

的手册页su在这一点上非常清楚:

/etc/passwd该命令将由为目标用户指定的 shell 执行。

-s, --shell 外壳将被调用的 shell。

-m、-p、--保留环境保护当前环境[...]

bash调用后进入 shell 的原因su -是这是 root 的默认 shell。我可以看到三种覆盖此默认 shell 的方法:

  1. 打电话su -s /path/to/your/shell而不是仅仅su
  2. 确保export SHELL=/path/to/yourshell已设置然后调用su -m
  3. 更改 root 的默认 shell /etc/passwd(不推荐)

答案2

有没有什么方法可以让我自己提供su,甚至可能是我的自定义su可执行文件,它只要求root密码并为您提供特权,将您送回您正在使用的shell而不带您进入bash?多谢。

不。Unix 中的特权提升机制涉及新进程的执行。该su可执行文件有一个特殊的权限位,称为“set-user-ID 位”或“setuid”,它会导致该可执行文件执行时,进程的有效用户 ID 就是该可执行文件的所有者的 ID。

如果su身份验证成功,它将执行一个新的 shell。

在同一 shell 中拥有超级用户权限的常用方法是使用该sudo实用程序在特权模式下运行各个命令。

如果您经常管理某些计算机,您可以设置一个自定义环境供您作为根用户使用。当您成为 root 后,只需执行您喜欢的 shell,并在 root 的主目录中设置其配置文件。

$ su
password:
root # exec /path/to/favorite/shell

如果您是老板,您可以将该 shell 设置为 root 的登录 shell。

相关内容