내 연구실에는 약 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 또는 유사)에 있습니다.
이것이 표준 접근 방식입니다. 이 일을 하지 않는 이유가 있나요?