如何创建非登录用户?


134

我想创建一个subversion在RHEL 5系统上都被调用的用户和组。我查看了手册页useradd,我想命令就是...

useradd subversion

但是,不确定如何避免创建主目录。另外,我不希望它成为可以登录系统的用户。

主要目的只是为SVN信息库提供所有者。


您是否真的看过useradd的手册页,却没有找到-M(不创建HOME目录)?
inemanja

Answers:


76

您可以使用-M开关(确保它是大写字母)来确保不会创建主目录:

useradd -M subversion

然后锁定该帐户以防止登录:

usermod -L subversion

59
这不是一个特别强的答案,用这种方法创建的用户仍然有一个外壳。您甚至没有警告OP这是事实。回想起来,这将是usermod -s /bin/false subversion,或者--shell /bin/falseuseradd
李Hambley

7
@beak帐户已被锁定,拥有外壳是有争议的。
约翰T

15
@beak实际上只有root用户才可以使用锁定的帐户,但是如果该人已经获得root访问权限,为什么还要麻烦呢?当用户可以运行su -s /bin/bash username并绕过它时,设置外壳并没有多大作用。
约翰T

11
感谢您抽出宝贵的时间进行讨论,您当然是正确的;但是让我看到定义了shell的非登录用户感到很痛苦,这让我感到很懒惰,并且如果有人不熟悉该系统,很高兴他们不会意外地做一些事;黑客是不同的物种,如果他们已经在计算机上安装了外壳,我认为这基本上是游戏的
终结

11
这些评论完全涵盖了我希望学习的东西,谢谢@Beaks && John T
Rixius 2013年

220

useradd -r subversion

man useradd

-r, --system create a system account

-r标志将创建一个系统用户-一个没有密码,主目录且无法登录的用户。


1
该命令甚至会为用户创建一个名为“ same”的组。因此,“ subversion”用户将属于“ subversion”组。非常适合当您以后想要执行“ sudo chown -R subversion:subversion / path / to / folder”
s3v1 2013年

49
仅使用-r,我们仍然可以登录。我们需要-s / bin / false来禁用用户外壳程序。
c4il 2013年

8
@ c4il但是唯一可以登录他们的人是root,对吗?我的意思是,他们没有密码,所以我希望只有root用户才能登录。
卡米洛·马丁

但是我试过了,但是我们还是可以给他们分配密码passwd subversion
莎燕

@rynop如何检查我的计算机上的用户是否是系统用户?有什么办法吗?我认为他们不属于初学者的sudo'ers组。
Shayan

22

创建系统用户的另一种解决方案,使用adduser :

adduser --system --no-create-home --group yourusername

如果不需要对用户名进行--group分组,并且--no-create-home不需要此用户的家,则可以将其删除。

正如py4on在评论中提到的那样,在某些系统上,可能需要使用该--disabled-login选项才能禁用该用户的登录名。不过,这似乎是Debian下的默认行为。

请注意,用户的数字ID将属于系统帐户。不过,您可以使用--uid选项修复uid 。

最后,请注意,在某些系统上(例如Fedora)adduser是的符号链接useradd,在这种情况下,此答案无效。


3
要解决“我不想让它成为可以登录的用户”,请添加标记--disabled-login(在之前yourusername
toxefa

@ py4on:尽管此选项在手册页中有介绍,但至少在Debian中它似乎是默认选项。
Skippy le Grand Gourou 2015年

15

原始问题的最干净答案是运行命令:

adduser subversion --shell=/bin/false

而且,如果您也不希望主目录:

adduser subversion --shell=/bin/false --no-create-home

或者,如果您想要一个更加锁定的系统用户(通常这将不会创建主目录-据报道,它仍会按照以下注释在linux mint中创建主目录)

adduser subversion --system --group

所有这些命令将创建一个与用户同名的组


在Mint上,最后一个命令肯定会创建主目录:Creating home directory '/home/nodejs' ...
jcollum

11

最安全的方式是这样使用adduser

$ adduser -r -s /bin/nologin subversion

注意:确保包括在内,-s /sbin/nologin以使该帐户无法使用任何登录外壳。

确认安装

$ grep subversion /etc/passwd /etc/shadow
/etc/passwd:subversion:x:496:496::/home/subversion:/bin/nologin
/etc/shadow:subversion:!!:17232::::::

但是没有目录:

$ ll /home | grep subversion
$

确认该帐户还可以使用:

$ sudo -u subversion whoami
subversion

$ sudo -u subversion date
Tue Mar  7 08:58:57 EST 2017

清除

如果您需要删除此帐户:

$ userdel subversion -r
userdel: subversion mail spool (/var/spool/mail/subversion) not found
userdel: subversion home directory (/home/subversion) not found
$

并确认:

$ grep rtim-hc-user /etc/passwd /etc/shadow
$

1
adduser无法识别-r选项。我认为您的意思是useradd。
felwithe

@felwithe不,我写下的每个答案我都会在发布前进行测试。我检查了一下,该开关显示在CentOS 6.x系统上。
slm

这是结果的信息。我正在使用Ubuntu 16 LTS。我不知道安装了哪个版本的adduser,但我从未想象过它会随着时间或系统的变化而变化。然后,我改为使用--system标志来尝试它,该标志为用户创建了一个homedir(我不想要一个)。最后,我只是使用useradd而不是adduser来完成它,并且按计划工作。因此,我只是假设您应该将其键入为adduser时将其键入为adduser。
felwithe

@felwithe是的,我没有怀疑您,只是让您知道我尝试了它8-)。我是Unix和Linux站点上的mod,这些cmd众所周知是不同的黑白发行版。OP在问题中提到RHEL,因此我为什么要这样回答,但他们没有将其标记为特定于Red Hat,这是对此Q&A IMO感到困惑的一部分。
slm

1

在CentOS 7机器上

  • 如果用户不存在:
    useradd testuser --shell=/sbin/nologin

  • 如果要修改现有用户:
    usermod testuser --shell=/sbin/nologin


0

首先通过执行以下操作为用户生成最长为8个字符的加密密码:

openssl passwd -crypt new_password_less_than_eight_chars_long

然后,您执行以下操作:

useradd -m -g groupname -G otherGroupsSeperatedByComma -p encryptedPassword username

0

在Debian中,您可以创建一个系统用户(没有主目录)并登录shell:

useradd --system --shell=/usr/sbin/nologin <username>

如果您的nologin程序位于/sbin/nologin,请相应地进行更改。

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.