所以昨天 Webmin 删除了我的 /etc/passwd,虽然看起来一切正常,但是在 PHP 脚本中使用时我无法让 sendmail 工作。
使用 mail() 返回 false,使用 PHPMailer 导致“Mailer 无法执行 sendmail”。
我 100% 确定该问题是由于 passwd 文件引起的,我只是想不出如何解决它。
我注意到有几个用户已经腐败,我不得不替换他们。
我可能应该提一下,如果我尝试通过 sendmail 本身发送它,它可以完美地运行。
对于那些说恢复 /etc/passwd 的人,我已经这样做了,但问题仍然存在。
grep smmsp /etc/group
smmsp:x:51:
ls -ld /var/spool/mqueue/
drwx------ 2 root mail 4096 Nov 8 02:56 /var/spool/mqueue/
ls -ld /var/spool/clientmqueue/
drwxrwx--- 2 smmsp smmsp 4096 Nov 8 02:55 /var/spool/clientmqueue/
ls -ld /var/spool/mail/
drwxrwxr-x 2 root mail 4096 Nov 8 02:18 /var/spool/mail/
ls -l /usr/sbin/sendmail
lrwxrwxrwx 1 root root 21 Aug 8 21:29 /usr/sbin/sendmail -> /etc/alternatives/mta
ls -l /usr/sbin/sendmail.sendmail
-rwxrwsrwx 1 root smmsp 806460 Aug 11 17:32 /usr/sbin/sendmail.sendmail
错误
Nov 8 15:58:18 jbrunton sendmail[6222]: pA8FwIPJ006222: SYSERR(UID0): Who are you?: Permission denied
Nov 8 15:58:18 jbrunton sendmail[6222]: pA8FwIPJ006222: [email protected], size=456, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Nov 8 15:58:18 jbrunton sendmail[6225]: pA8FwIdW006225: SYSERR(root): collect: Cannot write ./dfpA8FwIdW006225 (bfcommit, uid=0, gid=51): Permission denied
Nov 8 15:58:18 jbrunton sendmail[6225]: pA8FwIdW006225: from=<[email protected]>, size=598, class=0, nrcpts=1, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Nov 8 15:58:18 jbrunton sendmail[6222]: pA8FwIPJ006222: [email protected], delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30456, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: 421 4.3.0 collect: Cannot write ./dfpA8FwIdW006225 (bfcommit, uid=0, gid=51): Permission denied
答案1
为了避免将来出现此问题,您可以对 /etc 进行版本控制,这样如果出现错误,您可以随时恢复到以前的版本。etckeeper 包可以通过跟踪版本控制存储库中的权限并将提交集成到维护操作中来帮助解决此问题。
答案2
密码文件可以重新生成,但需要付出很多努力。相反,您可以使用以下示例密码文件至少让您的一些系统帐户正常工作/
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
smmsp:x:511:511:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:107::/var/run/dbus:/bin/false
由于我已将用户添加smmmp
到 passwd 文件中,因此您的 sendmail 可能可以正常工作。
另外,还要查找 /etc/passwd- 文件,因为它也是操作系统保存的备份密码。它可能在那里。
答案3
将用户添加apache
到smmsp
组并重试:
# usermod -a -G smmsp apache