I have Linux a server where I would like to add few other people besides me as a root users. All the users need to access this server very seldom if ever. As a first step I set a root
user a password which we all know. Then I added those users with useradd
:
useradd -ou 0 -g 0 user1 -d /root/user1/ -s /bin/bash
useradd -ou 0 -g 0 user2 -d /root/user2/ -s /bin/bash
Run Code Online (Sandbox Code Playgroud)
After that I copied a password hash of a root
user to user1
and user2
in /etc/shadow
. Then I created .ssh/authorized_keys
file for each user(both user1
and user2
have their personal SSH public key there) into their home directory and finally configured PermitRootLogin without-password
in sshd_config
. There is no authorized_keys
file for root
user, i.e. it's not possible to log into server using user root
.
This is basically what I need, but maybe this setup has some (security) drawbacks and there is a better solution?
你所做的是非典型的,所以我不会推荐它。大多数程序假定 uid 和用户名之间是一对一的映射。您可能会遇到奇怪的错误/未知行为或最糟糕的安全漏洞 - 这对我来说是未知的,所以当有更好/更典型的方法来实现您的目标时,我不能推荐它。鉴于此,我要做的第一件事就是删除您创建的帐户。
现在,如果用户需要 root 访问权限,那么让他们访问 root 帐户并没有什么大错,假设您/他们了解与 root 帐户相关的风险。从安全角度来看,ssh 中最薄弱的一点是密码验证,所以我强烈建议禁用它。这可以通过编辑/添加以下内容来完成/etc/ssh/sshd_config
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
Run Code Online (Sandbox Code Playgroud)
但是,拥有 root 权限的时间比您需要的时间长存在一些问题。最值得注意的是,一个简单的错误更容易造成更大的损害。鉴于此,最好创建一些用户可以登录的非特权帐户。一旦登录到他们的用户,可以在需要时通过使用su -
和 root 密码获得 root 权限。
现在,远程攻击通常针对 root 用户(以及常见用户名,例如admin
),禁用密码身份验证后,您通常不必担心这一点,因为密钥身份验证足够强大。如果您拥有可以获得 root 权限的用户帐户(如上文和下文所述),那么您可以通过将以下内容添加/编辑到/etc/ssh/sshd_config
.
PermitRootLogin no
Run Code Online (Sandbox Code Playgroud)
警告:确保您有一个可以获得 root 权限的用户帐户,否则您可以将自己锁定在服务器之外。
这可能有助于保护您免受错误配置或未来可能针对 ssh/openssl 的漏洞的影响,因为攻击者现在还需要用户名才能访问非特权帐户,然后他们需要密码才能获得完全的 root 访问权限。
最后,在多个用户之间共享密码不是最佳做法。如果您出于任何原因希望撤销某人的访问权限,则每个人都需要学习新密码。最好使用用户自己的密码获取 root 权限。这样你只需要锁定用户的帐户,更改 root 密码(因为他们可以修改它,因为他们拥有 root 权限)并且每个人都可以继续使用自己的密码而不会出现问题(请注意,将某人锁定在他们拥有 root 访问权限的服务器,因为他们可以对系统做任何事情,包括更改其他用户的密码或将他们的密钥添加给其他用户)。
为此,您可以使用sudo
代替su
来允许用户使用自己的密码获得 root 权限,就像 root 一样。为此,请安装sudo
并将用户添加到wheel
orsudo
组(取决于您使用的发行版)。然后用户可以使用sudo <command>
root 权限运行命令或sudo -i
获得 root shell。
这也为您提供了更好的审计日志,因为 sudo 执行的每个操作都是根据用户名记录的 - 假设您不是sudo -i
一直都这样做。
您甚至可以通过限制用户仅运行一部分命令而不是让他们访问所有命令来进一步实现这一点。这使得将来更容易撤销访问权限,因为他们对系统的影响较小。但这取决于您对用户的信任程度,如果您不了解他们需要访问的所有内容,可能会很烦人。
鉴于此,攻击者需要用户名以及 ssh 密钥或基于密钥的身份验证中的漏洞才能访问服务器,在那里他们可以造成有限的损害。然后他们需要一个密码才能真正获得 root 权限并造成真正的损害。
安全是分层应用的,您拥有的层数通常越多,您就越安全。但是增加的层也会降低可用性。由您决定希望应用于给定系统的余额。我上面描述的步骤将以最低的可用性成本增加安全性。您还可以采取进一步的步骤来锁定系统,但对于大多数情况来说,这应该就足够了。