每次 ssh 登录时以 root 身份执行脚本

hjp*_*r92 7 linux ssh debian bash

有没有一种可能的方法可以执行脚本,例如abc.shroot每次通过 SSH 登录我的系统时都以用户身份吗?

我经历过一个类似的问题,它说将脚本执行添加到.bashrc文件中。这没有多大帮助,因为我必须将其添加到每个用户的配置文件中。而且,他们仍然有能力将其删除。

以 root 身份执行并不像拒绝用户停止其执行的权力那么重要。操作系统是 debian,如果这有任何帮助的话。

hil*_*rge 3

这是一个迟来的答案,但您可以在每次登录时执行它,并通过执行以下操作以 root(或您想要的任何其他用户)身份运行它:

  1. 使用您想要以 root 身份运行的命令编写脚本,并将其保存为例如/path/to/root-script.sh.
  2. 让 root(或所需的用户)成为脚本的所有者。

    chown root:root /path/to/root-script.sh`
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在脚本上设置 setuid 位以及其他所需的权限。(确保它不是普遍可写的等)

    chmod 4755 /path/to/root-script.sh
    
    Run Code Online (Sandbox Code Playgroud)

    4方法设置 setuid 位,这将导致脚本以脚本所有者的身份运行。这是用来sudo确保以 root 身份执行的。

  4. root-script.sh为了确保它在每次登录时运行,请从 中运行 Sticky-bit-set /etc/profile/etc/profile无论用户使用什么 shell,都应该运行。请注意,这仅适用于交互式登录。

编辑。正如 Scott 在评论中指出的,该解决方案通常不适用于具有 Perl < 5.12.0 之外的任何 shebang 脚本的任何现代系统。现代内核会忽略带有 setuid 位的脚本,除非它们已被修补,出于安全原因,不建议这样做。

相反,setuid 通常仅适用于已编译的二进制文件和 可以使用(Perl <5.12.0 ) 和suidperl

这个 Unix/Linux SE 问题彻底回答了为什么 shebang 脚本会忽略 setuid,并总结了 TL;DR:

Setuid shebang 不安全,但通常被忽视。如果您使用特权运行程序(通过 sudo 或 setuid),请编写本机代码或 perl,或者使用清理环境的包装器启动程序(例如带有 env_reset 选项的 sudo)。

  • (1) 在正确获取位的*名称*方面做得很好;“1000”位确实是粘性位。然而,这与 setuid 位(即“4000”)不同,后者导致程序作为程序所有者运行。(2)但这并不重要。自上个千年以来,setuid 位就不再适用于脚本了。(3) 此外,如果您将文件 chmod 为 `1750`(具有 `root:root` 所有权),则只有 root 或 root 组中的用户才能执行它。 (2认同)