添加用户帐户
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 | 表示使用了影子密码 |
1001 | UID,这些从 1000 开始,并为每个新添加的用户增加 1。低于 1000 的 UID 保留供系统使用。 |
1001 | 用户主要组的 GID。这些从 1000 开始,并为每个新组增加 1。用户可以属于多个组。 |
test user | GECOS(通用电气综合操作系统)信息,仅供参考,如全名 |
/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密码 |
1000 | GID |
test | 该组成员的用户列表 |
每个组可以有多个用户。
用户也可以属于多个组。
存储在 /etc/passwd 中用户条目中的 GID 是用户的主要组。
/etc/gshadow
散列组密码存储在此文件中。
但是,很少使用组密码。
以下是此文件中条目的示例:
# tail -1 /etc/gshadow test:!!::test
下面描述了这个条目:
字段 | 描述 |
---|---|
test | 组名称 |
x | 散列密码。!!表示账户被锁定。 |
oracle | 作为组成员的用户列表 |
最后两个字段用于指定管理员和成员。
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 用户可以添加、修改或者删除用户和组帐户。
修改或者删除用户帐户
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