【问题标题】:Useradd using crypt password generationUseradd 使用 crypt 密码生成
【发布时间】:2010-11-04 11:12:11
【问题描述】:

我正在研究一个我认为非常简单的脚本来使用“useradd”动态创建一个 FTP 用户。这个过程的几个部分我不熟悉,一整天的研究并没有让我走得太远。这是我所拥有的:

password="pass"
pass=$(perl -e 'print crypt($ARGV[0], "wtf")' $password)
useradd -d HOME_DIR -s /bin/bash -g GROUP -p $pass -f -1 testing

注意事项

  1. HOME_DIR 和 GROUP 是占位符
  2. 'useradd' 的 home/base_dir (-d, -b) 或组 (-g) 功能没有问题

主题:

  1. 为什么我的密码生成工作不起作用?
  2. /bin/bash 是纯 FTP 用户使用的正确 shell,还是我应该使用 /bin/false 或不同的 shell?
  3. 默认情况下,useradd 会禁用帐户,直到他们提供自己的密码,我该如何绕过?
  4. 我不想使用 passwd 实用程序,因为它削弱了我自动生成 FTP 帐户的能力,我找到了here 的解决方案,但我不明白解决方案

如果我做错了,或者我试图做的事情是不可能的,或者我对我在此陈述的任何内容有误解,请告诉我。感谢您提供任何帮助。 :D

【问题讨论】:

    标签: shell ftp passwd


    【解决方案1】:

    关于密码生成:

    32.3 Encrypting Passwords

    • 函数:char * crypt (const char *key, const char *salt)

      crypt 函数接受一个密码 key 作为字符串和一个如下所述的 salt 字符数组,并返回一个可打印的 ASCII 字符串用另一种盐。据信,给定函数的输出,找到将产生该输出的 key 的最佳方法是猜测 key 的值直到 key 的原始值em>key 找到了。

      salt 参数做了两件事。首先,它选择使用哪种算法,是基于 MD5 的算法还是基于 DES 的算法。其次,它使试图对包含许多密码的文件猜测密码的人变得更加困难;如果没有 salt,入侵者可以进行猜测,对其运行一次crypt,并将结果与​​所有密码进行比较。使用 salt,入侵者必须为每种不同的 salt 运行一次 crypt

      对于基于 MD5 的算法,salt 应包含字符串 $1$,后跟最多 8 个字符,以另一个 $ 或字符串结尾结尾。 crypt 的结果将是 salt,如果 salt 不是以 1 结尾,则后跟 $,然后是字母表中的 22 个字符 ./0-9A-Za-z,总共最多 34 个字符。 key 中的每个字符都很重要。

      对于基于 DES 的算法,salt 应由字母表 ./0-9A-Za-z 中的两个字符组成,crypt 的结果将是这两个字符后跟 11 个相同的字符字母表,共 13 个。只有 key 中的前 8 个字符有意义。

      基于 MD5 的算法对所用密码的有用长度没有限制,安全性稍高。因此它优于基于 DES 的算法。

      当用户第一次输入密码时,salt 应该设置为一个相当随机的新字符串。要根据先前调用 crypt 的结果验证密码,请将先前调用的结果作为 salt 传递。

    根据您的系统,也可能存在 Blowfish 或 SHA-2 系列 crypts,并且可能出于安全考虑禁用了传统 DES。 PAM 也可以在这里添加自己的复杂性。

    身份证 |方法 ------------------------------------------- 1 | MD5(Linux、BSD) 2a |河豚 (OpenBSD) md5 |孙 MD5 5 | SHA-256(Linux,自 glibc 2.7 起) 6 | SHA-512(Linux,自 glibc 2.7 起)

    话虽如此,

    root# useradd -d / -g users -p $(perl -e'print crypt("foo", "aa")') -M -N foo 用户$ su - foo 密码:foo 富$ ^D root# userdel foo

    在我的系统上运行良好。


    关于外壳:

    /sbin/nologin 是传统的登录禁用用户。您必须仔细检查 FTP 守护程序的配置,看看是否将它们排除在 FTP 访问之外。


    关于被禁用的帐户:

    如上所示,如果给定有效密码,对我有用。


    关于其他解决方案:

    您对替代解决方案有哪些不了解的地方?对我来说似乎很清楚。

    只需将“username:password”通过管道传输到“chpasswd”即可。


    如果您想要仅使用 FTP 的用户,我建议您使用支持虚拟用户的 FTP 守护程序,例如 glftpdPure-FTPdProFTPDvsftpd,...实际上似乎所有常见的做。这样,FTP 帐户就不需要真实的系统帐户。

    【讨论】:

    • 对不起,我从未感谢您 7 个月前的回复。您的解决方案有效,谢谢:)
    • 你也可以:useradd -p "$(echo -n PASSWORD | openssl passwd -crypt -stdin)" 并且passwd有stdin标志所以我没试过但是echo -n password | passwd --stdin 用户可能会工作。
    • aa 是什么?
    【解决方案2】:

    如果您想创建“仅 FTP”用户,您应该查看rssh 为您的发行版安装 rssh,并将“仅 FTP”用户的 shell 设置为“/usr/bin/rssh”

    效果很好

    【讨论】:

    • 谢谢!这实际上不适用于我 7 个月前所做的事情,但它适用于我现在正在做的事情。 :D
    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多