我正在使用自定义的Redmine安装来pipe理项目。 我已经设法挂钩添加新用户,并将login信息发送到我拥有的bash脚本。 以下是我的脚本:
#!/bin/sh UNAME=$1 UPASS=$2 wall "$UNAME $UPASS" useradd "$UNAME" echo "$UPASS" | passwd "$UNAME" --stdin usermod -g restricted "$UNAME"
回声是一个bash内build的,所以它不会出现在进程表中,当它发射密码。问题是,我收到来自Redmine的许可投诉:
/opt/rms/redmine/new-user: line 5: /usr/sbin/useradd: Permission denied Only root can do that. /opt/rms/redmine/new-user: line 7: /usr/sbin/usermod: Permission denied
这显然表明我需要root权限或其他方法来做到这一点。 所以我试图在文件上设置权限为4755的UID位,所以它以root身份运行,并得到与上面相同的错误。 有什么想法发生在这里?
我的一般情况是我的目标是以linux用户的身份自动添加新用户到项目pipe理系统,然后当他们被添加到某个组时,我打算将其挂钩,以便他们获得扩展权限,使他们可以通过SSH访问Mercurial存储库 – 所以用户pipe理完全通过前端处理。
由于信息有限,我不会详细论述你的架构对安全的潜在影响。 但是,我将特别谨慎地授予将用户添加到非root用户的能力。
有了这个说法,我会劝阻使用SUID位的目的。 如果没有别的,因为它会给系统中的每个用户带来额外的风险。 意思是, 每个用户都可能添加用户 。
作为替代,您可以configurationsudo以允许非root用户运行usermod。 例如,运行visudo并添加以下行:
redmineuser ALL=NOPASSWD: /usr/sbin/usermod
从man wall :
Wall显示文件的内容,或默认情况下显示所有当前login用户的terminal上的标准input。
你为什么要为所有login的用户播放用户名和密码?
回声是一个bash内build的,所以它不会出现在进程表中,
但是,您将密码作为parameter passing给此脚本,从而使这一点毫无意义。
如果您担心在ps输出中是否显示echo ,那么您应该关心其他问题,如命令行参数问题,以及useradd和广播密码上的SETUID是不好的想法。