我有一个/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
。