Dmi*_*ich 60 security linux password sudo
我喜欢通过密钥访问服务器的想法,这样我就不必每次ssh进入一个盒子时都输入我的密码,我什至锁定了我的用户(不是root)密码(passwd -l username),所以没有密钥就不可能登录。
但是如果我需要为sudo命令输入密码,所有这些都会中断。所以我很想设置无密码sudo来使事情符合无密码登录。
然而,我一直有一种直觉,它可能会以某种意想不到的方式对我产生适得其反的效果,它似乎有点不安全。这样的设置有什么注意事项吗?您是否建议/不建议为服务器上的用户帐户执行此操作?
澄清
sudo在交互式用户会话中的使用,而不是用于服务或管理脚本sudo有一个超时,在此期间我不必重新输入我的密码。但我的音乐会并不是为了浪费额外的时间来实际输入密码。我的想法是根本不必处理密码,因为我认为:
sudo. 我希望我能避免这种情况。因此,通过这个问题,我想更好地了解一种可能配置相对于其他配置的风险、警告和权衡。
跟进 1
所有的答案都说无密码sudo是不安全的,因为如果我的个人用户帐户受到威胁,它允许“轻松”提升权限。我明白那个。但另一方面,如果我使用密码,我们会承担密码的所有经典风险(太短或太常见的字符串,在不同的服务中重复等)。但是我想如果我禁用密码验证/etc/ssh/sshd_config以便您仍然必须有一个密钥才能登录,我可以使用更简单的密码只是为了sudo更容易输入?这是一个有效的策略吗?
跟进 2
如果我也有root通过 ssh登录的密钥,如果有人可以访问我的计算机并窃取我的密钥(尽管他们仍然受操作系统的密钥环密码保护!),他们也可以直接访问该root帐户,绕过sudo路径。那么访问该root帐户的策略应该是什么?
EEA*_*EAA 47
我喜欢通过密钥访问服务器的想法,这样我就不必每次 ssh 到一个盒子里时都输入我的密码,我什至锁定了我的用户(不是 root)密码(passwd -l 用户名)所以不可能无需密钥即可登录...您是否建议/不建议为服务器上的用户帐户执行此操作?
您打算以错误的方式禁用基于密码的登录。不要锁定用户的帐户,而是PasswordAuthentication no在您的/etc/ssh/sshd_config.
使用该设置,ssh 的密码验证被禁用,但您仍然可以使用 sudo 的密码。
我建议在 sudo 中设置的唯一时间NOPASSWD是用于服务帐户,其中进程需要能够以编程方式通过 sudo 运行命令。在这些情况下,请确保您仅将帐户需要运行的特定命令明确列入白名单。对于交互式帐户,您应该始终启用密码。
对您的后续问题的答复:
但是我想如果我在 /etc/ssh/sshd_config 中禁用密码身份验证以便您仍然必须有一个密钥才能登录,我可以为 sudo 使用一个更简单的密码,这样更容易输入吗?这是一个有效的策略吗?
对,那是正确的。我仍然建议使用相对强大的本地帐户密码,但不要强得离谱。~8 个字符,随机生成就足够了。
如果我也有通过 ssh 以 root 身份登录的密钥,如果有人可以访问我的计算机并窃取我的密钥(尽管他们仍然受操作系统的密钥环密码保护!),他们也可以直接访问root 帐户,绕过 sudo 路径。
应禁用通过 ssh 的 root 访问。时期。设置PermitRootLogin no在您的sshd_config.
那么访问 root 帐户的策略应该是什么?
您应该始终有办法获得对服务器控制台的带外访问。一些 VPS 供应商确实提供了这一点,专用硬件供应商也是如此。如果您的提供商没有授予真正的控制台访问权限(例如 EC2),您通常仍然可以使用我在本答案中概述的过程来恢复访问权限。
Bil*_*hor 12
我通常限制使用NOPASSWORD由自动化进程运行的命令。最好为这些命令提供一个服务帐户,并将 sudo 的使用限制为所需的命令。
允许NOPASSWORD通用命令,允许任何可以访问您的用户 ID 的人运行任何命令。这可能是由于您的凭据泄露造成的,但也可能很简单,例如当您离开一秒钟时有人坐在您的办公桌前。
我发现我不必经常输入密码。输入密码后,如果在它们之间等待时间不长,您可以运行多个命令。超时是可配置的。
obs*_*ard 10
您可以两全其美:登录和 sudo 的 SSH 身份验证。如果您集成了pam_ssh_agent_auth模块,则可以使用 SSH 密钥进行身份验证,而无需在 sudo 时提供密码。
我已经在生产中使用它超过五年了。
要配置它,请安装 PAM 模块,然后添加一行/etc/pam.d/sudo或您的系统等效项:
auth sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
如果您这样做,请务必使用密码保护您计算机上的密钥。这样,某人将不得不闯入您的计算机并窃取密钥才能进入。如果他们可以访问您的帐户,则他们可以通过在解锁时从内存中提取它们,破解您的密码或窃取您的密码来做到这一点键入时使用键盘记录器或肩膀浏览它(看看你身后!)。
您可以使用与登录相同的 SSH 密钥,或者您可以设置一个单独的密钥,仅在您使用 sudo 时添加到您的代理。因此,如果您想格外小心,您可以维护一个单独的 authorized_keys 文件,该文件具有单独的 SSH 密钥,您仅在需要 sudo 时才将其添加到您的代理:
auth sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys_sudo
Run Code Online (Sandbox Code Playgroud)
我只会在两种情况下使用它:
默认情况下,大多数sudo配置不会在同一会话中再次询问您一段时间(如果您打开一个没有任何效果的新 shell)。您可以通过timestamp_timeout设置在一定程度上控制此行为。
无密码sudo并不像无密码ssh密钥那么危险,因为远程攻击者首先需要您的凭据才能进入,但如果他们以某种方式入侵您的私钥(或者如果他们在物理上对您来说是本地的)并且您在离开机器时保持登录和解锁状态)那么密码请求是他们和特权访问之间有价值的额外防御。
关于后续2:
如果我也有通过 ssh 以 root 身份登录的密钥
这也最好避免,这正是您描述的原因。如果远程连接必须具有特权访问权限,请通过服务帐户登录,并通过 sudo 提供足够的控制权来完成其工作。这当然更容易配置,所以很多人不会打扰(如果你这样做,这对你有利,因为攻击者有很多比你低的悬而未决的果实!),所以归结为安全性和便利性之间的古老妥协(专业提示:选择安全性!)。
既然你问了,这是我关于如何解决这个sudo问题的一般建议。
Sudo 的设计目的不是提供更多安全性(尽管在某些方面它可以)……而是提供良好的审计跟踪,了解谁在您的系统上以什么权限执行什么操作。
正确设置的 Sudo 不会使用该ALL=(ALL) ALL设置,而是更受限于用户具体需要的任何内容。例如,如果您需要用户能够登录并重新启动卡住的服务,他们可能不需要安装新软件或关闭服务器、更改防火墙规则等的能力。
有时人们经常使用 sudo 将自己提升到 root 帐户,即。sudo su -. 一旦他们这样做了,你就不再能从 root 帐户看到谁在做什么(root 可以同时登录多次)。所以有时人们也想禁用该sudo su -命令。但是,出于实际原因,如果您确实需要一个完全具有 root 权限的帐户进行管理,那么至少有人发出该sudo su -命令会记录谁提升为 root 以及何时提升。
我如何保护我的箱子:
将 SSH 端口更改为默认值以外的其他端口。这是为了避免寻找端口号然后猛击直到他们进入(或不进入)的愚蠢机器人。
禁止使用AllowRootLogin nosshd_config 中的设置通过 SSH 进行 Root 登录。这可以防止有人强行进入您的 root 帐户。出于审计原因和安全考虑,永远不要让某人直接登录到 root/管理员帐户,这通常是一种很好的做法。如果你直接允许 root 登录,你不知道谁登录,他们从谁那里得到密码等等。但是,如果有人登录 Jimmy 的帐户,然后将他们的权限提升到 root,你有更好的想法从哪里开始你的审核搜索(以及要重置的帐户)。
仅允许需要 SSH 的用户使用该AllowUsers设置并明确指定哪些帐户需要 SSH 访问。默认情况下,这将阻止来自 SSH 的所有其他帐户。
通过 visudo 编辑 Sudoers,只允许用户需要的命令。有很多关于如何执行此操作的深入指南,因此我不会在此详细说明。这是一个初学者:http : //ubuntuforums.org/showthread.php?t=1132821
这样做的要点是防止被盗帐户危害您的机器。IE。如果 Sally 的帐户被入侵,并且 Sally 只能使用 sudo 重新启动 Web 服务器,那么攻击者可能会在循环中重新启动您的 Web 服务器很有趣,但至少他们不能rm -rf /your/webserver/directory或打开所有防火墙端口等。
设置好的防火墙规则,只允许您的机器运行所需的端口。通常,您希望放弃所有内容,只明确允许您需要的内容。网上有很多不错的 iptables 和其他防火墙启动,这是我使用的一个(这是一个基本的启动器):
# Generated by iptables-save v1.4.7 on Mon Mar 3 17:55:02 2014
*filter
:INPUT DROP [4528:192078]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [39845:27914520]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4254 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8443 -m state --state NEW -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Mon Mar 3 17:55:02 2014
Run Code Online (Sandbox Code Playgroud)
此外,强密码是关键。即使您使用 SSH 密钥进行远程访问,您仍然应该需要密码才能使用 Sudo。在这种情况下 sudo 可以提供更多安全性。如果有人要窃取您的 ssh 密钥,如果他们仍然必须暴力破解您的帐户密码以使用 sudo,他们仍将无法在您的机器上执行任何重要操作。密码不应该是一个词,而应该是一个密码短语。想一个句子,然后使用它。这通常会让你得到超过 8 个字符的长度,提供大量的熵,但也比一些随机密码更容易记住。当然,良好的密码实践说使用机器生成的随机密码来欺骗像 John the Ripper 这样的破解工具,它可以直接破解大多数密码短语和密码。不,用 3 改变 E 不起作用,约翰也得到了这些排列。
| 归档时间: |
|
| 查看次数: |
10447 次 |
| 最近记录: |