it-swarm-ko.tech

UID가 동일한 여러 * NIX 계정

표준 예상 동작이 있는지 여부와 동일한 UID를 가진 Linux/Unix에서 둘 이상의 계정을 만들 때 나쁜 습관으로 간주되는지 궁금합니다. 나는 이것으로 RHEL5에 대한 몇 가지 테스트를 수행했으며 예상대로 작동했지만이 트릭을 사용하여 운명을 유혹하고 있는지 모르겠습니다.

예를 들어 동일한 ID를 가진 두 개의 계정이 있다고 가정 해 보겠습니다.

a1:$1$4zIl1:5000:5000::/home/a1:/bin/bash
a2:$1$bmh92:5000:5000::/home/a2:/bin/bash

이것이 의미하는 바는 다음과 같습니다.

  • 자신의 비밀번호를 사용하여 각 계정에 로그인 할 수 있습니다.
  • 내가 만든 파일은 동일한 UID를 갖습니다.
  • "ls -l"과 같은 도구는 UID를 파일의 첫 번째 항목 (이 경우 a1)으로 나열합니다.
  • 두 계정은 실제로 동일한 사용자이기 때문에 권한이나 소유권 문제를 방지합니다.
  • 각 계정에 대한 로그인 감사를 받기 때문에 시스템에서 일어나는 일을 추적하는 데 더 세분화됩니다.

그래서 내 질문은 다음과 같습니다.

  • 이 능력은 설계된 것입니까, 아니면 작동하는 방식입니까?
  • * nix 변형에서 일관성이 있습니까?
  • 이것이 허용되는 관행입니까?
  • 이 관행에 의도하지 않은 결과가 있습니까?

여기서 아이디어는 일반 사용자 계정이 아닌 시스템 계정에 사용하는 것입니다.

14
Tim

내 의견 :

이 능력은 설계된 것입니까 아니면 작동하는 방식입니까?

설계되었습니다. * NIX를 사용하기 시작한 이후로 사용자를 공통 그룹에 배치 할 수있었습니다. UID를 문제없이 동일하게 유지하는 기능은 모든 것과 마찬가지로 잘못 관리 할 경우 문제를 일으킬 수있는 의도 된 결과 일뿐입니다.

* nix 변형에서 일관성이 있습니까?

나는 그렇게 믿는다.

허용되는 관행입니까?

일반적으로 어떤 식 으로든 사용되는 것으로 허용됩니다.

이 관행에 의도하지 않은 결과가 있습니까?

로그인 감사 외에는 아무것도 없습니다. 정확히 그것을 원하지 않는 한, 시작하십시오.

8
user1797

모든 Unix에서 작동합니까? 예.

사용하기에 좋은 기술입니까? 아니요. 더 나은 다른 기술이 있습니다. 예를 들어, 유닉스 그룹과 엄격하게 제어되는 "Sudo"구성을 적절히 사용하면 동일한 결과를 얻을 수 있습니다.

나는 이것이 문제없이 사용되는 정확히 한 곳을 보았습니다. FreeBSD에서는 기본 쉘로/bin/sh를 갖는 "toor"(루트 철자가 거꾸로 표기 됨)라는 두 번째 루트 계정을 만드는 것이 전통적입니다. 이렇게하면 루트의 셸이 엉망이 된 경우에도 로그인 할 수 있습니다.

7
TomOnTime

귀하의 질문에 대한 정식 답변을 제공 할 수는 없지만, 일화 적으로 저희 회사는 루트 사용자와 수년 동안이 작업을 수행했으며 문제가 없었습니다. 우리는 존재하는 유일한 이유가/bin/sh 또는 bin/bash 대신/bin/ksh를 쉘로 사용하는 'kroot'사용자 (UID 0)를 만듭니다. Oracle DBA가 설치 당 3-4 개의 사용자 이름을 가지고 모두 동일한 사용자 ID로 사용자와 유사한 작업을 수행한다는 것을 알고 있습니다 (이 작업은 각 사용자와 별도의 홈 디렉토리를 갖기 위해 수행되었다고 생각합니다. 솔라리스와 리눅스에서 10 년이 지났는데 디자인대로 작동한다고 생각합니다.

일반 사용자 계정으로는이 작업을 수행하지 않습니다. 앞서 언급했듯이 초기 로그인 후에는 모든 것이 로그 파일의 이름으로 돌아가므로 한 사용자의 작업이 로그에서 다른 사용자의 작업으로 가장 될 수 있다고 생각합니다. 시스템 계정의 경우 훌륭하게 작동합니다.

4
jj33

이 관행에 의도하지 않은 결과가 있습니까?

내가 알고있는 한 가지 문제가 있습니다. Cron은이 UID 앨리어싱과 잘 작동하지 않습니다. Python 스크립트에서 "crontab -i"를 실행하여 cron 항목을 업데이트 한 다음 쉘에서 "crontab -e"를 실행하여 동일하게 수정하십시오.

이제 cron (vixie, 제 생각에)이 a1과 a2 (/ var/spool/cron/a1 및/var/spool/cron/a2에서)에 대해 동일한 항목을 업데이트했습니다.

4
Sridhar Ratnakumar

이 능력은 설계된 것입니까 아니면 작동하는 방식입니까?

그렇게 설계되었습니다.

* nix 변형에서 일관성이 있습니까?

그래야합니다.

허용되는 관행입니까?

당신이 의미하는 바에 따라 다릅니다. 이러한 유형의 것은 매우 구체적인 문제에 대한 답변입니다 (root/toor 계정 참조). 다른 곳에서는 미래에 어리석은 문제를 요구하고 있습니다. 이것이 올바른 솔루션인지 확실하지 않다면 아마도 그렇지 않을 것입니다.

이 관행에 의도하지 않은 결과가 있습니까?

사용자 이름과 UID를 상호 교환 가능한 것으로 취급하는 것은 일반적인 관습입니다. 다른 몇몇 사람들이 지적했듯이 로그인/활동 감사는 정확하지 않을 것입니다. 또한 관련 사용자 관련 스크립트/프로그램 (배포판의 useradd, usermod, userdel 스크립트, 정기적 인 유지 관리 스크립트 등)의 동작을 검토하고 싶을 것입니다.

이 두 사용자를 새 그룹에 추가하고 해당 그룹에 필요한 권한을 부여하는 것으로는 달성 할 수없는이 작업을 수행하려고하십니까?

4
sh-beta

이것은 내가 본 모든 배포판에서 예상되는 동작이며 '적'이 루트 액세스 권한이있는 계정을 숨기는 데 사용하는 일반적인 트릭입니다.

확실히 표준은 아니지만 (어디에서나 본 적이 없습니다), 적합하다고 생각되면 자신의 환경에서 이것을 사용할 수없는 이유는 없습니다.

지금 떠오르는 유일한 문제는 이것이 감사를 어렵게 만들 수 있다는 것입니다. 동일한 uid/gid를 가진 두 명의 사용자가있는 경우 로그를 분석 할 때 어떤 사용자가 무엇을했는지 파악하기 어려울 것이라고 생각합니다.

3
Michael Gorsuch

기본 그룹 ID를 공유하는 것이 일반적이므로 질문은 실제로 UID 를 중심으로 진행됩니다.

나는 루트 암호를 누설하지 않고도 누군가에게 루트 액세스 권한을 부여하기 위해이 작업을 수행했습니다. (수도가 더 나은 선택이었을 것 같지만)

내가주의해야 할 가장 중요한 것은 사용자 중 하나를 삭제하는 것과 같은 것입니다. 프로그램 may 혼란스러워서 두 사용자 또는 둘 다에 속하는 파일 또는 유사한 것을 삭제합니다.

사실, 프로그래머는 아마도 사용자와 UID 사이에 1 : 1 관계 가정라고 생각하므로 userdel에 대해 설명한 것과 유사한 다른 프로그램에서 예기치 않은 결과가 발생할 수 있습니다.

3
Brent

BTW-이 질문/답변은 오늘날의 OS에 대해 업데이트되었습니다.

redhat : 고유 한 UID 및 GID 번호 할당 관리 에서 인용하면 UID 및 GID의 사용과 관리 방법 및 생성기 (ID 서버)를 설명합니다.

임의의 UID 및 GID 값을 생성하고 동시에 복제본이 동일한 UID 또는 GID 값을 생성하지 않도록해야합니다. 단일 조직에 여러 개의 서로 다른 도메인이있는 경우 고유 한 UID 및 GID 번호가 IdM 도메인을 교차 할 수도 있습니다.

마찬가지로 시스템에 대한 액세스를 허용하는 유틸리티는 예기치 않게 작동 할 수 있습니다 (동일한 참조).

두 항목에 동일한 ID 번호가 할당 된 경우 해당 번호를 검색 할 때 첫 번째 항목 만 반환됩니다.

문제는 "최초"의 개념이 잘못 정의되었을 때 발생합니다. 설치된 서비스에 따라 사용자 이름은 일관성없는 요인에 따라 다른 사용자 이름을 반환하는 가변 크기의 해시에 보관 될 수 있습니다. (나는 때때로 ID와 함께 2 개의 사용자 이름을 사용하려고 시도했기 때문에 이것이 사실이라는 것을 알고 있습니다. 하나는 로컬 사용자 이름이고 다른 하나는 UID에 매핑하려는 domain.username입니다. 완전히 다른 방법),하지만 "usera"로 로그인하여 "who"또는 "id"를 수행하고 "userb"OR "usera"-무작위로 볼 수 있습니다.

그룹에서 UID의 여러 값을 검색하기위한 인터페이스가 있지만 (단일 GID를 가진 그룹은 여러 UID와 연결되도록 설계됨) 하나의 UID에 대한 이름 목록을 반환 할 수있는 이식 가능한 인터페이스가 없습니다. 또는 시스템 간의 유사한 동작 또는 동일한 시스템의 응용 프로그램조차도 불행하게도 놀랄 수 있습니다.

Sun (현재 Oracle) yp (yellowpages) 또는 NIS (NetworkInformationServices)에는 고유성 요구 사항에 대한 많은 참조가 있습니다. 여러 서버 및 도메인 (예 : id_allocd, gid_allocd-UID 및 GID 할당 자 데몬)에 unique ID를 할당하도록 특수 기능 및 서버가 설정됩니다. 맨 페이지

확인할 수있는 세 번째 소스는 NFS 계정 매핑에 대한 Microsoft의 서버 설명서입니다. NFS는 유닉스 파일 공유 프로토콜이며 파일 권한 및 액세스가 ID에 의해 유지되는 방식을 설명합니다. 거기에서 그들은 다음과 같이 씁니다.

  • UID. 이것은 UNIX 운영 체제에서 사용자를 식별하기 위해 사용하는 부호없는 정수이며 passwd 파일에서 고유해야합니다.

  • GID. 이것은 그룹을 식별하기 위해 UNIX 커널에서 사용하는 부호없는 정수이며 그룹 파일에서 고유해야합니다. MS-NFS- 관리 페이지

일부 OS는 여러 이름/UID (BSD 파생물 일 수도 있음)를 허용했을 수 있지만 대부분의 OS는 이것이 고유 한 것에 의존하며 그렇지 않은 경우 예상치 않게 작동 할 수 있습니다.

주-누군가가이 날짜 항목을 고유하지 않은 UID/GID를 수용하기위한 최신 유틸리티 지원으로 언급 했으므로이 페이지를 추가하고 있습니다. 대부분은 그렇지 않습니다.

2
Astara

좋은 생각인지 아닌지는 모르겠지만 위의 동작을 몇 군데에서 사용합니다. 대부분은 ftp/sftp 서버에 액세스하고 웹 사이트 콘텐츠를 업데이트하는 데 사용되는 계정을위한 것입니다. 그것은 아무것도 망가지지 않는 것처럼 보였고 여러 계정을 사용했을 때보 다 권한을 더 쉽게 처리하는 것처럼 보였습니다.

1
Zoredache

동일한 UID를 가진 여러 계정을 사용하여 발생하는 (다소 모호한) 문제가 발생하여 이것이 좋은 방법이 아닌 이유에 대한 예로 공유하겠다고 생각했습니다.

필자의 경우 공급 업체가 RHEL 7에 Informix 데이터베이스 서버와 웹 애플리케이션 서버를 설정했습니다. 설정하는 동안 UID가 0 인 여러 "루트"계정이 생성되었습니다 (이유는 묻지 마십시오). 즉, "root", "user1"및 "user2"는 모두 UID 0을 갖습니다.

RHEL 7 서버는 나중에 winbind를 사용하여 Active Directory 도메인에 가입되었습니다. 이 시점에서 Informix DB 서버는 더 이상 시작할 수 없습니다. oninit 실행이 실패하고 "Must be a DBSA to run this program"라는 오류 메시지가 표시됩니다.

문제 해결 중에 발견 한 내용은 다음과 같습니다.

  1. Active Directory 가입 시스템에서 id root 또는 getent passwd 0 (UID 0을 사용자 이름으로 확인)를 실행하면 "root"대신 "user1"또는 "user2"가 임의로 반환됩니다.

  2. Informix는 시작하는 사용자의 텍스트 사용자 이름이 "root"인지 여부를 확인하기 위해 문자열 비교에 의존하고 있었으며 그렇지 않으면 실패했습니다.

  3. Winbind가 없으면 id rootgetent passwd 0가 사용자 이름으로 지속적으로 "root"를 반환합니다.

수정 사항은 /etc/nscd.conf에서 캐싱 및 지속성을 비활성화하는 것입니다.

enable-cache    passwd      no
persistent      passwd      no

이 변경 후 UID 0은 다시 한 번 일관되게 "루트"로 확인되고 Informix가 시작될 수 있습니다.

이것이 누군가에게 유용하기를 바랍니다.

0