사용자가 시스템에 로그인하고 홈 디렉토리가없는 경우 pam_mkhomedir 을 사용하여 사용자의 홈 디렉토리를 작성 하려고 합니다. 이것은 일반적인 관행입니다. pam_mkhomedir에 대한 간단한 설명은 다음과 같습니다.
pam_mkhomedir PAM 모듈은 세션이 시작될 때 사용자 홈 디렉토리가 없으면 작성합니다. 이를 통해 사용자는 분산 파일 시스템을 사용하거나 많은 수의 디렉토리를 미리 작성하지 않고도 중앙 데이터베이스 (예 : NIS, kerberos 또는 LDAP)에있을 수 있습니다. 기본 디렉토리 (일반적으로 / etc / skel /)는 기본 파일을 복사하고 생성을위한 umask를 설정하는 데 사용됩니다.
그러나 이것은 ZFS를 실행하는 FreeBSD 8.2 시스템입니다. 사용자 당 하나의 ZFS 파일 시스템이 필요하므로 ZFS 명령을 먼저 실행해야합니다 . pam_mkhomedir
할 수 mkdir
있지만, 우리는 같은 것을해야합니다 zfs create /zpool/home/$USER
.
PAM을 사용하여 사용자의 첫 번째 로그인 세션 동안 명령을 실행할 수 있는지 아는 사람이 있습니까?
답변
PAM 모듈이라고 pam_exec
합니다. ZFS 볼륨을 확인 및 / 또는 생성하는 스크립트를 작성하는 경우 대화식 로그인, 기본 쉘 및 스켈레톤 디렉토리 등을 가정하지 않고 기존 PAM 규칙에 체인을 연결하여 멋지게 유지할 수 있습니다. 예를 들어,
session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER
또는 특정 설정에 적합한 모든 것.
(Tom Shaw가 의견에서 지적했듯이 session required pam_mkhomedir.so
중복 될 수 있습니다.)
답변
질문에 따르면 귀하의 질문에는 잘못된 가정이 포함되어 있습니다. PAM조차도 사용자의 첫 로그인인지 전혀 모릅니다. 사용자에게 홈 디렉토리가 있는지 여부 만 알 수 있습니다.
따라서 그 경고를 염두에두고 PAM은 그것을하지 않지만 /etc/bashrc
명령 앞에 사용자의 홈 디렉토리에서 도트 파일을 확인한 다음 삭제하여 쉽게 무언가를 실행할 수 있습니다 . 루트 개인이 필요하십니까? 적절하게 잠겨 sudo
있거나 setuid 바이너리가 가장 적합 할 것입니다. 두 옵션 모두 도트 파일을 사용자가 수정하거나 삭제할 수없는 위치에 배치 할 수있는 옵션을 제공합니다 (그러한 종류의 항목에 관심이있는 경우).
답변
두 가지 선택이 있습니다.
1) 디렉토리를 작성하기 전에 pam_mkhomedir의 소스를 수정하여 zfs 파일 시스템을 먼저 작성하십시오. 2) pam_mkhomedir을 정상적으로 실행 한 다음 스크립트를 추가하여 사용자가 로그 아웃 한 자체 zfs 파일 시스템에 폴더가 없는지 확인하십시오. 이러한 경우를 발견하면 / home 디렉토리를 이동하고 파일 시스템을 작성한 다음 파일을 디렉토리로 다시 이동하십시오.
초기 하루 동안 사용자를 메인 / 홈에 두는 것이 너무 많은 문제를 일으키지 않을 것으로 생각되므로 후자의 옵션 인 더 간단한 옵션으로 갈 것입니다.