Useradd使用crypt密码生成

时间:2009-06-19 23:57:27

标签: shell ftp passwd

我正在研究我认为使用'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)或group(-g)功能没有问题
  3. 主题:

    1. 为什么我的密码生成工作不起作用?
    2. 是/ bin / bash用于纯FTP用户的正确shell,还是我会使用/ bin / false或不同的shell?
    3. 默认情况下,useradd禁用帐户,直到他们提供自己的密码,我该如何绕过这个?
    4. 我不想使用passwd实用程序,因为它削弱了我自动生成FTP帐户的能力,我找到了这个here的解决方案,但我不明白解决方案
    5. 请告诉我,如果我说这一切都错了,或者我想做的事情是不可能的,或者我是否对我在此陈述的任何内容都有所误导。感谢您提供任何帮助。 :d

2 个答案:

答案 0 :(得分:26)

关于密码生成:

  

32.3 Encrypting Passwords

     
      
  • 功能:char * crypt const char * key,const char * salt

         

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

         

    salt 参数执行两项操作。首先,它选择使用哪种算法,基于MD5的算法或基于DES的算法。其次,对于试图根据包含许多密码的文件猜测密码的人来说,它会变得更加艰难;没有 salt ,入侵者可以猜测,在其上运行crypt一次,并将结果与​​所有密码进行比较。使用 salt ,入侵者必须为每种不同的盐运行crypt一次。

         

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

         

    对于基于DES的算法, salt 应包含字母./0-9A-Za-z中的两个字符,crypt的结果将是后面跟着的两个字符。更多来自同一个字母,共13个。只有中的前8个字符才有意义。

         

    基于MD5的算法对使用的密码的有用长度没有限制,并且稍微更安全。因此,它优于基于DES的算法。

         

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

  •   

根据您的系统,也可能还有Blowfish或SHA-2系列crypt,并且传统的DES可能会因安全性而被禁用。 PAM也可以在这里添加自己的复杂功能。

     ID       |    Method
  -------------------------------
     1        |  MD5 (Linux, BSD)
     2a       |  Blowfish (OpenBSD)
     md5      |  Sun MD5
     5        |  SHA-256 (Linux, since glibc 2.7)
     6        |  SHA-512 (Linux, since glibc 2.7)

话虽如此,

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

在我的系统上运行得很好。


关于shell:

/sbin/nologin对于禁用登录的用户来说是传统的。您必须仔细检查您的FTP守护程序的配置,看看是否将其从FTP访问中排除。


关于已停用的帐户:

如上所示,如果给出工作密码,对我来说就像预期一样。


关于其他解决方案:

您对替代解决方案有何了解?我觉得很清楚。

只需将“username:password”导入“chpasswd”。


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

答案 1 :(得分:1)

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

效果很好