LDAP 서버 인증을 사용하는 Linux의 단일 사용자에 대한 여러 로그인 이름

LDAP 서버 인증을 사용하는 Linux의 단일 사용자에 대한 여러 로그인 이름

내 연구실에는 약 30개의 시스템(독립형 PC)이 있으며 이를 사용할 학생은 약 200명에 이릅니다. 각 시스템에는 200명의 사람들이 알고 있는 비밀번호가 123456인 USER라는 계정이 있습니다. 따라서 그들은 무료인 시스템에 액세스하고 언젠가는 작동합니다. 그들의 사용은 단지 등록부 항목으로 기록됩니다. LDAP 서버에서 쉽게 얻을 수 있는 별도의 로그인과 비밀번호를 각 사용자에게 부여하고 싶습니다. 하지만 각 PC에 200개의 사용자 계정을 만들고 싶지는 않습니다. 200명의 모든 로그인을 USER 계정 자체에 매핑하고 싶습니다. 그들은 동일한 프로필과 동일한 홈 디렉터리를 갖게 됩니다. 개인의 연구실 사용 시간과 날짜를 파일에 기록하고 싶습니다. LDAP나 다른 소프트웨어를 사용하여 이 작업을 수행할 수 있습니까?

답변1

SLESKE의 의견에 동의하지만 그의 의견을 확장하려면 먼저 몇 가지 작업을 수행해야 합니다!

Linux에서는 로그인을 제어하는 ​​라이브러리를 /etc/passwd에서 검색하는 대신 LDAP 백엔드를 사용하도록 리디렉션해야 합니다.

OpenLDAP를 사용하는 경우 다음 두 가지 사항을 확인해야 합니다.

LDAP 쿼리를 캐시하는 NSCD(Name Server Caching Daemon)입니다. 사용자가 로그인하는 각 호스트에서 이를 실행합니다.

NSSLDAP(LDAP용 이름 서버 스위치)는 로그인이 NSCD를 쿼리하도록 하는 접착제입니다. NSCD는 다시 LDAP 백엔드를 쿼리하거나 NSCD가 오래되었거나 사용할 수 없는 경우 NSSLDAP는 LDAP 백엔드를 직접 쿼리합니다.

따라서 배포에 포함되지 않은 경우 각 워크스테이션에 OpenLDAP, NSCD 및 NSSLDAP를 설치해야 합니다. LDAP 프로토콜을 사용하는 방법을 알고 있는 클라이언트 라이브러리를 얻으려면 OpenLDAP가 필요합니다.

그런 다음 일부 파일을 편집해야 합니다.

/etc/nscd.conf 이 파일은 캐시되는 내용을 제어합니다. 다음은 Samba 서버 역할을 하는 내 시스템 중 하나의 덤프입니다.

    enable-cache            passwd          yes
    positive-time-to-live   passwd          10
    negative-time-to-live   passwd          3
    suggested-size          passwd          211
    check-files             passwd          yes
    persistent              passwd          yes
    shared                  passwd          yes
    max-db-size             passwd          33554432
    auto-propagate          passwd          yes

    enable-cache            group           yes
    positive-time-to-live   group           3600
    negative-time-to-live   group           3
    suggested-size          group           211
    check-files             group           yes
    persistent              group           yes
    shared                  group           yes
    max-db-size             group           33554432
    auto-propagate          group           yes

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           3
    suggested-size          hosts           211
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

그런 다음 nsswitch.ldap 파일을 수정해야 합니다(여기서 설명하기에는 너무 많은 DOC를 읽어보십시오).

아주 중요한 것 하나!!!!

LDAP 서버가 다운된 경우 로컬 루트 계정이 계속 로그인할 수 있는지 확인하고 싶을 것입니다. 또는 워크스테이션 중 하나에 네트워크 문제가 있는 경우 계속 로그인할 수 있는지 확인하고 싶을 것입니다.

따라서 Linux 상자가 부팅될 때 항상 다음과 같은 위치에 nsswitch.conf 파일을 복사하는 스크립트가 있습니다.

비밀번호: compat 그룹: compat

호스트: 파일 DNS 네트워크: 파일

서비스: 파일 프로토콜: 파일 rpc: 파일 에테르: 파일 넷마스크: 파일 넷그룹: 파일 bootparams: 파일

자동 마운트: 파일 별칭: 파일

로그인에 LDAP를 사용할 준비가 되면 nsswitch.conf 파일을 다음으로 바꿉니다.

passwd: 파일 ldap 그룹: 파일 ldap 섀도우: 파일 ldap

호스트: 파일 DNS 네트워크: 파일

서비스: 파일 프로토콜: 파일 rpc: 파일 에테르: 파일 넷마스크: 파일 넷그룹: 파일 bootparams: 파일

자동 마운트: 파일 별칭: 파일

전자를 사용하면 로컬로 로그인할 수 있고 후자는 둘 다 허용하지만 NSCD의 캐싱으로 인해 NSCD가 오래되어 로그인 지연이나 문제가 발생하는 데 시간이 걸립니다.

이에 대해 할 말이 더 많지만 이것이 여러분의 시작을 돕기를 바랍니다.

참고: 저는 Pozix Linux 및 Pozix Linux Small Business Server의 개발자이며 이러한 방식으로 실행되는 Samba 시스템이 400개가 넘습니다!

동의합니다. TRS80의 의견은 유효하지만 여기에는 /etc/passwd 파일에서 LDIF 파일을 생성하는 데 사용하는 스크립트가 있습니다. 결과 LDIF 파일을 사용하여 LDAP 데이터베이스를 채울 수 있습니다. 여러 워크스테이션에서 이 스크립트를 실행하는 경우 중복된 계정 이름을 제거하여 고유한 UID를 가진 고유한 계정 이름이 되도록 해야 합니다.

cat /etc/passwd | while read i; do
  uid=`echo $i | cut -d : -f 1`
  uidNumber=`echo $i | cut -d : -f 3`
  gidNumber=`echo $i | cut -d : -f 4`
  gecos=`echo $i | cut -d : -f 5`
  homeDirectory=`echo $i | cut -d : -f 6`
  loginShell=`echo $i | cut -d : -f 6`
  userPassword=`cat /etc/shadow | grep $uid | cut -d : -f 2`

  echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
  echo "objectClass: account"
  echo "objectClass: posixAccount"
  echo "cn: $gecos"
  echo "uid: $uid"
  echo "uidNumber: $uidNumber"
  echo "gidNumber: $gidNumber"
  echo "homeDirectory: $homeDirectory"
  echo "loginShell: $loginShell"
  echo "userPassword: $userPassword"

done

답변2

모든 계정에 대해 uidNumber 및 homeDirectory 속성을 동일하게 설정하면 아마도 원하는 대로 작동할 것입니다.

답변3

각 PC에 200개의 사용자 계정을 만들 필요는 없습니다. Linux는 LDAP에서 모든 사용자 정보를 가져올 수 있으므로 계정이 로컬(예: /etc/passwd)에 존재하지 않습니다. 그러면 홈 디렉터리는 일반적으로 네트워크 드라이브(NFS 또는 유사)에 있습니다.

이것이 표준 접근 방식입니다. 이 일을 하지 않는 이유가 있나요?

관련 정보