用户更改密码时发送电子邮件

时间:2012-04-11 10:04:33

标签: linux bash sendmail passwd

我有一个使用ssh登录的远程服务器。当有人使用包含新密码的passwd更改用户密码时,是否有通过电子邮件(使用bash脚本)通知的方法?

我猜它与/ etc / pam / passwd有关,但不完全确定触发器和标志应该是什么。

如果我允许访问“朋友”并且他们决定将我锁定在我的帐户之外,这将非常有用。当然我可以为他们创建一个新帐户等,但这更像是“应该是可能的”任务而不是实际的任务。

3 个答案:

答案 0 :(得分:2)

首先,Dope Slap

有一个规则,这个问题让我想起......这是什么?哦是啊......

永远不要与任何人分享您的密码!

这也符合规则。

永远不要通过电子邮件发送秘密!

抱歉喊道。在安全性方面有一个规则,即秘密可能会泄露的可能性是知道它的人数的平方。我的推论是:

if ( people_who_know_secret > 1 ) {
     It ain't a secret any more
}

在Unix中,即使系统管理员,所有强大的root用户也不知道你的密码。

更糟糕的是,您想通过电子邮件发送密码。电子邮件远非安全。它通常只是通过以太发送的纯文本,任何有点好奇的人都可以偷看它。

方法一:允许用户在不知道密码的情况下使用SSH

由于您使用的是SSH,因此您应该知道SSH有一种备用机制来验证名为Private / Public keys的用户。它因系统而异,但您所做的是创建公钥/私钥对。您与要登录的系统共享公钥,但保密私钥。

远程计算机拥有您的公钥后,您可以通过ssh登录该系统,而无需知道该系统的密码。

确切的机制因机器而异,并且有两种不同的ssh协议没有帮助,因此使其工作将因系统而异。在Linux和Mac上,您可以通过ssh-keygen命令生成公钥/私钥对。

默认情况下,ssh-keygen会生成一个名为$HOME/.ssh/id_rsa.pub$HOME/.ssh/id_rsa的文件。第一个是你的公钥。您在计算机和要登录的计算机上运行ssh-keygen

在您登录的计算机上,创建名为$HOME/.ssh/authorized_keys的文件,然后将公钥复制并粘贴到此文件中。让你的朋友也发给你他的公钥,并将其粘贴到文件中。每个公钥将占用文件中的一行。

如果一切正常,您和您的朋友都可以使用ssh登录该远程计算机而无需输入密码。这非常安全,因为您的公钥必须与您对应的私钥匹配。如果不是,则无法登录。这意味着即使其他教皇找到您的公钥,他们也无法登录该远程系统。

您和您的朋友都可以登录该系统而无需担心共享密码。

方法二:更好的解决方案:使用SUDO

另一种方法是使用sudo让您的朋友在某些方面像您一样行事。与实际共享帐户相比,Sudo有一些优势:

  • 记录了所有SUDO的使用,因此您具有可追溯性。如果出现问题,你应该知道应该责怪谁。
  • 你可以限制人们可以做什么作为SUDO。例如,您的朋友必须像您一样运行特定命令,而不是其他任何操作。在这种情况下,您可以在/etc/sudoers文件中指定您的朋友只能运行该特定命令。您甚至可以指定您的朋友是否可以简单地运行该命令,或者要求您的朋友输入他们的密码以运行该命令。

在Ubuntu Linux和Macintoshes上,root密码被锁定,因此您无法以root用户身份登录。如果您需要以root身份执行某些操作,请将自己设置为管理员(我相信将自己置于wheel组中),然后使用sudo运行所需的管理员功能。

Sudo的一大缺点是设置起来比较复杂,需要管理员访问机器。


尝试使用SSH设置公钥/私钥。它可能需要一些调整才能使它工作,但一旦它工作,它是美丽的。更好的是,您可以运行远程命令并使用sep将文件从一台计算机复制到另一台计算机 - 所有这些都没有密码提示。这意味着您可以编写shell脚本来为您完成工作。

顺便说一下,一个偷偷摸摸的技巧是将你的远程shell设置为/bin/false。这样,您无法登录该系统 - 即使使用ssh,但您可以使用ssh运行远程命令,并使用sep在系统之间来回复制文件。 / p>

答案 1 :(得分:1)

个人密码只能由用户自己知道。甚至根用户也不应该知道它们,这就是为什么它们被加密存储的原因。当然,root用户有足够的权限来解密它们,但原理是一样的。

如果您要给予“朋友”访问权限,他们会为他们分配适当的权限! 使他们成为root用户,您也不应该是root用户。那么你的“朋友”将无法更改你的密码,在他们不应该进入的区域中捣乱。

如果您绝对必须监控 passwd和shadow文件,请安装iwatch。然后将其设置为观察/ etc / passwd和/ etc / shadow文件。如果它们发生变化,它会运行一个脚本来解密文件并通过电子邮件发送给某人。如果你保留一份副本来反对,你甚至会知道谁改变了。您可能也应该发送电子邮件,以便它不会以纯文本形式通过互联网,因为它中包含每个人的密码。请注意,系统中的任何其他用户都会对他们所处的反乌托邦世界感到不安。

仅仅因为根是土地的法则并不意味着我们想要生活在1984年。

答案 2 :(得分:-1)

尝试某种方式:

alias passwd='passwd && echo 'Alert! Alert! Alert!' | mail -s 'pass change' alert@example.com'

应该足够了你:)

对于那些认为alias过于主流的人)的另一种可行解决方案:)

1)您可以创建一个cron作业,每隔一段时间检查一次/etc/shadow文件,例如,分钟,当文件发生变化时,它会向您发送警报电子邮件。我认为,最简单的方法是制作md5校验和

2)您可以将/ usr / bin / passwd移动到/usr/bin/passwd.sys并在其上创建一个带有/usr/bin/passwd.sys && echo 'Alert! Alert! Alert!' | mail -s 'pass change'的脚本。是的,这种方式也可以被用户发现并擦洗:)