如何创建非登录用户?

Eth*_*han 173 linux user-accounts

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

useradd subversion
Run Code Online (Sandbox Code Playgroud)

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

主要目的只是为 SVN 存储库提供所有者。

ryn*_*nop 265

您可以使用以下命令:

useradd -r subversion
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请使用以下命令查看手册页

man useradd
Run Code Online (Sandbox Code Playgroud)

您将在本文档中找到可用于您的目的的以下标志。

-r, --system                  create a system account
Run Code Online (Sandbox Code Playgroud)

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

  • 单独使用 -r 我们仍然可以登录。我们需要 -s /bin/false 来禁用用户 shell。 (58认同)
  • @c4il 但唯一可以登录的人是 root,对吗?我的意思是,他们没有密码,所以我希望只有 root 能够登录他们。 (8认同)

Joh*_*n T 97

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

useradd -M subversion
Run Code Online (Sandbox Code Playgroud)

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

usermod -L subversion
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个特别有力的答案,通过这种方式创建的用户仍然有一个外壳。而且您甚至没有警告 OP 情况就是这样。回想一下,这将是 `usermod -s /bin/false subversion`,或者使用 `--shell /bin/false` 到 `useradd` (81认同)
  • 感谢您抽出时间进行讨论,您当然是对的;但是看到定义了 shell 的非登录用户让我很痛苦,这让我觉得很懒惰,而且如果有人不熟悉系统,他们不会意外地做一些意外的事情,这很好;黑客是一个不同的品种,如果他们已经在机器上安装了外壳,我认为基本上游戏结束了 (19认同)
  • @beak 实际上只有 root 用户才能 su 到锁定的帐户,但是如果这个人已经获得了 root 访问权限,为什么还要麻烦呢?当用户可以运行`su -s /bin/bash username`并绕过它时,设置shell并没有太大作用。 (18认同)
  • 这些评论完全涵盖了我希望学习的内容,感谢@Beaks && John T (14认同)
  • @beak 帐户被锁定,拥有一个外壳是一个有争议的问题。 (10认同)
  • 除了仍然可以“su”到锁定的帐户之外,对于没有外壳的帐户而言,情况并非如此。一个小问题,但是通过服务器管理,彻底检查并没有什么坏处 (5认同)
  • 所需要的只是外壳中的一个错误,这是灾难的秘诀。useradd -s /bin/false 用户名是非常可取的。(usermod 会修改现有用户) (2认同)
  • @LeeHambley 我看到了很多批评和讨论,但我没有看到你的单独答案。您最好将您认为正确的过程发布出来。 (2认同)

Ski*_*rou 35

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

adduser --system --no-create-home --group yourusername
Run Code Online (Sandbox Code Playgroud)

--group如果您不需要组--no-create-home您的用户名,并且您确实需要此用户的主页,则可以删除。

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

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

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

  • 要解决“我不希望它成为可以登录的用户”,还要添加标志 `--disabled-login`(在 `yourusername` 之前) (3认同)

Tim*_*Gee 29

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

adduser subversion --shell=/bin/false
Run Code Online (Sandbox Code Playgroud)

如果您也不想要主目录:

adduser subversion --shell=/bin/false --no-create-home
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要一个更加锁定的系统用户(通常这不会创建一个主目录 - 据报道它仍然会根据下面的评论在 linux mint 中创建一个主目录)

adduser subversion --system --group
Run Code Online (Sandbox Code Playgroud)

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


slm*_*slm 21

这样做最安全的形式是使用adduser如下:

$ adduser -r -s /bin/nologin subversion
Run Code Online (Sandbox Code Playgroud)

注意:请务必包括-s /sbin/nologin以禁用任何登录 shell,使其无法用于该帐户。

设置确认

$ grep subversion /etc/passwd /etc/shadow
/etc/passwd:subversion:x:496:496::/home/subversion:/bin/nologin
/etc/shadow:subversion:!!:17232::::::
Run Code Online (Sandbox Code Playgroud)

但是没有目录:

$ ll /home | grep subversion
$
Run Code Online (Sandbox Code Playgroud)

确认帐户在其他方面可用:

$ sudo -u subversion whoami
subversion

$ sudo -u subversion date
Tue Mar  7 08:58:57 EST 2017
Run Code Online (Sandbox Code Playgroud)

移动

如果您需要删除此帐户:

$ userdel subversion -r
userdel: subversion mail spool (/var/spool/mail/subversion) not found
userdel: subversion home directory (/home/subversion) not found
$
Run Code Online (Sandbox Code Playgroud)

并确认:

$ grep rtim-hc-user /etc/passwd /etc/shadow
$
Run Code Online (Sandbox Code Playgroud)

  • adduser 无法识别 -r 选项。我想你的意思是用户添加。 (4认同)

小智 5

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

useradd --system --shell=/usr/sbin/nologin <username>
Run Code Online (Sandbox Code Playgroud)

如果您的nologin程序在 中/sbin/nologin,请相应更改。