집 없이 사용자를 생성하는 올바른 방법(shadow.service의 경우)

집 없이 사용자를 생성하는 올바른 방법(shadow.service의 경우)

Arch Linux에서 홈 디렉터리 없이 사용자 만들기를 사용하면 useradd -M test다음과 같은 항목이 생성됩니다 /etc/passwd.

test:x:1001:1001::/home/test:/bin/bash

하지만 /home/test존재하지 않기 때문에 shadow.service실패가 발생합니다. 홈 디렉터리를 비워 두면 동일한 오류가 발생합니다. 내가 찾은오래된 실권장되지만 /dev/null이것이 최선의 솔루션인지는 확실하지 않습니다. ATM을 무시하는 것이 최선의 해결책인 것처럼 보이지만 더 나은 방법이 있을 수도 있습니다.


shadow.service그것은 다음과 같이 요약 pwck됩니다 grpck.

### [...]
ExecStart=/bin/sh -c '/usr/bin/pwck -r || r=1; /usr/bin/grpck -r && exit $r
### [...]

답변1

데비안 기반

Debian 기반 시스템을 사용하는 경우 새로운 - 여러 Debian 기반 배포판에 기본적으로 이미 존재함(다음 패키지 버전의 소스 코드에 이미 포함되어 있음 pwck) login.defsshadow-utils존재하지 않는 케이스 홈 디렉토리를 /nonexistent다음 과 함께 올바르게 해석합니다. 길.

최신 패키지를 얻으면 다음 옵션을 shadow-utils구성하고 추가(또는 주석 처리 제거)할 수 있습니다 ./etc/login.defs

man 8 pwck최신 커밋의 새로운 내용은 다음과 같습니다 .

   NONEXISTENT (string)
      If a system account intentionally does not have a home directory
      that exists, this string can be provided in the /etc/passwd entry
      for the account to indicate this. The result is that pwck will
      not emit a spurious warning for this account.

실제 옵션은 이렇 /etc/login.defs습니다

# The [string] can be whatever word/path you want to use in your /etc/passwd file to
# correspond to a nonexistent directory. However, /nonexistent should be used as the default 
# nonexisting home directory, as that is already in use in many distributions. 

NONEXISTENT [string]

pwck이 옵션은 존재하지 않는 홈 디렉터리를 계정하기 위해 특별히 추가되었으며 shadow.service사용 중인 구성의 유효성과 무결성을 확인하는 기본 명령입니다./etc/passwd/etc/login.defs

이 구성 옵션을 사용하는 경우 sudo adduser -M -d /nonexistent [username]다음에 사용하면 pwck -r오류가 발생하지 않습니다.


기타 배포판

많은 데비안 기반 배포판이 이미 이 특정한 경우에 이 접근 방식을 사용하고 있지만, 존재하지 않는 홈 디렉토리를 처리하기 위해 자체 시스템을 사용하는 다른 변형도 있습니다.

그러나 일반적으로 다음을 수행하여 배포판이 존재하지 않는 홈 디렉토리 상황을 어떻게 결정하는지 테스트할 수 있습니다.

sudo grep nobody /etc/passwd

권한이 없는 특정 사용자는 기본적으로 자체 홈 디렉토리 경로를 갖지 않지만 파일에서 발견된 해당 값은 /etc/passwd시스템이 이를 처리하는 방법에 대한 단서를 제공합니다.

예를 들어:

  • RHEL/CentOS는 /홈 디렉토리를 안전 장치로 사용하지만 다음을 nobody통해 로그인 셸을 비활성화합니다./sbin/nologin

  • Debian 기반 배포판은 현재 /nonexistent홈 디렉토리와 /usr/sbin/nologin쉘 에 사용됩니다.

  • SUSE Linux는 적어도 2019년 중반까지 /var/lib/nobody디렉터리와 /bin/bash셸에 사용되지만 일부 보안 인식 메모에서는 /var/lib/nobody/bin/false

  • OSx는 사용해왔고 앞으로도 계속 사용할 수 있습니다 /var/empty./usr/bin/falsenobody

  • /nonexistent쉘을 사용하지만 사용을 허용하는 다른 배포판을 발견했습니다/bin/sh


사용 시의 문제점 sudo useradd [username]은 시스템 사전 설정 옵션을 /etc/login.defs위반하더라도 실행 시 이를 무시할 수 있다는 것입니다 /etc/passwd.

테스트한 지 꽤 시간이 지났지 useradd만 소스 코드에 큰 변화가 없는 한 -d옵션 플래그에 대한 유효성 검사기에는 많은 제한 사항이 있습니다. 물론 optarg[0]제공된 경로가 실제로 있고 /경로가 포함되어 있는지 확인하는 작업이 있지만 :실행하는 모든 테스트를 사용하므로 * 실제로 오류 없이 실행되더라도 놀라지 않을 것입니다.sudo useradd -d /home/my:base [username]

관련 정보