shell编程(四) : [Linux基础] Linux 用户和组管理

接上一篇文章Linux shell编程(三): Linux 环境变量

2.4.1 Linux用户

Linux安全系统的核心是用户账户。用户权限是通过创建用户时分配的用户ID(User ID,通常缩写为UID)来跟踪的。

这些信息保存在 /etc/passwd/etc/shadow 文件中,关于用户账户与权限管理的内容详见 Linux用户和用户组管理相关文件内容详解

关于Linux用户的管理,Linux系统提供了以下工具:

命令描述
useradd添加新用户,默认无密码、无主目录、不指定shell版本
adduser添加新用户,要求用户设置密码、自动创建主目录、指定shell版本
userdel删除用户
usermod修改用户账户的字段,还可以指定主要组以及附加组的所属关系
passwd修改已有用户的密码
chpasswd从文件中读取登录名密码对,并更新密码
chage修改密码的过期日期
chfn修改用户账户的备注信息
chsh修改用户账户的默认登录shell
添加新用户

useradd:命令使用系统的默认值以及命令行参数来设置用户账户。需要使用参数选项指定其他设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。

adduser:要求用户设置密码、自动创建主目录、指定shell版本

useradd

先讲useradd,如果不使用任何参数,执行命令 sudo useradd testuser ,则创建的用户无密码、无主目录、没有指定shell版本。

没有密码不能登录,需要后期使用 sudo passwd testuser 命令设置密码才能登录;

没有主目录就是在 /home 目录下没有该用的目录,按需设置,后期可以使用 usermod -d /testuser testuser 修改,其中 /testuser 为用户主目录, 最后的 testuser 是用户名。

没有指定shell版本会是默认的 /bin/sh shell,它的交互界面如下:

在这里插入图片描述

testuser用户登录后,只有一个命令提示符 $ ,要想修改登录的默认shell版本,可以使用命令 chsh -s /bin/bash testuser ,注意,修改后要重新登录该用户才能生效。

看起来有些麻烦,可以执行 useradd 命令时使用参数选项一步到位,使用参数 -p 设置密码,-m 设置主目录, -s 指定shell版本,完整命令如下:

sudo useradd testuser -p password -m -s /bin/bash

否则ueseradd命令只会根据默认值创建用户,系统默认值被设置在/etc/default/useradd文件中。可以使用useradd命令的 -D 选项查看所用Linux系统中的这些默认值,如下:
在这里插入图片描述

默认值含义依次为:

  • 新用户会被添加到GID为 100 的公共组
  • 新用户的HOME目录将会位于/home
  • 新用户账户密码在过期后不会被禁用
  • 新用户账户过期日期(此处未设置)
  • 新用户账户默认shell
  • 系统会将/etc/skel目录下的内容复制到新用户的HOME目录下
  • 系统是否为该用户在mail目录下创建一个用于接收邮件的文件

其中,/etc/skel目录下是一些启动文件,如下:

在这里插入图片描述

如有需要,可以自定义新用户的初始文件并放到该目录下。

可以修改默认值简化创建新用户的操作,比如使用useradd命令时,不想每次指定shell版本,可以修改默认值: useradd -D -s /bin/bash ,其中 -D 代表默认值相关, -s 代表修改默认值中的shell版本,修改默认值的其他参数如下:

参数描述
-b default_home更改默认的创建用户HOME目录的位置
-e expiration_date更改默认的新账户的过期日期
-f inactive更改默认的新用户从密码过期到账户被禁用的天数
-g group更改默认的组名称或GID
-s shell更改默认的登录shell

useradd命令的其他参数选项:

参数描述
-c comment给新用户添加备注
-d home_dir为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date用YYYY-MM-DD格式指定一个账户过期的日期
-f inactive_days指定这个账户密码过期后多少天这个账户被禁用;
0 表示密码一过期就立即禁用, 1 表示禁用这个功能
-g initial_group指定用户登录组的GID或组名
-G group …指定用户除登录组之外所属的一个或多个附加组
-k必须和 -m 一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-m创建用户的HOME目录
-H不创建用户的HOME目录(当默认设置里要求创建时才使用这个选项)
-n创建一个与用户登录名同名的新组
-r创建系统账户
-p passwd为用户账户指定默认密码
-s shell指定默认的登录shell
-u uid为账户指定唯一的UID

adduser

和useradd类似,adduser添加新用户的命令为 sudo adduser testuser ,但adduser会引导你设置新用户的一些信息,如下:

在这里插入图片描述

包括新增用户组、在用户组里新增用户、创建用户的主目录、将/etc/skel目录下的内容复制到新用户的HOME目录下、设置用户登录密码、设置用户信息等。

其余设置根据默认配置文件 /etc/adduser.conf 中的内容自动设置。

删除用户

userdel

默认情况下, userdel 命令会只删除/etc/passwd文件中的用户信息,不会删除系统中属于该账户的任何文件。

如果加上 -r 参数, userdel 会删除用户的HOME目录以及邮件目录。

但用户目录中可能会有其他程序运行的必要文件,所以删除之前要检查清楚。

修改用户

usermod

usermod用于修改用户账户信息,参数选项如下:

参数描述
-a与-G一起使用,为用户添加附加组
-c comment修改用户的说明信息(/etc/passwd 文件用户信息的第 5 个字段)
-d home_dir修改用户的主目录(/etc/passwd 文件用户信息的第 6 个字段)
-e expire_date修改用户的失效曰期(格式为 “YYYY-MM-DD”,/etc/passwd 文件用户信息的第 8 个字段)
-g initial_group修改用户的归属组编号GID(/etc/passwd 文件用户信息的第 4 个字段)
-u uid修改用户的用户编号UID(/etc/passwd 文件用户信息的第 3 个字段)
-G group修改用户的附加组,如果是为用户添加附加组,一般与-a一起使用,否则该用户的其他附加组都会删除,即修改 /etc/group 文件
-l user_name修改用户名称(/etc/passwd 文件用户信息的第 1 个字段)
-L临时锁定用户
-U解锁用户
-s shell指定默认的登录shell
修改用户密码

passwd

修改已有用户的密码,但需注意的是,只执行 passwd 命令是修改当前用户的密码,如果想要修改非当前用户的密码,需要使用切换到root账户或使用sudo进行提权,如修改test用户的密码,需要执行 sudo passwd test 命令。

chpasswd

从文件中读取登录名密码对,并更新密码。

如果需要批量更新多个用户的密码,可以使用 chpasswd 命令,他能从标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置,如下:

在这里插入图片描述

注意,修改密码都要使用超级用户权限。

但常用的方法是将多个用户的登录名密码对写到文件中,然后重定向给该命令,如下:

文件内容为:

在这里插入图片描述

执行命令为:

sudo chpasswd < passwd.txt

注意文件中不能有空行,否则会报错。

修改用户默认shell

chsh

修改默认的用户登录shell,要用shell的绝对路径,如:

chsh -s /bin/bash testuser
修改用户说明信息

chfn

修改用户的说明信息,/etc/passwd 文件用户信息的第 5 个字段,

由于这涉及到用户的信息,也需要输入密码,如果是修改非当前用户的信息,还需要root权限。

修改用户账户有效期

chage

chage 命令用来帮助管理用户账户的有效期,对应 /etc/shadow 文件用户密码信息的第 4-8个字段。

可以用不同参数修改对应信息,如下:

参数描述
-d设置上次修改密码到现在的天数
-E设置密码过期的日期
-I (大写的i)设置密码过期到锁定账户的天数
-m设置修改密码之间最少要多少天
-W设置密码过期前多久开始出现提醒信息

chage 命令的日期值可以用下面两种方式中的任意一种:

  • YYYY-MM-DD格式的日期
  • 代表从1970年1月1日起到该日期天数的数值

对于密码过期的账户,和锁定的账户很相似:账户仍然存在,但用户无法用它登录。


2.4.2 Linux用户组

为了控制多个用户共享资源的安全性,Linux系统使用了用户组的概念。

和用户信息一样,用户组信息也有自己的保存位置 /etc/group ,如下:

在这里插入图片描述

每行代表一个组,每个组有4个字段,其格式如下:

组名:组密码占位符:GID:组中用户(多个用户用","隔开)

其中,

组密码占位符:和用户密码占位符类似,加密形式的密码单独存放在/etc/gshadow文件中。

GID:系统账户用的组通常会分配低于500的GID值,而用户组的GID则会从500开始分配。

组中用户:这个字段为空不代表组中没有用户,因为如果该组是某用户的初始组,则该用户不写在这里。

创建新用户组

groupadd 命令可在系统上创建新的用户组。

删除用户组

使用 groupdel 命令删除用户组,但删除的用户组不能是任何用户的初始组,否则会删除失败。

将用户添加到用户组

使用 usermod 命令将用户添加到用户组,其中 usermod-g 选项是修改用户的归属组(默认组), -G 选项是修改用户的附加组,这里要注意,单独使用 -G 选项是修改附加组,要添加附加组需要配合 -a 选项。

如果添加附加组时,只用了 -G 选项,当前用户已有的其他附加组都会被删除。补救措施,发生这种情况千万不要重新登录,否则就没有后悔药了(因为当前内存里还保留该用户附加组信息,重新登录的话,会从/etc/group 文件重新读取信息到内存,当前用户附加组信息会被覆盖)。执行 groupsid 命令,会显示当前内存里该用户附加组信息,按照打印修改 /etc/group 文件即可。

将用户从用户组中删除

gpasswd -d user group

修改用户组

主要是修改 /etc/group 文件的内容,使用 groupmod 命令的 -g 选项可以修改已有组的GID,-n 选项可以修改组名,修改组名时,GID和组成员不会变,只有组名改变。由于所有的安全权限都是基于GID的,
所以可以随意改变组名而不会影响文件的安全性。

注意,如果修改了已登录用户的用户组,需要退出重新登录才会生效。

如下例子首先创建了新用户组 newgroup ,然后将用户 testuser 添加到了该组中,又将用户 testuser 从该组删除,将修改用户组名从 newgroup 修改为 testgroup ,最后删除了用户组 testgroup

在这里插入图片描述
下一篇:Linux shell编程(五): Linux文件权限管理

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万俟淋曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值