RPM 사양에서 서비스 계정 관리


16

우리가 작성하는 서비스에 대해 부분적으로 완전한 RPM 사양을 받았습니다. 필요한 디렉토리를 만들거나, 파일을 복사하거나, 권한을 설정하는 등의 작업을 수행하지만 서비스가 실행될 필수 시스템 계정을 만들지는 않습니다. RPM이 이것을 처리하는 것이 가장 좋다는 말을 들었습니다.

Requires(pre): /usr/sbin/useradd

%pre
useradd -r -d /path/to/program -s /bin/false myservice

이는 사용자 계정 (및 관련 그룹)을 만드는 데 성공하므로 나중에 서비스 파일에 대한 소유권 / 권한을 설정하려고 할 때도 성공합니다.

내 현재 문제는 a) 사용자 계정이 이미 존재 useradd하면 (사용자가 이미 존재하기 때문에) 실패로 인해 RPM 설치가 실패 하는 것입니다. b) rpm -e myservice관련 사용자 및 그룹을 제거하는 방법을 모르겠습니다 .


//, FPM 사용을 고려 하시겠습니까?
Nathan Basanese

답변:


18

나는 실제로 비슷한 일을 한 다른 RPM 사양을 보면서 독립적으로 이것을 해결했습니다. 조건부로 사용자를 추가하려면 Ignacio의 링크를 사용하십시오. 저는 이것을 했어요:

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin myservice

%postun
/usr/sbin/userdel myservice

이렇게하면 RPM이 "자체 정리"를 수행하지만 계정이 이미 존재하더라도 설치 기능을 제공합니다.


13
이 질문에 대한 답변이지만, Ignacio가 게시 한 Fedora 링크 링크 에서 사용자 / 그룹 제거가 바람직하지 않은 이유에 대한 메모를 읽어 볼 가치가 있습니다.
CoverosGene

1
삭제 된 사용자가 가장 높은 UID / GID를 갖는 경우 UID 및 GID 재사용 문제가 있으므로 userdel을 자동으로 사용하는 것은 좋지 않습니다.
Bruno9779

1
CentOS 6.7에서는 useradd 명령이 그룹 자체를 생성하므로 / usr / sbin / groupadd 명령을 제거했습니다. 또한 동일한 이름의 그룹이 이미 존재하면 useradd가 오류와 함께 종료됩니다.
라파엘

rpmlint 보고서 "W : 위험 사용자 명령 (% postun userdel)"
Rfraile

5

패키지가 업그레이드 된 경우 이러한 방법으로 사용자를 삭제하므로 이전의 두 가지 답변 중 하나가 프로덕션 준비 상태입니다. Yum은 새 패키지를 설치 한 다음 이전 패키지를 제거합니다. 이것은 사용자없이 당신을 떠날 것입니다. 쿨하지 않아!

대신이 방법을 사용하십시오.

%postun
case "$1" in
   0) # This is a yum remove.
      /usr/sbin/userdel myservice
   ;;
   1) # This is a yum upgrade.
      # do nothing
   ;;
 esac

4

Coderer의 응답은 양호하지만 두 번째 사전 명령으로 Centos 7에서 오류가 발생합니다. 그룹을 지정해야합니다.

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice > /dev/null || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice > /dev/null || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin -g myservice myservice

%postun
/usr/sbin/userdel myservice

또한 불필요한 에코를 무시하기 위해 / dev / null로 리디렉션을 추가했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.