通过bash脚本添加用户帐户的正确方法


15

这是我现在正在使用的脚本代码:

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    sudo su -c "groupadd $MYGROUP"
fi
sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

这种方法在openSuse上效果很好。但是它在Ubuntu上创建的用户帐户存在一些问题,因此我在这里寻求帮助。

  • 未设置终端提示(不echo $PS1返回任何内容)
  • 箭头键和Tab键在终端中无法正常工作
  • 密码似乎不起作用(尽管我仍然不清楚这个问题是什么)
  • 不尊重为此新用户设置的/ etc / sudoers权限

相反,如果我使用adduser(而不是useradd)手动创建用户,那么在Ubuntu上就不会出现这些问题。但是我不能adduser在openSuse(afaik)上使用。因此,我需要一个非Debian专有的脚本或通过我的bash脚本添加用户帐户的方法,该脚本可在Ubuntu上运行(并且不会停止在其他发行版上运行)。

最后,我想理解的差异之间adduseruseradd。例如,我想知道使用哪个骨架目录,adduser因为这可能是由于useradd未按预期工作的原因(因为我刚刚接受了默认设置)。

谢谢


1
至于区别:从useradd手册页(man useradd):useradd是用于添加用户的低级实用程序。在Debian上,管理员通常应改用adduser(8)。
guntbert

另外,sudo su -c "cmd arg1 arg2"等效于sudo cmd arg1 arg2
enzotib

@enzotib谢谢。很高兴知道这些在Ubuntu上是等效的,因为它们不在openSuse上。因此,我将继续使用sudo su -c "cmd arg1 arg2"它,使其在需要它的任何地方都可以使用。
Monica的MountainX

adduser是一个超过1000行的perl脚本,因此对于不同之处,您可以看一下该脚本。
enzotib

@enzotib是的,我一直在阅读,adduser但我不知道perl。所以这对我来说不是一个好方法。
Monica的MountainX

Answers:


14

:我的解决方案是在这里提供/unix/82923/proper-way-to-add-a-user-account-via-bash-script乌尔里希·施瓦茨约瑟夫·。我要做的主要事情是添加-s /bin/bash到现有useradd命令中,然后删除-p password需要加密密码的命令。

sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

然后执行以下操作:

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswd也可以。
菲利克斯·拉贝


2

我的脚本使用ssh键登录自动创建了一个服务帐户,没有密码

#add service group/user
addgroup service-runner
useradd devops-service --create-home --shell /bin/bash --groups service-runner
#gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R

fyi,使用脚本后,我发现服务帐户中的“ sudo”几乎没有用,因为没有密码意味着它不能使用sudo。您可以将其配置为通过visudo允许无密码sudo,但是我不知道如何在脚本中自动执行该操作。另外,可能没有密码sudo的服务帐户也不是一个好主意(安全性)。
JasonS

0

我想您可以在脚本中简单地使用条件,例如

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(无法验证该文件/etc/issue是否存在于OpenSUSE上,否则您可以将条件放在该文件是否存在上)。


为什么不简单地测试adduserwith if command -v adduser >/dev/null; then或likes 的存在?那是唯一重要的事情,而不是基础分布。此外,除了Debian / Ubuntu和OpenSUSE之外,还有其他发行版本。
大卫·佛斯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.