运行 Ubuntu。更新
/etc/aliases
文件后,必须运行 newaliases
命令来构建别名数据库 /etc/aliases.db
。我可以成功运行 sudo newaliases
,但是当我创建使用 myscript.sh
命令的 shell 脚本(名为 newaliases
)时,我收到 postalias: fatal: open /etc/aliases.db: Permission denied
错误。我使用 sudo myscript.sh
启动脚本(由脚本执行的 whoami
打印出“root”),并且在使用 /etc/aliases
出现错误之前,脚本成功执行了多个需要 root 权限的命令(例如写入
newaliases
).
我尝试了以下方法:
/etc/aliases
和 /etc/aliases.db
命令的访问 - 均为 755 root:rootmyscript.sh
的属性更改为755 root:rootmyscript.sh
的属性更改为4755 root:rootnewaliases
,而是尝试了postalias /etc/aliases
以及sendmail -bi
,因为它们似乎提供了类似的功能newaliases
:myuser ALL=(ALL) NOPASSWD: /etc/myscript.sh
myuser ALL=(ALL) NOPASSWD: /usr/bin/newaliases
myuser ALL=(ALL:ALL) NOPASSWD:ALL
sudo newaliases
sudo bash -c "newaliases"
以上所有尝试都失败了 - 总是遇到相同的错误。
主要问题:如何从 shell 脚本执行
newaliases
?鉴于脚本执行需要 root 访问权限的其他操作而不会出现问题,你知道 newaliases
有什么特别之处吗?我在第 4 步中发现
newaliases
只是
sendmail
的符号链接:
ubuntu@mail:~$ ls -l /usr/bin/newaliases
lrwxrwxrwx 1 root root 16 Jan 29 2024 /usr/bin/newaliases -> ../sbin/sendmail
但是当我简单地运行 sendmail
时,它不会像
newaliases
那样执行别名数据库的更新(相反,它需要
sendmail -bi
命令来执行相同的操作)。这是第二个问题 - 如果你能解释这个谜团可能会有所帮助。谢谢! 杰杰