代码之家  ›  专栏  ›  技术社区  ›  user27173209

脚本中的newaliases导致权限被拒绝

  •  0
  • user27173209  · 技术社区  · 10 月前

    运行Ubuntu。更新后 /etc/aliases 文件 newaliases 必须运行命令以构建别名数据库 /etc/aliases.db 。我可以成功跑步 sudo newaliases 但是当我创建一个shell脚本(名为 myscript.sh )使用 纽瓦利斯 命令,我得到 postalias: fatal: open /etc/aliases.db: Permission denied 错误。我用 sudo myscript.sh 启动脚本( whoami 由脚本执行,打印出“root”),脚本成功执行了多个需要root权限的命令(例如写入 /etc/别名 )在遇到错误之前 纽瓦利斯 .

    我尝试了以下操作:

    1. 已验证访问 /etc/别名 /etc/aliases.db 命令-两者都是755 root:root
    2. 更改了的属性 myscript.sh 到755根:根
    3. 更改了的属性 myscript.sh 到4755根:根
    4. 而不是跑步 纽瓦利斯 ,我试过了 postalias /etc/aliases 以及 sendmail -bi 因为它们似乎提供了类似的功能
    5. 更新了sudoers配置,不允许执行密码 纽瓦利斯 :
    myuser ALL=(ALL) NOPASSWD: /etc/myscript.sh
    myuser ALL=(ALL) NOPASSWD: /usr/bin/newaliases
    
    1. 允许我的用户使用sudo执行任何命令:
    myuser ALL=(ALL:ALL) NOPASSWD:ALL
    
    1. 习惯于 sudo newaliases 在脚本中
    2. 习惯于 sudo bash -c "newaliases" 在脚本中

    上述所有尝试都失败了,总是得到相同的错误。

    主要问题: 我该如何执行 纽瓦利斯 来自shell脚本 ? 知道有什么特别的吗 纽瓦利斯 考虑到脚本执行其他需要root访问权限的操作而没有问题?

    我在步骤4中发现的是 纽瓦利斯 只是一个符号链接 sendmail :

    ubuntu@mail:~$ ls -l /usr/bin/newaliases
    lrwxrwxrwx 1 root root 16 Jan 29  2024 /usr/bin/newaliases -> ../sbin/sendmail
    

    但当我只是跑步时 sendmail 它不会像以前那样执行别名数据库的更新 纽瓦利斯 (相反,它需要 sendmail-bi 命令执行相同的操作)。这是第二个问题——如果你能解释这个谜团,它可能会有所帮助。

    谢谢! 林俊杰

    2 回复  |  直到 10 月前
        1
  •  0
  •   Allan Wind    10 月前

    调试时尽量减少脚本,以:

    #!/bin/bash
    /usr/bin/newliases
    

    然后修复/etc/aliases的权限应该是644(而不是755):

    # chmod 644 /etc/aliases
    # rm /etc/aliases.db
    $ sudo your-script
    
        2
  •  0
  •   user27173209    10 月前

    Alan的建议很好,将脚本简化为:

    #!/bin/bash
    /usr/bin/newaliases
    

    这个简单的脚本奏效了,它帮助我找到了原始脚本早期代码中的一个错误,该错误无意中修改了 /etc/aliases 文件不是root。这导致 newaliases 命令失败。