添加用户帐户

useradd

使用 useradd 命令添加用户帐户。
语法是:

# useradd [options] user_name

在没有任何选项的情况下创建新用户时,将应用默认设置。
例子:

# useradd john
# tail -1 /etc/passwd
john:x:501:501::/home/john:/bin/bash

同样默认情况下,useradd 创建一个锁定的用户帐户。
要解锁帐户并分配密码,请以 root 身份运行 passwd user_name 命令。
例子:

# passwd john

passwd user_name 命令提示我们输入新密码。
根据密码的复杂程度,我们可能会收到密码错误(太短或者太简单)的通知。
重新输入相同的密码以继续并解锁用户帐户。
相同的 passwd 命令用于更改密码。
root 用户可以随时更改用户的密码。
系统会提示用户首先输入当前密码。

默认设置

可以使用 -D 选项查看和修改新用户的默认设置。
例子:

# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

INACTIVE 指令设置密码过期后直到帐户被锁定的天数。
值 0 会在密码过期后立即锁定帐户。
值为 -1 将禁用该功能。
创建用户帐户时,SKEL 的内容(默认为 /etc/skel)将复制到新用户的主目录。
默认设置存储在 /etc/default/useradd 中。
以下选项与 –D 一起使用,可更改 useradd 命令的默认值:

  • -b default_home :新用户主目录的初始路径前缀
  • -e default_expire_date :用户帐户被禁用的日期
  • -f default_inactive :密码过期后帐户被锁定之前的天数
  • -g default_group :新用户初始组的组名或者 ID
  • -s default_shell : 新用户的登录shell

例如,要将新用户的登录 shell 更改为 Bourne shell,请输入以下内容:

# useradd –D –s /bin/sh user_name

useradd选项

useradd 命令可以使用多个选项来覆盖默认设置。
以下是一些更常用的选项:

  • -c comment : 新用户的 GECOS 信息,如全名
  • -d home_dir :新用户主目录的初始路径前缀
  • -e expire_date : 用户账户被禁用的日期(格式 YYYY-MM-DD)
  • -g initial_group :用户初始登录组的组名或者编号。组名必须存在。组号必须指代已经存在的组。
  • -G group :用户也是其成员的次要组的列表。每个组之间用逗号分隔,中间没有空格。
  • -p passwd :设置新用户的密码。
  • -s shell : 用户登录 shell 的名称

例如,要创建一个新的用户名“john”,并包含用户名,并将登录 shell 更改为 C shell,请输入以下内容:

# useradd –c "John Smith" –s /bin/csh john

没有登录shell

添加新用户帐户时,默认情况下会授予用户 shell 访问权限。
例如,我们可以使用 nologin shell 创建一个用户帐户,用于运行 SMTP、FTP 等服务或者运行 Web 服务器。
没有登录 shell 的用户无法登录系统,因此无法在系统上以交互方式运行任何命令。
但是,进程可以作为该用户运行。

以使用 nologin shell 的用户身份登录会被礼貌地拒绝,并显示一条消息,指出该帐户不可用。
如果文件 /etc/nologin.txt 存在,nologin 会显示文件的内容而不是默认消息。
要创建 nologin 用户,首先确保 /etc/shells 文件中存在 nologin:

# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash

添加一个没有 shell 访问权限的名为 test 的新用户:

# useradd -s /sbin/nologin test

尝试以用户 test 身份登录显示:

# su – test
This account is currently not available.

密码配置

密码老化要求用户定期更改密码。
使用 chage 命令配置密码过期时间。
语法是:

# chage [options] user_name

输入 chage 命令,后跟用户名,以显示现有密码时效值并进行修改。
例如,要显示和更改用户 john 的值,执行(以 root 用户身份):

# chage john
Changing the aging information for john
Enter the new value, or press ENTER for the default
	Minimum Password Age [0]: 
	Maximum Password Age [99999]: 
	Last Password Change (YYYY-MM-DD) [2018-03-24]: 
	Password Expiration Warning [7]: 
	Password Inactive [-1]: 
	Account Expiration Date (YYYY-MM-DD) [-1]:

密码时效信息存储在 /etc/shadow 文件中。
在进行任何更改之前查看用户 john 的条目:

# grep john /etc/shadow
john:$fJB4dWkt$...:17614:0:99999:7:::

将最小密码期限值更改为 14 并将最大密码期限值更改为 30 意味着在 14 天内用户有 30 天的时间来更改他们的密码。
新条目显示为:

# grep john /etc/shadow
john:$fJB4dWkt$...:17614:14:30:7:::

根据此信息,用户将被警告在密码到期日期前 7 天更改其密码。
INACTIVE 指令用于设置密码过期后用户帐户被锁定之前不活动的天数。
将 INACTIVE 设置为 -1 将禁用此功能。

chage选项

许多选项可用于 chage 命令。
列出时效信息:

# chage -l john
Last password change					: Mar 24, 2018
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

要强制用户立即设置新密码(强制立即过期),请将上次密码更改值设置为 0。
示例:

# chage –d 0 john

登录后,系统会提示用户更改其密码。

authconfig

Linux 用户密码散列算法也是可配置的。
使用 authconfig 命令确定当前使用的算法,或者将其设置为不同的算法。
要确定当前算法:

# authconfig --test | grep hashing
    password hashing algorithm is sha512

要更改算法,请使用 -passalgo 选项和以下选项之一作为参数: descrypt 、 bigcrypt 、 md5 、 sha256 或者 sha512 ,后跟 -update 选项。
例如,将算法更改为 MD5:

# authconfig --passalgo=md5 --update

组账户管理

groupadd

使用 groupadd 命令添加组帐户。
语法是:

# groupadd [options] group_name

groupmod

使用 groupmod 命令修改组帐户。
语法是:

# groupmod [options] group_name

groupdel

使用 groupdel 命令删除组帐户。
语法是:

# groupdel group_name

即使组中有成员,我们也可以删除组。
我们不能删除任何现有用户的主要组。
我们必须先删除用户,然后才能删除组。

gpasswd

使用 gpasswd 命令来管理 /etc/group 和 /etc/gshadow。
每个组都可以有管理员、成员和密码。
语法是:

# gpasswd [options] group_name

groups

groups 命令显示用户所属的组。
下面的例子说明用户oracle属于两个组,oracle(主要组)和students(次要组):

$ grep oracle /etc/passwd
oracle:x:1000:1000:Oracle Student:/home/oracle/bin/bash
$ grep oracle /etc/group
oracle:x:1000: students:x:1056:student1,student2,oracle

groups 命令(以 oracle 身份登录)验证这些组成员身份。

$ whoami
oracle
$ groups 
oracle students

newgrp

newgrp 命令执行一个新的 shell 并更改用户的真实组标识。
以下示例说明了运行命令之前和之后的组 ID。
它还说明了一个新的 shell 被执行。

$ id
uid=1000(oracle) gid=1000(oracle)
groups=1000(oracle),1066(students)...

请注意,gid 等于 1000(oracle)。

$ ps
PID TTY TIME CMD
20279 pts/0 00:00:00 bash 
20411 pts/0 00:00:00 ps
$ newgrp students
$ id
uid=1000(oracle) gid=1066(students)
groups=1000(oracle),1066(students)...

请注意,gid 现在等于 1066(学生)。
另请注意,执行了一个新的 shell:

$ ps
PID TTY TIME CMD
20279 pts/0 00:00:00 bash
20464 pts/0 00:00:00 bash
20486 pts/0 00:00:00 ps

newgrp 命令无法识别组 ID 号,我们只能将真实的组名更改为我们所属的组。
运行不带参数的命令会将实际组标识设置为用户的主要组。

用户和组配置文件

/etc/passwd

添加新用户时,该信息将作为单个冒号分隔行存储在 /etc/passwd 中。
以下是此文件中条目的示例:

# tail -1 /etc/passwd
test:x:1001:1001:test user:/home/test:/bin/bash

下面描述了这个条目:

字段描述
test用户名
x表示使用了影子密码
1001UID,这些从 1000 开始,并为每个新添加的用户增加 1。低于 1000 的 UID 保留供系统使用。
1001用户主要组的 GID。这些从 1000 开始,并为每个新组增加 1。用户可以属于多个组。
test userGECOS(通用电气综合操作系统)信息,仅供参考,如全名
/home/test此用户的主目录
/bin/bash此用户的默认 shell

/etc/shadow

使用影子密码,当创建新用户时,新条目会自动添加到 /etc/shadow 中。
该文件只能由 root 用户查看。
以下是此文件中条目的示例:

# tail -1 /etc/shadow
test:$XBCDBQ...:17610:0:99999:7:::

下面描述了这个条目:

字段描述
test用户名
$6$XBCDBQ散列密码值(显示部分值)。纯文本密码本身不存储在磁盘上。算法根据密码创建唯一的字符串。
17610密码更改后的天数(以 1970 年 1 月 1 日以来的天数计)。
0在用户必须更改密码之前需要经过的天数。
99999自密码更改以来密码可以使用的最大天数。在此天数之后,用户必须更改密码。
7用户收到有关挂起密码更改策略的警告的到期日期前的天数。如果在此天数后未更改密码,则用户帐户将被锁定。

下一个字段为空,但用于存储帐户锁定的最后日期(以 1970 年 1 月 1 日以来的天数计算)。
最后一个字段也为空但未使用。

/etc/group

由于 Oracle Linux 使用 UPG 方案,因此添加新用户时会在 /etc/group 中自动创建一个新条目。
组名与用户名相同。
以下是此文件中条目的示例:

# tail -1 /etc/group
test:x:1000:test

下面描述了这个条目:

字段描述
test组的名称
x表示使用了shadow密码
1000GID
test该组成员的用户列表

每个组可以有多个用户。
用户也可以属于多个组。
存储在 /etc/passwd 中用户条目中的 GID 是用户的主要组。

/etc/gshadow

散列组密码存储在此文件中。
但是,很少使用组密码。
以下是此文件中条目的示例:

# tail -1 /etc/gshadow 
test:!!::test

下面描述了这个条目:

字段描述
test组名称
x散列密码。!!表示账户被锁定。
oracle作为组成员的用户列表

最后两个字段用于指定管理员和成员。

Linux 用户和组管理

Linux 中的每个用户都有一个唯一的用户 ID (UID),它是一个普通的整数,以及一个关联的用户名。
用户使用他们的用户名登录,但系统使用关联的 UID。
每个用户帐户还有一个主目录和一个登录 shell。
当用户登录时,他们被放置在他们的主目录中并且他们的登录 shell 被执行。
所有这些用户帐户信息都存储在 /etc/passwd 文件中。

每个用户也属于一个或者多个组。
不同的用户可以分配到同一个组。
可以向一个组授予访问权限,并且该组的所有成员都被授予相同的访问权限。
Linux 中的每个组帐户都有一个唯一的组 ID (GID) 和一个关联的组名。
组信息存储在 /etc/group 文件中。

RedHat Linux 使用用户私有组 (UPG) 方案。
添加新用户帐户时,也会创建新用户专用组。
用户私有组与用户同名,新用户是该组的唯一成员。

用户和组都使用影子密码。
密码被散列并存储在不同的文件中,用户的 /etc/shadow 和组的 /etc/gshadow 。
通过将散列密码存储在“影子”文件中可以提高安全性,因为这些文件只能由 root 用户读取。
使用影子密码还提供密码时效参数并允许使用 /etc/login.defs 文件强制执行安全策略。
只有 root 用户可以添加、修改或者删除用户和组帐户。

欢迎 on it road

修改或者删除用户帐户

usermod

使用 usermod 命令修改现有用户帐户。
语法是:

# usermod [options] user_name

usermod 命令最常见的用途之一是将用户添加到另一个(辅助)组。
使用 –a 和 –G 选项,后跟以逗号分隔的辅助组列表,以将用户添加到。
以下示例列出了修改用户并将其添加到辅助组之前和之后 /etc/group 的内容:

# grep 1017 /etc/group 
students:x:1017:
# usermod –aG 1017 mary 
# grep 1017 /etc/group students:x:1017:mary

userdel

使用 userdel 命令删除用户帐户。
例子:

# userdel john
日期:2020-09-17 00:14:58 来源:oir作者:oir