“su”命令如何工作?

GNU*_*eek 3 linux shell su

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

roa*_*ima 5

su关于这一点,手册页非常清楚:

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

-s, --shell SHELL将被调用的 shell。

-m, -p, --preserve-environment保留当前环境 [...]

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(不推荐)