以 root 身份运行 /etc/profile.d/script.sh

以 root 身份运行 /etc/profile.d/script.sh

我有一个/etc/profile.d/script.sh包含三行的脚本:

ifconfig ens5f5 down
hw ether xx:xx:xx:xx:xx:xx
ifconfig ensf5f

当任何用户登录时,我需要以 root 身份运行此脚本。

这里写着所有脚本都/etc/profile.d/script.sh以 root 身份执行:https://stackoverflow.com/questions/47997365/execute-scripts-in-etc-profile-d-at-startup-as-root

我认为这不适用于 Ubuntu 18.04,因为我因缺乏权限而收到错误。

如果您不理解这些命令,我​​正在尝试永久更改 MAC 地址。我知道,正确的方法是更改​​文件/etc/network/interfaces,但我在配置该文件时遇到了很多麻烦。

答案1

/etc/profile*脚本不能以 root 身份运行。这些脚本应由您用户下运行的登录 shell 来获取。

但是,正如您所提到的,您的脚本方法并不是更改 MAC 地址的好方法。无论如何,我最后会描述一个可能的解决方案,以使脚本正常工作。

从 17.10 版开始,Ubuntu 使用netplan来配置网络,它忽略了/etc/network/interfaces旧版ifupdown.Netplan 使用的文件,而是在/etc/netplpan/01-netcfg.yaml其中进行配置。对于 MAC 地址被覆盖的接口,其内容可能如下所示:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      macaddress: 12:34:56:78:AB:CD
      dhcp4: true

macaddress另请参阅配置键的文档https://netplan.io/reference#common-properties-for-all-device-types


您可以允许每个人以无密码的 root 身份运行以下命令的脚本sudo- 确保您正确遵循以下步骤,否则您可能会遇到sudo命令中断或权限提升漏洞:

  • 将您的三个命令放在单独的脚本文件中(例如/usr/local/bin/mac-change.sh)。确保随时以 root 身份运行此脚本都是安全的。
  • 使该文件归 root 用户所有(sudo chown root: /usr/local/bin/mac-change.sh
  • 设置适当的权限:所有人可执行,仅所有者可写,root(sudo chmod 755 /usr/local/bin/mac-change.sh
  • 编辑 sudoers 文件,以允许每个人以 root 身份运行该单个脚本而无需密码,方法是键入sudo visudo以打开 sudoers 编辑器并在文件底部附近添加以下行:

    ALL ALL=(root) NOPASSWD: /usr/local/bin/mac-change.sh
    

现在每个人都应该能够运行sudo mac-change.sh或而sudo /usr/local/bin/mac-change.sh无需输入密码。然后您可以将其作为一行包含在/etc/profile或新脚本中/etc/profile.d

相关内容