![읽기 전용 파일 시스템에서 조건부로 비밀번호 잠금 해제](https://linux55.com/image/99415/%EC%9D%BD%EA%B8%B0%20%EC%A0%84%EC%9A%A9%20%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%EC%84%9C%20%EC%A1%B0%EA%B1%B4%EB%B6%80%EB%A1%9C%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%20%EC%9E%A0%EA%B8%88%20%ED%95%B4%EC%A0%9C.png)
저는 일반적으로 로그인되지 않는 임베디드 시스템을 구축하고 있지만 개발자가 디버그하고 개발할 수 있는 방법이 필요합니다. rootfs는 일반적으로 읽기 전용입니다(그러나 읽기-쓰기로 다시 마운트할 수 있음).
제가 고려하고 있는 해결책은 루트 비밀번호를 잠긴 상태로 유지하는 것입니다( passwd -l
). 특수 파일이 이동식 미디어에 존재하는 경우 로그인할 수 있도록 비밀번호를 잠금 해제하세요. 재시작 후 특수 파일이 존재하지 않으면 비밀번호가 다시 잠깁니다.
이 특수 파일은 문서화되지 않았으며 최종 사용자가 사용하지 않습니다. 개발자는 마음대로 로그인할 수 있도록 이 파일을 만드는 경우가 많습니다. 로그인하는 또 다른 방법은 SSH 클라이언트로, 서버로 전달된 포트를 열어 SSH 로그인에 키 기반 인증을 사용할 수 있도록 해줍니다. 개발을 위해서는 인터넷 연결 없이 들어갈 수 있는 방법이 필요합니다.
이를 달성하는 가장 간단한 방법은 다음과 같습니다.
if passwd_is_locked and enable_login_exists:
remount_rw()
unlock_passwd()
remount_ro()
elif not passwd_is_locked and not enable_login_exists:
remount_rw()
lock_passwd()
remount_ro()
else:
pass
나는 파일을 다시 마운트하고 수정하는 것을 좋아하지 않습니다. 임시 폴백 구성(예: /tmp
)을 사용하는 것이 좋습니다.
나는 이 명령을 파헤쳐 보았다 passwd
. --repository
네임서비스 스위칭 시스템( )을 통해 일부 데이터( )의 여러 소스를 지원하는 것 같습니다 nsswitch.conf
. 루트 계정은 항상 일반 /etc/shadow
파일로 돌아가야 하는 것처럼 보이기 때문에 특히 루트 계정의 경우 이것이 실행 가능한 옵션인지 확실하지 않습니다. 저는 시스템 관리자가 아니라는 점을 인정합니다. 그래서 어쩌면 제가 이해하지 못할 수도 있습니다.
passwd
또 다른 옵션이 있습니다 --root
. cp -a /etc /lib /tmp && passwd --root /tmp
편집을 거쳐야 하는데 /tmp
이것으로 유용한 일을 할 수 있을지 모르겠습니다.
et al을 쓰기 가능한 영역을 가리키는 심볼릭 링크로 변경 /etc/passwd
하고 파일을 수동으로 편집하면 작동하는 것 같지만 명령을 사용할 수 없습니다 passwd
.
저는 PAM을 사용하고 있지 않지만, 좋은 해결책이 있다면 활성화할 수 있을 것입니다.
답변1
나는 (initrd 내에서) 다음과 같은 것을 사용하게 되었습니다:
if is_dev_mode ; then
chroot $ROOTFS_MOUNT /usr/bin/passwd --delete root
else
chroot $ROOTFS_MOUNT /usr/bin/passwd --lock root
fi
sync
이는 rootfs가 읽기 전용으로 다시 마운트되기 전에 발생합니다. 별로 마음에 들지는 않지만 다른 Unionfs(이미 여러 개가 있음)를 사용하는 것보다 낫다고 생각합니다. initrd에는 passwd
기본 OS가 제공하는 멋진 옵션이 없지만 chroot
잘 작동합니다.