![집 없이 사용자를 생성하는 올바른 방법(shadow.service의 경우)](https://linux55.com/image/182679/%EC%A7%91%20%EC%97%86%EC%9D%B4%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94%20%EC%98%AC%EB%B0%94%EB%A5%B8%20%EB%B0%A9%EB%B2%95(shadow.service%EC%9D%98%20%EA%B2%BD%EC%9A%B0).png)
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.defs
은 shadow-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/false
nobody
/nonexistent
쉘을 사용하지만 사용을 허용하는 다른 배포판을 발견했습니다/bin/sh
사용 시의 문제점 sudo useradd [username]
은 시스템 사전 설정 옵션을 /etc/login.defs
위반하더라도 실행 시 이를 무시할 수 있다는 것입니다 /etc/passwd
.
테스트한 지 꽤 시간이 지났지 useradd
만 소스 코드에 큰 변화가 없는 한 -d
옵션 플래그에 대한 유효성 검사기에는 많은 제한 사항이 있습니다. 물론 optarg[0]
제공된 경로가 실제로 있고 /
경로가 포함되어 있는지 확인하는 작업이 있지만 :
실행하는 모든 테스트를 사용하므로 *
실제로 오류 없이 실행되더라도 놀라지 않을 것입니다.sudo useradd -d /home/my:base [username]