当前位置: 首页 > 科技观察

Linuxuseradd命令介绍

时间:2023-03-20 20:41:48 科技观察

使用useradd命令可以添加用户(也可以根据需要修改账号)。添加用户是任何计算机系统中最重要的事情之一;本文重点介绍如何在Linux系统中添加用户。在正式开始之前,我想提三个概念。首先,和大多数操作系统一样,Linux用户需要一个账号才能登录,本文只介绍本地账号,不介绍网络账号,比如LDAP。其次,每个账户都有一个名字(username)和一个对应的号码(userID)。最后,每个用户通常在一个组中,每个组都有一个名称和一个组ID。您可能已经想到,Linux提供了一个用于添加用户的命令行工具,这就是useradd命令。某些版本也称为adduser。为方便起见,此命令是许多发行版上useradd命令的符号链接。$file`whichadduser`/usr/sbin/adduser:到useradd的符号链接看看useradd。注意:本文描述的默认环境是RedHatEnterpriseLinux8.0。您可能会发现这些文件与本文和某些Linux发行版或其他Unix操作系统(FreeBSD或Solaris)中描述的一些默认值之间偶尔存在差异。默认处理useradd的基本用法非常简单:提供用户名以添加用户。$sudouseraddsonny在此示例中,useradd命令创建了一个名为sonny的帐户。该命令还创建了一个同名组,sonny被放入这个组中,这个组也是sonny账号的主组。命令执行时,根据配置文件/etc/default/useradd和/etc/login.defs中的不同设置,还会有其他参数,如语言、shell等。对于私有系统或微型单一服务业务环境,这些参数就足够了。以上两个文件控制了useradd的处理。用户信息存储在/etc目录下的一些其他文件中。这些信息的解释将贯穿全文。文件描述字段(粗体由useradd命令设置)passwd存储用户账户信息Username:unused:UID:GID:Remarks:homedirectory:shellshadow存储用户账户安全信息Username:encryptedPassword:lastmodifiedTime:Minimumusagedays:MaximumusagedaysBetween:Warningdaysbeforemodification:Gracetimeafterexpired:Unusedgroup存储组信息Groupname:Unused:GID:memberlist自定义处理当管理员需要更好的控制账户时,可以使用命令要自定义的行,例如指定用户ID。用户和组ID默认情况下,useradd尝试使用相同的用户ID(UID)和主要组ID(GID),但不完全相同。虽然UID和GID不一定要相同,但是如果相同的话,管理员管理起来会更方便。以下场景是GID与UID不同的示例。现在我添加另一个名为Timmy的帐户。通过使用getent命令显示用户及其对应的主要组来比较sonny和timmy帐户。$getentpasswdsonnytimmysonny:x:1001:1002:Sonny:/home/sonny:/bin/bashtimmy:x:1002:1003::/home/timmy:/bin/bash$getentgroupsonnytimmysonny:x:1002:timmy:x:1003:不幸的是,两者的UID和GID不同。因为默认的处理是,当一个用户被创建时,分配给用户下一个可用的UID,然后分配那个相同的号码作为主组ID。然而,当要使用的组ID已被使用时,它会被分配到下一个可用的GID。为了弄清楚细节,我猜测GID1001已经被使用,并通过命令确认。$getentgroup1001book:x:1001:alanbookID为1001,所以新创建的用户的GID偏移量为1。这就是为什么系统管理员在创建用户时需要设置一些额外的值的例子。要解决这个问题,我必须首先确定下一个可用的UID和GID是否相同。在确定下一个可用值时,您可以使用getentgroup和getentpasswd命令,传递值以使用-u参数进行确认。$sudouseradd-u1004bobby$getentpasswdbobby;getentgroupbobbybobby:x:1004:1004::/home/bobby:/bin/bashbobby:x:1004:另一种需要指定ID的场景是通过系统上的NFS文件访问远程。当给定用户的所有NFS客户端和服务器系统ID都相同时,管理员可以更轻松地进行控制。这在我的文章使用autofs挂载NFS中有详细介绍。更多用于指定用户信息的自定义参数也被更频繁地使用。以下是您将经常使用的参数的一些高级示例。Commentscomment选项是由-c参数指定的解释性文本字段,可以提供简短的描述或其他信息。$sudouseradd-c"Baileyiscool"bailey$getentpasswdbaileybailey:x:1011:1011:Baileyiscool:/home/bailey:/bin/bashgroup可以为用户分配一个主要组和多个次要组。-g参数指定主要组名或GID。如果未指定,则useradd使用用户名创建一个主要组(如前所述)。-G(大写)参数用逗号分隔的组列表指定此用户所属的组,这些组是子组。$sudouseradd-Gtgroup,fgroup,libvirtmilly$idmillyuid=1012(milly)gid=1012(milly)groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)主目录useraddBy默认情况下,用户的主目录创建在/home目录下。但是,以下参数可以覆盖主目录的基本目录。-b设置另一个可以创建主目录的基本目录。例如,指定/home2而不是/home。$sudouseradd-b/home2vicky$getentpasswdvickyvicky:x:1013:1013::/home2/vicky:/bin/bash-d参数可以指定一个不同于用户名的主目录。$sudouseradd-d/home/benjerry$getentpasswdjerryjerry:x:1014:1014::/home/ben:/bin/bashdirectorytemplate指定-k参数会在创建时复制/etc/skel目录newuser目录下的所有文件到用户的主目录。这些文件通常是shell配置文件,但也可以是系统管理员在创建新用户时想要使用的任何内容。Shell-s参数可以指定一个shell。如果未指定,则使用默认shell。比如下面的例子,配置文件中定义的shell是bash,但是用户wally指定的是zsh。SHELL=/bin/bash$sudouseradd-s/usr/bin/zshwally$getentpasswdwallywally:x:1004:1004::/home/wally:/usr/bin/zsh安全是用户管理的重中之重,所以useradd命令也提供了很多安全选项。您可以使用-e参数以YYYY-MM-DD格式指定用户的到期时间。$sudouseradd-e20191231sammy$sudogetentshadowsammysammy:!!:18171:0:99999:7::20191231:密码过期后,账号自动失效。-f参数指定在密码过期几天后账户将失效。如果设置为0,它将立即失败。$sudouseradd-f30willy$sudogetentshadowwillywilly:!!:18171:0:99999:7:30::在实例生产环境中,创建用户账户时使用多个参数。例如,如果我想创建一个Perry帐户,我可能会使用以下命令:$sudouseradd-u1020-c"PerryExample"\-Gtgroup-b/home2\-s/usr/bin/zsh\-e20201201-f5perry查看前面的文本以了解每个选项。使用以下命令确认结果:$getentpasswdperry;getent组佩里;得到影子佩里;idperryperry:x:1020:1020:Perry示例:/home2/perry:/usr/bin/zshperry:x:1020:perry:!!:18171:0:99999:7:5:20201201:uid=1020(perry)gid=1020(perry)groups=1020(perry),3000(tgroup)一点建议useradd命令是所有Unix(不只是Linux)系统管理员必须知道的命令。由于用户创建不会出错并且需要第一次就正确,因此了解其每个选项很重要。这意味着您需要有一个深思熟虑的命名约定,包括为整个企业环境保留一个专用的UID/GID范围,而不仅仅是一个系统,尤其是当您为一个成长中的组织工作时。