以 root 身份向程序提供 postfix

以 root 身份向程序提供 postfix

我正在尝试让 postfixstdin从一封电子邮件传输到需要运行的脚本中root(是的,我了解这样做的安全问题。请不要讲课)。

别名文件的内容

myalias: |/root/script/thing.rb

可执行脚本/root/script/thing.rb需要以 身份运行root,但当前由 postfix 以 身份运行nobody

有什么解决方法吗?

任何尝试运行带有后缀的根脚本都会导致:

localhost postfix[942]: fatal: file /etc/postfix/main.cf: parameter mail_owner: user root has privileged user ID

答案1

当你必须让 dovecot-lda 与 postfix 对话时,也会出现此问题。本文档,作者提出了两种解决方案

  1. 使 dovecot-lda setuid-root
  2. 使用 sudo 来包装 dovecot-lda 的调用。

选项一是Coincoin 解释得很好.下面解释第二个。

  1. 为此,您应该有专门的用户来执行 sudo。假设该用户是rubypostfix
  2. 设置新的别名文件 /etc/postfix/aliasruby,将其重命名为rubypostfix并放置别名。

    内容/etc/postfix/aliasruby

    myalias: | sudo /root/script/thing.rb
    

    然后设置所有者。默认情况下,postfix 将使用与别名文件所有者相同的权限

    chown rubypostfix /etc/postfix/aliasruby
    

    不要忘记运行postalias这个文件。

  3. 然后编辑/etc/sudoers以允许该用户仅执行您的 ruby​​ 脚本。

    rubypostfix          ALL=NOPASSWD:/root/script/thing.rb
    

答案2

“(是的,我了解这样做的安全问题。请不要说教)”:抱歉,但我必须补充一点,因为您应该明白,从安全角度来看,这个解决方案确实很肮脏。

这是一个解决方案,但是我真的建议你不要使用它

chown root:root /root/script/thing.rb 
chmod 4755 /root/script/thing.rb

现在,这真的很糟糕,因为系统中的任何人都可以/root/script/thing.rb以 root 权限执行。这也意味着任何小小的编码错误/root/script/thing.rb都可能让任何人获得您系统的 root 权限。

注意:/root/script/thing.rb 是“setuid root”。

相关内容