삼바 공유에 대해 인증

삼바 공유에 대해 인증

저는 Ubuntu Linux를 실행하는 일부 컴퓨터를 사용하는 경향이 있습니다. 콘솔 사용자를 인증하는 중앙 서비스를 원합니다. 모든 사용자 파일(홈 디렉터리)은 한 위치에 있어야 합니다. NFS, LDAP, Kerberos 또는 Microsoft Active Directory를 통해 공유 파일 서버를 내보내는 것을 포함하여(이에 국한되지 않음) 이에 대한 합리적인 솔루션이 많이 있다는 것을 알고 있습니다. 그러나 예산 삭감으로 인해 이 중 하나도 얻지 못했습니다. 내가 가진 유일한 것은 삼바 공유가 있는 파일 서버입니다. 단일 공유에서 각 사용자는 자신만 쓸 수 있는 대상 디렉터리를 갖습니다. Samba 공유에 대해 콘솔 사용자를 인증할 수 있습니까?

답변1

지침

여기에는 여러 부분이 있습니다.

  1. 인증 자체("이 사용자가 이 컴퓨터를 사용할 수 있습니까?")
  2. 계정 데이터에는 사용자 정보, ID 매핑, 그룹 멤버십 등이 포함됩니다(예: 데이터 getent passwd).

확인하다

삼바 공유에 대해 자격 증명(사용자 및 비밀번호)을 확인하는 것은 비교적 쉽습니다. 당신은 그것을 사용할 수 있습니다 smbclient:

smbclient --user="$PAM_USER" --password="$password" --directory "$PAM_USER" --command="quit" "\\\\fileserver.example.com\\homes"

이 명령은 자격 증명이 올바르면 성공하고 서버가 자격 증명을 거부하면 실패합니다. 당신은 그것을 사용할 수 있습니다pam_exec. pam_exec는 이 답변 끝에 있는 전체 예제를 참조하세요 $PAM_USER.$password이것질문의 의도도 비슷합니다.

PAM에 추가하세요승인하다단계에서는 인증을 처리하지만 로그인 작업은 자체적으로 수행하지 않습니다.

계정

실제로 시스템을 사용하려면 시스템이 사용자를 알아야 합니다. 이는 이름 서비스 스위치(nss)에 의해 처리됩니다. 그러나 나는 삼바 관련 모듈을 알지 못합니다. 게다가 실제로는 필요하지 않습니다. 사용자가 제공한 자격 증명이 삼바 서버에 의해 확인되었음을 이미 알고 있으므로 간단하게 로컬 사용자를 동적으로 생성하고 동일한 비밀번호를 제공할 수 있습니다. 또한 sambahome일반 로컬 사용자(예: 루트)와 홈페이지가 공유에 있는 사용자를 쉽게 구별할 수 있도록 사용자를 특수 그룹에 추가하고 싶습니다 .

adduser "$PAM_USER" --quiet --gecos "" --home "/home/$PAM_USER" --no-create-home --add_extra_groups --disabled-password &&
echo "$PAM_USER:$passwd" | chpasswd &&
adduser "$PAM_USER" "sambahome"

저장

사용자의 홈 디렉토리는 삼바 공유에 있으므로 다음을 사용할 수 있습니다.pam_mount공유는 로그인 중에 자동으로 마운트됩니다.

구현하다

확인하다

이것이 내 기본값이며 /etc/pam.d/common-auth몇 줄로 확장됩니다.

auth    [success=3 default=ignore]  pam_unix.so nullok
auth    optional    pam_exec.so expose_authtok /usr/local/sbin/pam-addsmbuser
auth    [success=1 default=ignore]  pam_unix.so nullok
auth    requisite           pam_deny.so
auth    required            pam_permit.so

auth    [success=ok default=1] pam_succeed_if.so quiet_fail user ingroup sambahome
auth    optional    pam_mount.so 

첫 번째 줄( 포함 pam_unix)은 로컬 사용자의 자격 증명을 확인합니다.
성공하면 다음 3줄을 건너뛰고 pam_permit적용됩니다.
로컬 사용자가 없으면 두 번째 줄을 고려하십시오. 이렇게 pam_exec하면 pam-addsmbuser새로운 로컬 사용자가 생성됩니다. 그런 다음 pam_unix다시 쿼리합니다(세 번째 줄).

두 경우 모두 pam_mount실행되지만 사용자의 홈 디렉터리가 실제로 Samba 공유에 있는 경우에만 실행됩니다. 이를 보호하는 pam_succeed_if것은 선택 사항이지만 인증 로그를 깨끗하게 유지합니다.

계정

전반적으로 /usr/local/sbin/pam-addsmbuser다음과 같습니다.

#!/bin/sh
read password
if smbclient --workgroup="AD.FH-WEDEL.DE" --user="$PAM_USER" --password="$password" --directory "$PAM_USER" --command="quit" "\\\\fs1.ad.fh-wedel.de\\tux-homes"
then
    adduser --disabled-password --gecos "" --home "/home/ad/$PAM_USER" --no-create-home --quiet --add_extra_groups "$PAM_USER" &&
    echo "$PAM_USER:$password" | chpasswd &&
    adduser "$PAM_USER" "sambahome"
fi

이는 $PAM_USER환경 변수이며 $password표준 입력에서 읽혀집니다.

저장

관련 라인 /etc/security/pam_mount.conf.xml:

<volume fstype="cifs" server="fileserver.example.com" path="homes/%(USER)" mountpoint="/home/%(USER)" options="uid=%(USER),gid=%(USERGID),dir_mode=0700,file_mode=0700,nosuid,nodev,mfsymlinks" />
<mkmountpoint enable="1" remove="true" />

필요에 따라 마지막 옵션을 조정해야 할 수도 있습니다. 나는 이것에 대해 여러 가지 감정을 가지고 있습니다 mfsymlinks.

회의

일하려면 다음 pam_mount지역에도 있어야 합니다 /etc/pam.d/common-session.

session [success=ok default=1] pam_succeed_if.so quiet_fail user ingroup sambahome
session optional    pam_mount.so

결과

나는 몇 달 동안 이 설정을 사용해 왔습니다. 지금까지는 충분히 신뢰할 만해 보입니다.

지침

내가 아는 한, 자격 증명을 확인하는 이 방법은 사용자 이름과 비밀번호를 통해서만 작동합니다. SSH를 통한 공개 키 인증과 같은 비밀번호 없는 방법은 작동하지 않을 수 있습니다. 나는 확인하지 않았다.

시스템이 비밀번호 변경을 제대로 처리하지 않습니다. 로컬 비밀번호를 변경하면 인증은 성공 pam_unix하지만 삼바 서버는 비밀번호를 거부하고 pam_mount실패합니다. 서버 측 비밀번호 변경 시에도 비슷한 문제가 발생합니다. 이 문제는 좀 더 복잡한 스크립트를 사용하여 해결할 수 있습니다.

로컬 UID는 시스템에서 동일하지 않습니다. 그러나 나는 이것에 아무런 문제가 없다고 생각합니다.

관련 정보