![以 root 用户身份登录时运行脚本,但有一个陷阱](https://linux22.com/image/963475/%E4%BB%A5%20root%20%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E7%99%BB%E5%BD%95%E6%97%B6%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%8C%E4%BD%86%E6%9C%89%E4%B8%80%E4%B8%AA%E9%99%B7%E9%98%B1.png)
我正在尝试在用户登录时以 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
您可以将其输入
/etc/profile
,并且它会在任何成功登录时执行。为所有用户添加该脚本文件的执行权限。打开终端并输入以下命令:
sudo chmod ugo+x script