사용자 계정과 서비스 계정의 차이점을 알고 싶습니다.
Jenkins
예를 들어 우분투에 설치된 사용자는 사용자가 아니라는 것을 알고 있습니다 .하지만 서비스 계정.
- 서비스 계정은 무엇에 사용되나요?
- 언제 필요합니까?
- 서비스 계정을 만드는 방법은 무엇입니까?
답변1
사용자 계정은 실제 사용자가 사용하고 서비스 계정은 시스템 서비스(예: 웹 서버, 메일 전송 에이전트, 데이터베이스 등)에서 사용됩니다. 관례적으로만 서비스 계정은 < 1000 정도의 더 작은 범위의 사용자 ID를 갖습니다. UID 0을 제외하고 서비스 계정에는 특별한 권한이 없습니다. 서비스 계정은 특정 리소스와 장치 특수 파일까지 소유할 수 있으며 종종 소유하지만 수퍼유저와 같은 권한은 없습니다.
서비스 계정은 일반 사용자 계정처럼 생성될 수 있습니다(예 useradd
: 그러나 서비스 계정은 일반적으로 서비스 소프트웨어를 설치할 때 패키지 관리자가 생성하고 구성합니다. 따라서 관리자라도 서비스 계정 생성에 직접적으로 관여하는 경우는 거의 없습니다.
타당한 이유가 있습니다. 사용자 계정과 달리 서비스 계정에는 일반적으로 "적절한" 로그인 셸이 없습니다. 즉, /usr/sbin/nologin
로그인 셸(또는 과거에는 /bin/false
)이 있습니다. 또한 서비스 계정이 잠기는 경우가 많습니다. 즉 /etc/passwd
, 로그인할 수 없습니다(기존 계정의 경우 /etc/shadow
비밀번호 해시를 임의의 값(예: 또는 )으로 설정하면 *
가능 합니다 x
). 이는 악용에 대비하여 서비스 계정을 강화하기 위한 것입니다(심층적인 방어).
서비스별로 별도의 서비스 계정을 설정하는 것은 크게 두 가지 목적으로 사용됩니다. 하나의 서비스에서 사고가 발생할 경우 영향을 줄이기 위한 보안 조치입니다.구획화), 어떤 리소스가 어떤 서비스에 속하는지 추적하기가 더 쉽기 때문에 관리가 단순화됩니다. 바라보다이것또는이것자세한 내용은 관련 질문에 대한 답변입니다.
답변2
처음에 사용자는 시스템을 사용하는 사람들을 대상으로 하여 이름이 붙여졌습니다. 모든 프로세스는 특정 사용자로 실행되며 모든 파일은 특정 사용자가 소유합니다. 루트라는 특수 사용자는 특정 인간 사용자(예: 운영 체제 자체)에 속하지 않는 작업을 수행하는 데 사용됩니다. 루트는 운영 체제 자체에 해당하므로 모든 권한을 갖습니다.
곧 사람들은 너무 많은 권한을 요구하지 않고 여러 시스템 사용자를 생성하는 것이 편리하다는 것을 알게 되었습니다. 이를 통해 머신에서 실행되는 다양한 서비스를 격리하여 서로 간섭하지 않도록 할 수 있습니다. 서비스 계정(또는 "시스템 계정", 두 용어는 동의어임)은 시스템을 사용하는 사람이 아니라 시스템에서 실행되는 서비스에 해당하는 계정입니다. 일반적으로 시스템에서 실행되는 각 작업에는 자체 권한 집합(예: 자체 파일, 자체 네트워크 포트 등)이 있는 서비스 계정이 있습니다.
인간 계정과 시스템/서비스 계정에 대한 공식적인 정의는 없습니다. 커널은 신경 쓰지 않습니다(UID 0을 가진 사용자에게 많은 권한을 부여하는 것 외에는). 대부분의 관리 명령도 상관하지 않습니다. 몇 가지 일반적인 차이점은 다음과 같습니다.
- 인간 사용자는 "John Doe"와 같은 실제 이름을 갖는 반면, 시스템 사용자는 "Nasal daemon"과 같은 설명적 이름을 갖거나 전혀 갖지 않습니다.
- 인간 사용자에게는 실제 로그인 쉘(예:
/bin/sh
또는/bin/bash
또는 ) 이 있습니다/bin/csh
. 일부 시스템 사용자는 쉘(거의 항상)을 갖고 있지만 다른 사용자는 사용 방법에 따라(예: 쉘이 필요함) 그렇지/bin/sh
않습니다 .su foo
foo
- 인간 사용자는 일반적으로 비밀번호를 가지고 있지만 항상 그런 것은 아닙니다. 예를 들어 원격 사용자만이 SSH 키만 가질 수 있습니다. 최신 unice에서는 비밀번호가
/etc/passwd
다른 파일에 없습니다/etc/shadow
. /home
인간 사용자의 홈 디렉토리는 일반적 으로 (또는 일부 사이트별 위치) 에 있는 반면, 시스템 사용자의 홈 디렉토리는 일반적으로 위치가 없거나/home
존재하지 않을 수도 있습니다(예외가 있음).- 대부분의 사이트에서는 시스템 사용자에 대한 사용자 ID 범위를 지정하고 인간 사용자에 대해서는 분리된 범위를 지정합니다. 일반적으로 100–65533 또는 500–65533 또는 1000–65533이 예약되어 있으며 대부분의 배포판은 500 또는 1000부터 시작하는 실제 사용자 ID를 할당하도록 설정됩니다.
여러 대의 컴퓨터가 계정을 공유하는 사이트에는 일반적으로 사용자 목록이 포함된 중앙 서버가 있습니다.국정원또는LDAP. passwd
항목/etc/nsswitch.conf
사용자 정보를 찾을 위치를 지정합니다. 시스템 사용자가 로컬에 있고 /etc/passwd
네트워크 전체 데이터베이스에 실제 사용자가 있는 것이 일반적이지만 때로는 네트워크 전체 데이터베이스에 시스템 사용자가 있고(일관된 UID를 강제하고 서버 및 데이터 복제를 용이하게 하기 위해) 사람이 있는 경우도 있습니다. 로컬 파일의 사용자(네트워크가 중단되더라도 로그인 상태를 유지함)
시스템 사용자로 가장하는 사람이 액세스할 수 있는 계정은 일반적으로 실제 이름이 없지만 로그인 셸, 비밀번호 세트 또는 SSH 키는 물론 시스템 전체 사용자 ID가 있습니다. 실제로 실제 시스템 계정을 사용하는 것이 더 나은 변장이며 해당 계정을 삭제하면 일부 서비스의 작동이 중지됩니다. 그러나 잠재적인 공격을 탐지하기 위해 엄격하고 빠른 규칙을 가질 수는 없습니다. 정의에 따르면 공격자는 규칙을 따르지 않습니다.
서비스 계정과 휴먼 계정은 동일한 명령으로 관리되며 동일한 파일에 기록됩니다. 계정 생성 명령에는 사람과 서비스 사용자에 대해 합리적인 기본값을 설정하는 옵션이 있을 수 있습니다. 예를 들어 적절한 범위 내에서 사용자 ID를 선택하고 사람에게 비밀번호를 묻는 메시지를 표시하고 서비스에 대한 비밀번호 확인을 비활성화하는 등의 옵션이 있습니다. 예를 들어 Linux에서는 adduser
vs adduser --system
또는 useradd
vs 입니다 .useradd -r
답변3
- 기술 계정이라고도 하는 서비스 계정은 일반 사용자가 아닌 서비스/애플리케이션에서만 사용하는 계정입니다.
- 애플리케이션 및 서비스 개발자는 프로세스를 루트로 실행하는 대신 이러한 계정이 관련 프로세스 권한 및 권한을 제한하기를 원합니다. 루트 로 실행
init
되는 또는 이와 유사한 서비스는systemd
위험을 제한하기 위해 서비스 계정으로 빠르게 다운그레이드됩니다. 사용되는 운영 체제에 따라 응용 프로그램 계정에는 권한 있는 TCP 포트에 바인딩할 수 있는 권한과 같이 일반 계정보다 더 많은 권한이 부여되거나 반대로 서비스 프로세스 Titlefork
/ 거부와 같이 일반 사용자보다 적은 권한이 부여될 수 있습니다exec
. 이 경우 서비스를 시작하는 데 사용할 수 있는 서비스 계정으로 서비스를 다운그레이드할 필요가 없습니다.
- 애플리케이션 및 서비스 개발자는 프로세스를 루트로 실행하는 대신 이러한 계정이 관련 프로세스 권한 및 권한을 제한하기를 원합니다. 루트 로 실행
- 꼭 그럴 필요는 없지만 작동하는 비밀번호가 없고 작동하지 않는 쉘(예: )이 있는 계정을 생성하면 일반 사용자는 이를 사용할 수 없습니다. 즉, 다음 을 사용하여 로컬 또는 원격으로(예: 를 통해)
/bin/false
로그인할 수 없습니다.ssh
계정 이름. 대부분의 제한 사항과 마찬가지로 루트 계정을 사용하거나sudo
이를 극복할 수 있습니다.
- 꼭 그럴 필요는 없지만 작동하는 비밀번호가 없고 작동하지 않는 쉘(예: )이 있는 계정을 생성하면 일반 사용자는 이를 사용할 수 없습니다. 즉, 다음 을 사용하여 로컬 또는 원격으로(예: 를 통해)
답변4
예를 들어 서비스 계정은 셸을 사용하지 못할 수 있습니다. 제한된 범위와 권한으로 서비스(데몬)를 실행하는 데 사용됩니다. 제 생각에는 일반 사용자로 생성할 수 있으며 권한과 그룹 멤버십에 주의하세요. 그러나 대부분의 경우 프로그램이 설치 프로세스 중에 자동으로 생성하므로 이 작업을 수행할 필요가 없습니다. 보세요/etc/passwd
root:x:0:0:root:/root:/bin/bash
0은 사용자 공간의 계정 계층 구조를 나타내는 UID입니다. 모든 사람 위에 루트가 있고 그룹 멤버십, :root
홈 디렉토리가 있고 /root
마지막으로 /bin/bash
계정이 시스템에 "로그인"하는 데 사용하는 셸이 있습니다.
/usr/sbin/nologin
로그인 권한이 필요하지 않은 계정을 사용할 수 있습니다 .