我试图让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
选项一是由coincoin很好地解释 。 第二个将在下面解释。
rubypostfix 。 设置新的别名文件/ etc / postfix / aliasruby,chown到rubypostfix并放置别名。
/etc/postfix/aliasruby
myalias: | sudo /root/script/thing.rb
然后设置所有者。 默认情况下,postfix将pipe道电子邮件程序与别名文件所有者相同的权限 。
chown rubypostfix /etc/postfix/aliasruby
不要忘了运行这个文件的postalias 。
然后编辑/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”。