원격 서버에 루트 권한이 있는 사용자 추가

원격 서버에 루트 권한이 있는 사용자 추가

나 외에 몇 명의 다른 사람을 루트 사용자로 추가하고 싶은 Linux 서버가 있습니다. 모든 사용자가 서버에 액세스해야 하는 경우는 거의 없습니다. 첫 번째 단계로 root우리 둘 다 알고 있는 사용자의 비밀번호를 설정했습니다. 그런 다음 다음 사용자를 추가했습니다 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

그런 다음 root사용자의 비밀번호 해시를 user1sum user2에 복사했습니다 /etc/shadow. 그런 다음 .ssh/authorized_keys각 사용자( 개인 SSH 공개 키 user1포함 )에 대한 파일을 홈 디렉토리에 생성했고 마지막으로 사용자 에 대한 파일이 없었습니다. 즉 , 사용자를 사용하여 서버에 로그인할 수 있는 방법이 없었습니다 .user2PermitRootLogin without-passwordsshd_configauthorized_keysrootroot

이것이 기본적으로 나에게 필요한 것이지만 이 설정에는 일부 (보안) 단점이 있을 수 있습니다. 더 나은 솔루션이 있습니까?

답변1

당신이하는 일은 비정형적이므로 권장하지 않습니다. 대부분의 프로그램은 uid와 사용자 이름 간의 일대일 매핑을 가정합니다. 이상한 버그/알 수 없는 동작 또는 최악의 보안 취약점이 발생할 수 있습니다. 이는 나에게 알려지지 않았으므로 목표를 달성하기 위한 더 나은/더 일반적인 방법이 있는 경우 권장할 수 없습니다. 이 점을 감안할 때 가장 먼저 할 일은 귀하가 만든 계정을 삭제하는 것입니다.

이제 사용자에게 루트 액세스가 필요한 경우 루트 계정과 관련된 위험을 이해하고 있다고 가정하면 루트 액세스 권한을 부여하는 데 큰 문제가 없습니다. 보안적인 측면에서 SSH의 가장 취약한 점은 비밀번호 인증이므로 비활성화하는 것을 적극 권장합니다. 다음을 편집/추가하면 됩니다./etc/ssh/sshd_config

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

그러나 필요한 것보다 오랫동안 루트 액세스 권한을 갖는 데에는 몇 가지 문제가 있습니다. 특히, 단순한 실수가 더 쉽게 더 큰 피해를 입힐 수 있다는 점입니다. 따라서 사용자가 로그인할 수 있는 권한이 없는 계정을 만드는 것이 좋습니다. 사용자로 로그인하면 su -필요한 경우 루트 비밀번호를 사용하여 루트 권한을 얻을 수 있습니다.

이제 원격 공격은 일반적으로 루트 사용자(및 예를 들어 일반 사용자 이름 admin)를 대상으로 하며, 비밀번호 인증을 비활성화하면 키 인증이 충분히 강력하므로 일반적으로 이에 대해 걱정할 필요가 없습니다. 위와 아래에서 언급한 것처럼 루트 권한을 얻을 수 있는 사용자 계정이 있는 경우 /etc/ssh/sshd_config.

PermitRootLogin no

경고: 루트 액세스 권한이 있는 사용자 계정이 있는지 확인하십시오. 그렇지 않으면 서버에 액세스할 수 없게 될 수 있습니다.

이제 공격자가 권한이 없는 계정에 액세스하려면 사용자 이름이 필요하고 전체 루트 액세스를 얻으려면 비밀번호가 필요하므로 이는 잘못된 구성이나 향후 발생할 수 있는 ssh/openssl 취약성으로부터 사용자를 보호하는 데 도움이 될 수 있습니다.

마지막으로, 여러 사용자 간에 비밀번호를 공유하는 것은 모범 사례가 아닙니다. 어떤 이유로든 누군가의 액세스 권한을 취소하려면 모든 사람이 새 비밀번호를 알아야 합니다. 루트 액세스 권한을 얻으려면 사용자 자신의 비밀번호를 사용하는 것이 가장 좋습니다. 이렇게 하면 사용자의 계정을 잠그고 루트 비밀번호를 변경하면(루트 액세스 권한이 있으므로 수정할 수 있으므로) 모든 사람이 계속해서 자신의 비밀번호를 문제 없이 사용할 수 있습니다(누군가를 잠그면 더 많은 문제가 발생한다는 점에 유의하세요). 다른 사용자의 비밀번호를 변경하거나 다른 사용자에게 키를 추가하는 등 시스템에 대한 모든 작업을 수행할 수 있으므로 서버에 대한 루트 액세스 권한이 있습니다.

이를 수행하려면 sudo재정의를 사용 su하여 사용자가 루트처럼 자신의 비밀번호를 사용하여 루트 권한을 얻도록 허용할 수 있습니다. 이렇게 하려면 사용 중인 배포에 따라 sudo사용자를 설치하고 그룹에 추가합니다 wheel. sudo그런 다음 사용자는 sudo <command>루트 권한으로 명령을 실행하거나 sudo -i루트 셸을 얻을 수 있습니다.

또한 sudo가 수행하는 모든 작업은 사용자 이름에 대해 기록되므로 더 나은 감사 로그를 제공합니다. sudo -i항상 이 작업을 수행하지 않는다고 가정합니다.

사용자에게 모든 명령에 대한 액세스 권한을 부여하는 대신 명령의 하위 집합만 실행하도록 사용자를 추가로 제한할 수도 있습니다. 이렇게 하면 시스템에서 더 적은 작업을 수행할 수 있으므로 나중에 액세스 권한을 더 쉽게 취소할 수 있습니다. 그러나 이는 사용자를 얼마나 신뢰하느냐에 따라 달라지며, 사용자가 액세스해야 하는 모든 것을 이해하지 못하면 짜증스러울 수 있습니다.

이를 고려할 때 공격자가 서버에 액세스하여 제한된 피해를 입히려면 사용자 이름과 SSH 키 또는 키 기반 인증의 취약점이 필요합니다. 그런 다음 실제로 루트 액세스 권한을 얻고 실제 피해를 입히려면 암호가 필요합니다.

보안은 레이어별로 적용되며 일반적으로 레이어가 많을수록 보안이 강화됩니다. 그러나 계층 수를 늘리면 가용성도 감소합니다. 특정 시스템에 어떤 밸런스를 적용할지 결정하는 것은 사용자의 몫입니다. 위에서 설명한 단계는 최소한의 사용성 비용으로 보안을 강화합니다. 시스템을 잠그기 위해 취할 수 있는 추가 단계가 있지만 대부분의 경우 이것으로 충분합니다.

답변2

이러지 마세요! 루트가 아닌 사용자가 표준으로 루트 권한으로 실행할 이유가 없다고 생각합니다. 그건 위험해요.

sudo대신 배포에 따라 사용자를 또는 그룹(일반적으로 sudo)에 추가하기만 하면 됩니다 .wheel

이는 으로 수행할 수 있습니다 useradd -G sudo -s /bin/bash <username>.

SSH 인증의 경우 키를 사용하면 문제가 없습니다.

관련 정보