后缀的饲料作为根编程

我试图让postfix通过电子邮件将stdin到需要由root运行的脚本(是的,我理解这样做的安全问题,请不要听课)。

别名文件的内容

 myalias: |/root/script/thing.rb 

可执行脚本/root/script/thing.rb需要以/root/script/thing.rb身份运行,但是目前作为nobody后缀运行。

任何想法的解决方法?

任何使用postfix运行根脚本的尝试都会导致:

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

当您必须让dovecot-lda与postfix交谈时,也会出现这个问题。 在这个文档中 ,作者提出了两个解决scheme

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

选项一是由coincoin很好地解释 。 第二个将在下面解释。

  1. 为了做到这一点,你应该有专门的用户做sudo。 假设用户是rubypostfix
  2. 设置新的别名文件/ etc / postfix / aliasruby,chown到rubypostfix并放置别名。

    /etc/postfix/aliasruby

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

    然后设置所有者。 默认情况下,postfix将pipe道电子邮件程序与别名文件所有者相同的权限 。

     chown rubypostfix /etc/postfix/aliasruby 

    不要忘了运行这个文件的postalias

  3. 然后编辑/etc/sudoers ,让这个用户只执行你的ruby脚本。

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

“(是的,我理解这样做的安全性问题,请不要听课)”:对不起,我必须添加一个,因为从安全的angular度来看,解决scheme确实很脏。

这是一个解决scheme,但我真的build议你不要使用它

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

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

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