사용자 계정과 서비스 계정의 차이점을 알고 싶습니다.
예를 들어 Jenkins
우분투에 설치된 것은 사용자가 아니라 서비스 계정 이라는 것을 알고 있습니다 .
- 서비스 계정은 무엇입니까?
- 우리가 필요할 때?
- 서비스 계정은 어떻게 만듭니 까?
사용자 계정과 서비스 계정의 차이점을 알고 싶습니다.
예를 들어 Jenkins
우분투에 설치된 것은 사용자가 아니라 서비스 계정 이라는 것을 알고 있습니다 .
답변:
사용자 계정은 실제 사용자가 사용하고 서비스 계정은 웹 서버, 메일 전송 에이전트, 데이터베이스 등의 시스템 서비스에서 사용합니다. 규칙에 따라 서비스 계정은 낮은 범위 (예 : <1000 정도)의 사용자 ID를 갖습니다. . UID 0을 제외하고 서비스 계정에는 특별한 권한이 없습니다. 서비스 계정은 일반적으로 특정 리소스, 장치 특수 파일을 소유 할 수 있지만 수퍼 유저와 같은 권한은 없습니다.
서비스 계정은 일반 사용자 계정처럼 만들 수 있습니다 (예 :) useradd
. 그러나 서비스 계정은 일반적으로 서비스 소프트웨어 설치시 패키지 관리자가 작성하고 구성합니다. 따라서 관리자 라하더라도 서비스 계정 생성에 직접적인 관심을 갖는 일은 거의 없습니다.
정당한 이유 : 사용자 계정과 달리 서비스 계정에는 종종 "적절한"로그인 셸이 없습니다. 즉, /usr/sbin/nologin
로그인 셸 (또는 예전에는 /bin/false
)입니다. 또한, 서비스 계정은 일반적으로 고정되어, 즉 그것은 (기존의 로그인하는 것은 불가능 /etc/passwd
하고 /etc/shadow
,이 같은 임의의 값에 암호 해시를 설정함으로써 달성 될 수있다 *
거나 x
). 이는 서비스 계정을 남용으로부터 보호하기위한 것입니다 (심층 방어 ).
각 서비스에 대해 개별 서비스 계정을 갖는 것은 두 가지 주요 목적을 제공합니다. 이는 하나의 서비스로 사건 발생시 영향을 줄이기위한 보안 조치 ( 분할 )이며, 어떤 서비스에 속하는 리소스를 쉽게 추적 할 수있어 관리를 간소화합니다. . 자세한 내용 은 관련 질문에 대한 this 또는 this answer를 참조하십시오.
원래 사용자는 시스템을 사용하여 사람과 어울리게 되었기 때문에 이름입니다. 각 프로세스는 특정 사용자로 실행되며 각 파일은 특정 사용자가 소유합니다. root라는 특수 사용자는 특정 인간 사용자, 즉 운영 체제 자체에 속하지 않는 것들에 사용됩니다. root는 운영 체제 자체에 해당하므로 모든 권한이 있습니다.
곧 사람들은 광범위한 권한없이 여러 시스템 사용자를 만드는 것이 편리하다는 것을 알게되었습니다. 이를 통해 머신에서 실행되는 다양한 서비스를 분리 할 수 있으므로 서로의 발가락을 밟지 않습니다. 서비스 계정 (또는 "시스템 계정",이 두 용어는 동의어 임)은 시스템을 사용하는 사람이 아니라 시스템에서 실행되는 서비스에 해당하는 계정입니다. 일반적으로 시스템에서 자체 권한 세트 (예 : 자체 파일, 자체 네트워크 포트 등)가있는 각 작업에 대한 서비스 계정이 있습니다.
휴먼 vs 시스템 / 서비스 계정에 대한 공식적인 정의는 없습니다. 커널은 신경 쓰지 않습니다 (UID 0을 가진 사용자에게 많은 권한을 부여하는 것 제외). 대부분의 관리 명령도 중요하지 않습니다. 몇 가지 일반적인 차이점은 다음과 같습니다.
/bin/sh
나 /bin/bash
또는 /bin/csh
. 일부 시스템 사용자가 쉘 (거의 항상있다 /bin/sh
), 다른 사람은 없습니다, 예를 들어 (그들이 사용하기위한 것입니다 방법에 따라서 할 su foo
필요 foo
) 쉘을 가지고./etc/passwd
같은 다른 파일에 있습니다 /etc/shadow
./home
(또는 일부 사이트 특정 위치)있는 반면 시스템 사용자의 홈 디렉토리는 일반적으로 아래에 /home
있지 않고 존재하지 않을 수 있습니다 (그러나 예외는 있습니다).여러 컴퓨터에서 계정을 공유하는 사이트에는 일반적으로 NIS 또는 LDAP 를 통해 액세스 할 수있는 사용자 목록이 포함 된 중앙 서버가 있습니다 . 의 passwd
항목은 /etc/nsswitch.conf
사용자 정보를 찾을 위치를 지정합니다. /etc/passwd
네트워크 전체 데이터베이스 의 로컬 및 실제 사용자에 시스템 사용자가있는 것이 일반적 이지만 네트워크 전체 데이터베이스에 시스템 사용자가있는 경우가 있습니다 (일관된 UID를 적용하여 서버 및 데이터 복제를 용이하게 함). 로컬 파일의 휴먼 사용자 (네트워크가 호스 인 된 경우에도 로그인 할 수 있도록 함).
시스템 사용자로 위장한 사람이 액세스 할 수있는 계정은 일반적으로 실제 이름은 없지만 시스템 범위에 사용자 ID가있는 동안 로그인 쉘과 비밀번호 세트 또는 SSH 키를 갖습니다. 실제로 제거하면 일부 서비스의 작동이 중지되는 실제 시스템 계정을 사용하는 것이 더 좋습니다. 그러나 잠재적 인 공격을 탐지하기위한 강력하고 빠른 규칙을 가질 수는 없습니다. 정의상 공격자는 규칙을 따르지 않습니다.
서비스 계정과 휴먼 계정은 동일한 명령으로 관리되며 동일한 파일에 기록됩니다. 계정 작성 명령에는 사람 대 서비스 사용자에게 적절한 기본값을 설정하는 옵션 (예 : 적절한 범위에서 사용자 ID를 선택하고 사람에 대한 비밀번호를 프롬프트하고 서비스에 대한 비밀번호 인증을 사용 안함)하는 옵션이 있습니다. 예를 들어 Linux의 adduser
vs adduser --system
또는 useradd
vs.useradd -r
init
, systemd
루트로 실행하거나 유사한, 신속하게 위험을 제한하기 위해 서비스 계정으로 다운 그레이드. 사용 된 OS에 따라 응용 프로그램 계정에는 일반 계정보다 더 많은 권한이 부여 될 수 있습니다 (예 : 권한있는 TCP 포트에 바인딩 할 수있는 권한). 전화 fork
/ exec
. 이 경우 서비스를 서비스 계정으로 다운 그레이드 할 필요가 없으며 서비스 계정으로 시작할 수 있습니다./bin/false
는 없으며 일반 사용자가 사용할 수 없습니다. 즉, 로컬 또는 원격으로 로그인 할 수있는 방법이 없습니다 (예 : 를 통해 ssh
계정 이름을 사용합니다. 대부분의 제한 사항과 마찬가지로 루트 계정을 사용하거나 sudo
극복 할 수 있습니다.예를 들어 서비스 계정에는 셸을 사용하는 기능이 없을 수 있습니다. 제한된 범위 및 권한으로 서비스 (데몬)를 실행하는 데 사용됩니다. 내 의견은 권한과 그룹 멤버십에주의하면서 일반 사용자로 만들 수 있다는 것입니다. 그러나 대부분의 경우 프로그램은 설치 중에 자동으로 프로그램을 작성하기 때문에 필요하지 않습니다. 살펴보기/etc/passwd
root:x:0:0:root:/root:/bin/bash
0은 UID이며, 사용자 공간에서 계정의 계층 구조를 특성화하고, 루트는 모든 사용자보다 상위에 있으며, 그룹 멤버쉽 :root
을 홈 디렉토리 /root
로 지정하여 계정 /bin/bash
에서 시스템에 '로그인'하는 데 사용하는 쉘 입니다.
/usr/sbin/nologin
로그인 권한을 원하지 않는 계정에 사용할 수 있습니다 .