以 root 用户身份登录时运行脚本,但有一个陷阱

以 root 用户身份登录时运行脚本,但有一个陷阱

我正在尝试在用户登录时以 root 身份运行 PHP 脚本。PHP 脚本将 Samba 共享添加到 Samba 配置中,因此需要 root 权限。这里唯一的问题是用户尚不存在。该系统与活动目录集成。因此,当用户首次登录时,将在 下为他们创建一个主目录/home/DOMAIN/username

我发现这个问题这似乎是获得我想要的东西的正确方法,但由于我不知道用户的名字,所以我遇到了语法问题。

会不会是这样的:

ALL ALL=(ALL) NOPASSWD: /home/DOMAIN/*/createSambaShare.php

目前看来这不起作用。有人有什么想法或“脚本化”方法可以在用户登录时添加 Samba 共享吗?

由于我对 进行了其他更改/etc/skel,我只需在其中的 .profile 中添加运行 PHP 脚本所需的 bash。然后将其复制到“新”用户的主目录中,并尝试运行 PHP 脚本。但失败了,因为这些不是特权用户。

更改 PHP 脚本的权限不会有帮助。它需要以 sudo 身份运行,因为它会打开 Samba 配置文件进行写入。让任何用户运行 PHP 脚本都会导致 PHP 错误。

Samba指令homes不适用于我的用例。我需要 Samba 共享在服务器上存在时就存在,即使他们没有登录。

答案1

不要将脚本放在用户的主目录中。相反,将其放在固定位置。如果脚本需要一些用户相关的参数,请让脚本从文件中读取这些参数 — 但您甚至不需要这样做,因为/etc/skel无论如何您都是从中复制脚本。

如果您允许用户以提升的权限在其主目录中运行脚本,那么他们可以用另一个脚本替换该脚本。因此,从安全角度来看,您提出的规则相当于

ALL ALL=(ALL) NOPASSWD: /etc/skel/createSambaShare.php
MANY ALL=(ALL) NOPASSWD: ALL

其中MANY是任何主目录位于 下的用户/home/DOMAIN。(好吧,除非用户的主目录由 root 拥有,用户无法写入,并且脚本也不能由用户写入或拥有。但那将非常不寻常。)

另外,我建议不要ALL在用户规范中使用。将规则限制在一个组中。

%sambasharers ALL=(ALL) NOPASSWD: /usr/local/bin/createSambaShare.php

答案2

  1. 您可以将其输入/etc/profile,并且它会在任何成功登录时执行。

  2. 为所有用户添加该脚本文件的执行权限。打开终端并输入以下命令:

    sudo chmod ugo+x script
    

相关内容