我正在尝试让 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 对话时,也会出现此问题。本文档,作者提出了两种解决方案
- 使 dovecot-lda setuid-root
- 使用 sudo 来包装 dovecot-lda 的调用。
选项一是Coincoin 解释得很好.下面解释第二个。
- 为此,您应该有专门的用户来执行 sudo。假设该用户是
rubypostfix
。 设置新的别名文件 /etc/postfix/aliasruby,将其重命名为
rubypostfix
并放置别名。内容
/etc/postfix/aliasruby
myalias: | sudo /root/script/thing.rb
然后设置所有者。默认情况下,postfix 将使用与别名文件所有者相同的权限。
chown rubypostfix /etc/postfix/aliasruby
不要忘记运行
postalias
这个文件。然后编辑
/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”。