我有一个使用 ssh 登录的远程服务器。当有人使用 passwd 更改用户密码(包括新密码)时,有没有办法通过电子邮件(使用 bash 脚本)通知?
我猜它与 /etc/pam/passwd 有关,但不完全确定触发器和标志应该是什么。
例如,如果我将访问权限授予“朋友”并且他们决定将我锁定在我的帐户之外,这将很有用。当然,我可以为他们创建一个新帐户等,但这更像是一项“应该有可能”的任务,而不是一项实际的任务。
这个问题让我想起了一条规则……它是什么?哦耶...
这也符合规则。
对不起,大喊大叫。安全方面有一条规则,一个秘密泄露出去的可能性是知道它的人数的平方。我的推论是:
if ( people_who_know_secret > 1 ) {
It ain't a secret any more
}
在 Unix 中,即使是系统管理员,即全能的 root,也不知道您的密码。
更糟糕的是,您想通过电子邮件发送您的密码。电子邮件远非安全。它通常只是通过 Aether 发送的纯文本,任何有点好奇的人都可以偷看它。
由于您使用的是 SSH,因此您应该知道 SSH 具有用于验证用户的替代机制,称为私钥/公钥。它因系统而异,但您要做的是创建一个公钥/私钥对。您与要登录的系统共享您的公钥,但将您的私钥保密。
一旦远程机器有了你的公钥,你就可以在ssh
不知道该系统密码的情况下登录该系统。
确切的机制因机器而异,并且存在两种不同的 ssh 协议也无济于事,因此使其工作会因系统而异。在 Linux 和 Mac 上,您可以通过ssh-keygen命令生成公钥/私钥对。
默认情况下,ssh-keygen
将生成一个名为$HOME/.ssh/id_rsa.pub
and的文件$HOME/.ssh/id_rsa
。第一个是您的公钥。你ssh-keygen
在你的机器和你想登录的机器上运行。
在您登录的机器上,创建一个名为 的文件$HOME/.ssh/authorized_keys
,然后将您的公钥复制并粘贴到该文件中。让您的朋友也将他的公钥发送给您,并将其也粘贴到文件中。每个公钥将占用文件中的一行。
如果一切正常,您和您的朋友都可以使用ssh
登录该远程计算机而无需输入密码。这是非常安全的,因为您的公钥必须与您相应的私钥匹配。如果没有,您将无法登录。这意味着即使其他 popel 找到您的公钥,他们也无法登录该远程系统。
您和您的朋友都可以登录该系统,而不必担心共享密码。
另一种方法是使用sudo让您的朋友在某些方面扮演您的角色。与实际共享帐户相比,Sudo 有一些优势:
/etc/sudoers
文件中指定您的朋友只能运行该特定命令。您甚至可以指定您的朋友是否可以简单地运行该命令,或者要求您的朋友输入他们的密码才能运行该命令。在 Ubuntu Linux 和 Macintoshes 上,root 密码被锁定,因此您无法以 root 身份登录。如果您需要以 root 身份执行某些操作,请将自己设置为管理员(我相信通过将自己置于wheel
组中),然后使用sudo
来运行所需的管理员功能。
Sudo 的一大缺点是设置起来更复杂,并且需要机器上的管理员访问权限。
尝试使用 SSH 设置公钥/私钥。可能需要进行一些调整才能使其工作,但一旦工作,它就会很漂亮。更好的是,您可以运行远程命令sep
并将文件从一台机器复制到另一台机器——所有这些都不需要密码提示。这意味着您可以编写 shell 脚本来为您完成工作。
By the way, a sneaky trick is to set your remote shell to /bin/false
. That way, you can't log into that system -- even using ssh
, but you can run remote commands using ssh
and use sep
to copy files back and forth between systems.
个人密码只能由用户自己知道。甚至 root 用户都不应该知道它们,这就是它们被加密存储的原因。当然,root用户有足够的权限来解密它们,但原理是一样的。
如果您授予您的“朋友”访问权限,他们会为他们分配适当的权限!不要让他们成为 root 用户,你也不应该成为 root 用户。那么你的“朋友”将无权更改你的密码,更不用说在他们不应该在的地方乱搞了。
如果您绝对必须监视passwd 和 shadow 文件,请安装iwatch。然后将其设置为监视 /etc/passwd 和 /etc/shadow 文件。如果它们发生变化,它会运行一个脚本来解密文件并向某人发送电子邮件。如果您保留一份副本以进行比较,您甚至会知道谁更改了。您可能还应该 gpg 电子邮件,这样它就不会以纯文本形式通过 Internet,因为它包含每个人的密码。请注意,系统上的任何其他用户都会对他们所处的反乌托邦世界感到不安。
仅仅因为根是土地的法律并不意味着我们想要生活在 1984 年。
尝试某种:
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'
在其位置上制作一个脚本。是的,这种方式也可以被用户发现并擦洗:)