AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 38154
Accepted
Akilan
Akilan
Asked: 2009-07-10 00:46:53 +0800 CST2009-07-10 00:46:53 +0800 CST 2009-07-10 00:46:53 +0800 CST

使用LDAP服务器身份验证的Linux中单个用户的多个登录名

  • 772

我的实验室中有大约 30 台系统(独立 PC),将近 200 名学生将使用它。每个系统都有一个名为 USER 的帐户,其密码为 123456,这 200 人都知道。因此,他们可以访问任何免费的系统并工作一段时间。只需注册簿条目即可记录它们的使用情况。我想给每个用户单独的登录名和密码,这很容易通过 LDAP 服务器实现。但我不想在每台 PC 上创建 200 个用户帐户。我想将所有 200 个人登录映射到用户帐户本身。它们将具有相同的配置文件和相同的主目录。我只想在文件中记录个人实验室使用的时间和日期。这可以使用 LDAP 或其他软件来完成吗?

linux login ldap openldap
  • 3 3 个回答
  • 3135 Views

3 个回答

  • Voted
  1. Best Answer
    Kilo
    2009-07-10T05:01:07+08:002009-07-10T05:01:07+08:00

    同意 SLESKE 但要扩展他/她的评论,您需要先做几件事!

    在 Linux 中,控制登录的库需要重定向以使用 LDAP 后端,而不是在 /etc/passwd 中查找内容。

    如果您使用的是 OpenLDAP,那么您将需要查看两件事:

    NSCD(名称服务器缓存守护程序)缓存 LDAP 查询。您将在用户登录的每个主机上运行它。

    NSSLDAP(LDAP 的名称服务器切换)这是导致登录查询 NSCD 的粘合剂,NSCD 反过来会查询 LDAP 后端,或者如果 NSCD 过时或不可用,NSSLDAP 将直接查询 LDAP 后端。

    因此,如果不是您的发行版的一部分,您将需要在每个工作站上安装 OpenLDAP、NSCD 和 NSSLDAP。需要 OpenLDAP 来获取知道如何使用 LDAP 协议的客户端库。

    然后你需要对一些文件进行编辑:

    /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 文件(阅读上面的文档,这里太多了)。

    一件非常重要的事情!!!!

    如果您的 LDAP 服务器已关闭,您需要确保本地 root 帐户仍然可以登录。或者如果您的一个工作站出现网络问题,您需要确保您仍然可以登录。

    所以当我的 Linux 机器启动时,我有一个脚本,它总是将 nsswitch.conf 文件复制到如下所示的位置:

    密码:compat 组:compat

    主机:文件 dns 网络:文件

    服务:文件 协议:文件 rpc:文件 ethers:文件 网络掩码:文件 网络组:文件 bootparams:文件

    自动挂载:文件别名:文件

    一旦我准备好使用 LDAP 登录,我将 nsswitch.conf 文件替换为以下内容:

    passwd:文件 ldap 组:文件 ldap 影子:文件 ldap

    主机:文件 dns 网络:文件

    服务:文件 协议:文件 rpc:文件 ethers:文件 网络掩码:文件 网络组:文件 bootparams:文件

    自动挂载:文件别名:文件

    前者允许我在本地登录,后者允许两者,但由于 NSCD 的缓存,NSCD 需要时间才能过时,从而导致登录延迟或问题。

    关于这一点还有很多话要说,但希望这能让你开始。

    顺便说一句:我是 Pozix Linux 和 Pozix Linux Small Business Server 的开发人员,我们有超过 400 个 Samba 系统以这种方式运行!

    同意,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
    
    • 4
  2. TRS-80
    2009-07-10T01:53:21+08:002009-07-10T01:53:21+08:00

    如果您将每个帐户的 uidNumber 和 homeDirectory 属性设置为相同,那么事情可能会按照您想要的方式工作。

    • 1
  3. sleske
    2009-07-10T02:54:15+08:002009-07-10T02:54:15+08:00

    您无需在每台 PC 上创建 200 个用户帐户。Linux 可以从 LDAP 获取所有用户信息,因此这些帐户在本地不存在(即在 /etc/passwd 中)。主目录通常位于网络驱动器(NFS 或类似驱动器)上。

    这是标准方法。你不这样做有什么原因吗?

    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve