Useradd使用crypt密码生成

San*_*ich 16 ftp shell 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
Run Code Online (Sandbox Code Playgroud)

笔记

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

话题:

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

让我知道,如果我说这一切都错了,或者我想要做的事情是不可能的,或者我是否对我在此陈述的任何事情都有所误导.感谢您提供任何帮助.:d

eph*_*ent 26

关于密码生成:

32.3加密密码

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

    crypt函数接受密码,密钥,字符串和下面描述的salt字符数组,并返回一个以另一个salt开头的可打印ASCII字符串.据认为,鉴于该函数的输出,找到一个最好的方式,将产生的输出是猜测的值直到原值关键发现.

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

    对于基于MD5的算法,salt应该由字符串组成$1$,后跟最多8个字符,由另一个$或字符串的结尾终止.地穴的结果将是,然后是,$如果盐没有以一个结束,接着是字母表中的22个字符./0-9A-Za-z,总共最多34个字符.密钥中的每个字符都很重要.

    对于基于DES的算法,应该由字母表中的两个字符组成,./0-9A-Za-z结果crypt将是这两个字符,后面是来自同一字母表的11个字符,总共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的用户,我建议使用支持glftpd,Pure-FTPd,ProFTPD,vsftpd等虚拟用户的FTP守护进程......实际上看起来所有普通用户都可以.这样,FTP帐户不需要真正的系统帐户.

  • +1 for*Just将"`username:password`"输入"`chpasswd`".* (4认同)
  • 您还可以: useradd -p "$(echo -n PASSWORD | openssl passwd -crypt -stdin)" 并且 passwd 具有 stdin 标志,所以我没有尝试过,但 echo -n password | passwd --stdin 用户可能会工作。 (2认同)
  • 什么是`aa`? (2认同)