Linux用户与组管理

一、用户与组的概述

        在Linux系统中,每次登录系统都必须以一个用户的身份登录,并且登录后的权限也会根据用户身份来确定。 每一个进程在执行时,也会有其用户,该用户也和进程所能控制的资源有关。Linux系统下的每一个目录、文件,都会有其属于的用户和用户组,我们称其为属主和属组。
        
Linux系统中,每个用户都有自己的用户ID称为UID,每个用户组也有自己的用户组ID称为GIDUIDGIDLinux系统中是不可重复的。

1.用户类型

        root用户
        root用户时UIDGID都等于0的用户,拥有最大的权限。如果深入了解Linux系统,会发现root用户拥有很多特权,比如:无视Linux对权限的设置而强行读、写、执行文件,切换其他用户登录不需要密码,可以强行切换到已经存在的用户,只有root可以为普通用户修改密码等等。

        系统用户 (程序用户)
        系统用户通常用于运行服务,但是此用户无家目录,也不能用于登录系统。例如,在
yum安装apache、nginx等服务后,就会自动创建apachenginx的用户和同名用户组。在CentOS6系统中,系统用户的UID范围是1-499,在CentOS7系统中,系统用户的ID1-999

        普通用户
        
普通用户只能由root
用户创建,该用户拥有家目录,并且可以登录,该用户的权限由root分配。普通用户拥有指定的shell环境。

2.用户和用户组的关系

        在Linux系统中,每个用户必定属于一个主组(基本组),默认情况下属于与其同名的用户组,最多可以有31个附属组,从用户权限的角度看,主组和附属组其实差别不大,用户也会拥有其附属组的组相关权限。

3、用户和用户组配置文件

Linux系统下的用户和用户组相关配置文件主要有以下几个:

        /etc/passwd
        存储用户信息

        user10:x:1014:1014::/home/user10:/bin/bash
      #用户名:密码占位符:用户ID:组ID:用户描述信息:用户家目录:登录shell

        /etc/shadow
        该配置文件保存了用户的密码信息
       
 root:$6$Xf11oMYvLR9GE4GZ$K8bhAKG0qPgoFytN9qxl.yeFhWO1TM0ULRCKqLGj7VGGniR7kEiS.lM4iUmLkCETfp2.9J.A9fl8H0xf5.lTj.::0:99999:7:::
        bin:*:19820:0:99999:7:::
       #用户名:密码:用户创建时间:密码最短使用期限:密码最长使用期限:密码过期提醒时间:密码过期后的宽容时间:密码过期时间:没用

        /etc/group
        该文件保存了用户组的信息

        nginx:x:982:

       #组名:占位符:组ID:非同名用户的组成员

        /etc/gshadow
        该文件保存了用户组的密码

        root:::
       #组名:加密密码:组管理员列表:组成员列表

        /etc/login.defs
        该文件可以设置密码过期时间,密码最大长度限制等内容。影响的是新创建的用户密码信息

        /etc/skel目录
        用户创建时默认文件的模版目录
       
创建用户时会将这个目录下内容拷贝到新建用户家目录下

二、用户管理

1.useradd命令

创建一个新用户或更新默认新用户信息

语法:
useradd [选项] 用户名

选项

选项作用
-u指定用户的UID。
-d指定用户的家目录,而不采用默认创建在/home中的目录。不能是已存在的目录。
-s指定用户的登录 Shell(如 /bin/bash 或 /sbin/nologin)。
-M创建用户时不自动创建家目录(常用于服务账户)。
-g指定用户的基本组(覆盖默认的同名组创建,需提前存在)。
-G指定用户的附加组(多个组用逗号分隔,仍会创建同名基本组)。
-e设置账户失效时间(格式为 YYYY-MM-DD,到期后账户将被禁用)。

案例:创建一个新用户

指定用户ID创建

指定用户的家目录

指定用户的登录shell ,用户user3的登录shell为/bin/nologin

创建用户时不创建家目录

创建用户时指定基本组,不会创建用户的同名组,可以看到创建用户user5后,在group文件里没有生成user5的同名组

创建用户时指定附加组,依然会创建同名组

创建用户时,指定用户的失效时间

2. userdel命令

删除用户账户和相关文件

语法:
userdel [选项] 用户名

选项:
-r, -- remove
用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。

案例:

如果不加 -r 用户的家目录就会被保留下来,再次创建新用户时会看到一些信息已经存在

3.passwd命令

更改用户的密码。root用户使用时,可以更改所有用户的密码,并且不受密码要求显示,普通用户使用时只能更改自身密码

语法:
passwd [选项] 用户名
不加用户名表示修改自身

选项

选项作用
-l(小写L)或 --lock锁定用户密码
-S查看密码的锁定状态
-u--unlock解除用户密码的锁定状态
-d--delete将用户密码清空
-e--expire让密码失效,下次登录时必须更改
--stdin非交互式修改密码

案例:
将user1用户密码设置为1

锁定用户密码,可以看到被锁定用户密码前多了个两个!!,表示被锁定

查看用户密码锁定状态 -S

解除用户密码锁定

清空用户密码
|

让密码失效,下次登陆时必须修改

非交互式修改密码

 

4.usermod 命令

修改一个用户账户的属性

语法:
usermod [选项] 用户名

选项:

选项作用描述
-u修改用户的UID
-d修改用户的家目录(不采用默认的/home目录)
-s修改用户的登录shell
-g修改用户基本组(不创建同名组)
-G修改用户附加组(会创建同名组)
-e修改用户的失效时间
-a, --append将用户追加到一个附加组
-L, --lock锁定用户账户
-U, --unlock解锁用户账户

案例:修改用户id

修改用户家目录

修改用户的登录shell

修改用户的基本组

修改用户附加组

修改用户失效时间

追加用户到一个附加组

锁定用户 和 解锁用户

5. chpasswd 命令

批量更新密码

语法:
chpasswd [选项]

选项:

参数选项功能说明
-c--crypt-method METHOD指定加密方法(如 DES、MD5、SHA256 等)
-m--md5使用 MD5 加密(兼容旧系统)
-s--sha使用 SHA 加密
-R--root DIR指定 chroot 目录
-h--help显示帮助信息

案例:

用指定算法加密

6.chage命令

更改用户密码过期信息

语法:
chage [选项] 用户名

选项

选项作用
-l, --list显示账户年龄信息
-m, --mindays修改密码的最短使用期限
-M, --maxdays修改密码的最长使用期限
-W, --warndays修改密码过期的提示时间

案例:

将user1用户密码最短使用时间设置为0天

三、组管理

1.groupadd 命令

创建新的组

语法:
groupadd [选项] 组名

选项:
-g 指定组GID生成新组

案例:

2.groupdel 命令

删除组

语法:
groupdel [选项] 组名

选项
-f 强制删除

案例:

3.groupmod 命令

修改组属性

语法:
groupmod [选项] 组名

选项

-g 修改组GID

案例:

4.gpasswd 命令

向组内添加成员

语法:
gpasswd [选项] 组名

选项

选项作用描述
-a, --add USER向组 GROUP 中添加用户 USER,支持单用户操作
-M, --members USER,...设置组 GROUP 的成员列表(多用户逗号分隔),批量添加并覆盖原有成员

案例:

四、用户切换与sodo提权

1.su命令

切换用户,从root用户切换到普通用户不需要密码,普通用户之间切换需要密码

语法:
su [-] 用户名

选项

选项作用描述
-, -l切换到目标用户的环境变量和主目录,并加载其登录 Shell 配置(等同于 --login)。
-s若/bin/shell允许,指定目标用户的 Shell
-c以目标用户身份执行单条命令后退出

案例:
su 不会切换目标用户的登录shell
su - 会切换到目标用户的登录shell

2.sudo命令

sudo用于普通用户的权限提升

语法:
sudo [选项] 参数

选项

选项作用
-i切换到指定用户的登录 shell,采用该用户本身的密码进行身份验证。
-u <user>以指定用户身份执行命令,例如:$ sudo -u postgres psql
-g <group>以指定用户组身份执行命令
-s启动目标用户的默认shell(不改变当前目录)
-l列出当前用户被允许执行的命令列表
-n非交互模式(禁止密码提示,失败时直接报错)

案例:切换到指定的登录shell,登录后会切换到目标shell用户的家目录下

注意:,普通用户可能默认没有sudo命令使用权限。sudo -i 切换到root,必须存在于/etc/sudoers文件中的普通用户才有权限。

如果想要给其他账户增加使用sodu命令权限,可以通过对sudoers文件内容进行修改,添加想要的用户和想赋予的命令权限

在这里添加想要使用命令的绝对路径,或者用ALL添加全部

五、用户登录信息查看

1.id 命令

查看用户的基本属性,用户UID,基本组及附加组

语法:
id [选项]  [用户]

选项

选项功能描述
-u仅显示有效用户 ID(UID)。
-g仅显示用户的有效组 ID(GID)。
-G显示用户所属的所有组 ID(包括附加组)。
-n需搭配 -u-g 或 -G 使用,显示名称而非数字 ID。
-r需搭配 -u-g 或 -G 使用,显示真实 ID 而非有效 ID。

案例:

2.w 命令

查看当前系统登录详情

语法:
w [选项]

选项

选项功能描述
-h隐藏标题行(不显示表头信息)
-f切换显示远程主机名(默认开启,-f关闭显示)
-i显示用户IP地址而非主机名(需配合-f使用)

案例

3.who 命令

显示当前系统登录的摘要信息

语法:
who [选项]

选项

选项作用
-b --boot显示上次系统启动时间
-u --users列出当前已登录的用户

案例

4.whoami 命令

显示当前登录用户的名称

语法:
whoami

案例

5.last 命令

可以查看用户登录列表,last命令可以从日记文件/var/log/wtmp中读取信息,并显示用户最近的登录列表。此命令普通用户也可以执行

语法
last [选项]

选项

选项描述
-n限制显示的行数(如 last -n 5 显示最近5条记录)
-a在最后一行显示登录的主机名或IP地址
-d将IP地址解析为主机名
-f指定替代的日志文件(如 last -f /var/log/wtmp.1
-i类似-a,但只显示IP地址
-x显示系统关机/重启记录
-F显示完整的登录和登出时间(精确到秒)
-t显示指定时间之前的记录(格式:YYYYMMDDHHMMSS)
-p显示特定时间的登录记录(需配合-t使用)
-w在输出中显示完整的用户名和主机名

案例

6.lastb 命令

可以从日志文件/var/log/btmp中读取信息,并显示用户登录失败的记录,用于发现系统登陆异常,需要root用户权限执行,可用参数与last命令相同

语法
last

案例

7.lastlog 命令

统计当前系统中存在用户的登录情况

语法
lastlog

选项

选项功能描述
-b <days>仅显示指定天数内未登录的用户。例如 -b 7 显示最近 7 天未登录的用户。
-t <days>显示指定天数内登录过的用户。例如 -t 1 显示过去 24 小时内登录的用户。
-u <user>仅显示指定用户的信息。例如 -u root 只显示 root 用户的登录记录。
-R不进行主机名解析,直接显示 IP 地址而不是主机名。

案例

按天数显示或者显示指定用户信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值