Linux 用户和组管理(详细)

今天给伙伴们分享一下Linux 用户和组管理,希望看了有所收获。

我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!

如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。

一、Linux用户和组的意义

  • Linux的一大特性:多用户、多任务。

  • 所谓多用户多任务就是指可以在同一时间,有多个用户登录同一个系统执行不同的任务而互不影响。

  • 假设现在有三个用户:root、lbb、mvv,三个用户同一时间登录了同一个系统,root去修改配置文件了,lbb去创建目录了,mvv去访问数据库了,每个用户互不干扰的独立执行自己的任务,并且每个用户不能够越线去访问其他用户正在操作的目录或执行其他用户下的任务,由此可见,不同的用户是拥有各自不同的权限的,Linux通过权限的划分和管理来实现多用户、多任务的运行机制。

Linux中的用户及其角色划分

按照角色来划分Linux中所有创建的用户,可以分为三种类型的角色:

  • 超级用户(管理员):享有最高权限,具备系统中的所有权限(一般为root),UID为0

  • 普通用户:有权限限制,只能对自己目录下的文件进行操作,可以登录系统,UID>=500(最好用户id大于1024)

  • 系统用户:别称“伪用户”,无法登录系统,一般系统默认持有如bin,nobody等,其主要作用是支撑系统运行,方便系统管理,UID为1-1000(闭区间)

二、用户管理

1、查看账户

[root@edenluo.com ~]# id   查看的是当前登录账户的id信息,identify
uid=0(root)  gid=0(root)=0(root)	                    
主属组             
附属组
uid 系统用来识别账户的user identify
gid 系统用来识别组的group identify
[root@edenluo.com ~]# id user1  查看user1这个账户的id信息
[root@edenluo.com ~]# whoami 查看我现在所使用的账户

2、新建账户

[root@edenluo.com ~]# useradd [参数] ... 用户名称
-d  指定家目录
    [root@edenluo.com ~]# useradd -d /user3  user3
    [root@edenluo.com ~]# cat /etc/passwd | grep user3
	 user3:x:502:502::/user3:/bin/bash

-u  指定uid

-o  允许uid重复使用,配合-u选项,不检查UID的唯一性
	[root@qianfeng ~]# useradd -u 2000 user100
	[root@qianfeng ~]# id user100
	uid=2000(user100) gid=2000(user100)=2000(user100)
	[root@qianfeng ~]# useradd -o  -u 2000 user101
	[root@qianfeng ~]# id user101
	uid=2000(user100) gid=2000(user100)=2000(user100)
	[root@qianfeng ~]# id user100
	uid=2000(user100) gid=2000(user100)=2000(user100)


-g  指定主属组
    [root@edenluo.com ~]# useradd -g 1000  user5
    [root@edenluo.com ~]# id user5
    uid=1001(user5) gid=1000(user4)=1000(user4)

-c  指定描述字段
    [root@edenluo.com ~]# useradd -c qq-28282828 user6
    [root@edenluo.com ~]# cat /etc/passwd | grep user6
    user6:x:1002:1002:qq-28282828:/home/user6:/bin/bash

-s	指定登录shell
    查看系统现在所支持的shell
    [root@edenluo.com ~]# cat /etc/shells
    /bin/sh
    /bin/bash
    /sbin/nologin
    /bin/dash
    /bin/tcsh
    /bin/csh
    [root@edenluo.com ~]# useradd -s /sbin/nologin user7
    [root@edenluo.com ~]# cat /etc/passwd | grep user7
    user7:x:1003:1003::/home/user7:/sbin/nologin

3、修改账户

1、修改passwd文件
  • 此文件里面除了密码字段能删除不能直接修改之外,其他字段全部都能直接修改

  • [root@edenluo.com ~]# cat /etc/passwd 
    

    账户的基本信息都在这个文件内

  • 用户名:代表密码:uid:gid:账户的描述信息:家目录:登录shell

2、使用命令usermod
用法:usermod [选项] 用户名

选项:
  -c, --comment 注释            GECOS 字段的新值
  -d, --home HOME_DIR           用户的新主目录
  -e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE
  -f, --inactive INACTIVE       过期 INACTIVE 天数后,设定密码为失效状态
  -g, --gid GROUP               强制使用 GROUP 为新主组
  -G, --groups GROUPS           新的附加组列表 GROUPS
  -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,
                                并不从其它组中删除此用户
  -h, --help                    显示此帮助信息并推出
  -l, --login LOGIN             新的登录名称
  -L, --lock                    锁定用户帐号
  -m, --move-home               将家目录内容移至新位置 (仅于 -d 一起使用)
  -o, --non-unique              允许使用重复的(非唯一的) UID
  -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL             该用户帐号的新登录 shell
  -u, --uid UID                 用户帐号的新 UID
  -U, --unlock                  解锁用户帐号
  -Z, --selinux-user  SEUSER       用户账户的新 SELinux 用户映射
1、修改用户的UID
1、创建测试用户
[root@edenluo.com ~]# useradd edenluo
[root@edenluo.com ~]# id edenluo
uid=1002(edenluo) gid=1002(edenluo)=1002(edenluo)
2、修改用户的UID
[root@edenluo.com ~]# usermod -u 1111 edenluo
[root@edenluo.com ~]# id edenluo
uid=1111(edenluo) gid=1002(edenluo)=1002(edenluo)

2、修改shell
查看edenluo用户原来的shell
[root@edenluo.com ~]# grep edenluo /etc/passwd
edenluo:x:1111:1002::/home/edenluo:/bin/bash
## 修改shell
[root@edenluo.com ~]# usermod -s /sbin/nologin edenluo
[root@edenluo.com ~]# !grep
grep edenluo /etc/passwd
edenluo:x:1111:1002::/home/edenluo:/sbin/nologin
2、更改用户主目录
先登录到用户家目录创建一个文件便于测试
[root@edenluo.com ~]# cd /home/edenluo/
[root@edenluo.com edenluo]# touch a.txt
可以看到刚刚创建的文件
[root@edenluo.com edenluo]# ll
总用量 0
-rw-r--r--. 1 root root 0 118 20:03 a.txt
使用-d参数移动家目录
[root@edenluo.com edenluo]# usermod  -m -d /tmp/demo edenluo
[root@edenluo.com edenluo]# cd /tmp/demo
可以看到家目录已经移动过来了
[root@edenluo.com demo]# ls
a.txt

这里的 -m选项会自动创建新目录并且移到内容到新目录里面

3、添加说明信息
查看没有添加之前的信息
[root@edenluo.com demo]# grep edenluo /etc/passwd
edenluo:x:1111:1002::/tmp/demo:/sbin/nologin
使用-c参数添加
[root@edenluo.com demo]# usermod -c "i am demo" edenluo
## 查看添加之后的信息
[root@edenluo.com demo]# grep edenluo /etc/passwd
edenluo:x:1111:1002:i am demo:/tmp/demo:/sbin/nologin
4、修改用户名为zhangsan
[root@edenluo.com demo]# usermod -l zhangsan edenluo
[root@edenluo.com demo]# id zhangsan
uid=1111(zhangsan) gid=1002(edenluo)=1002(edenluo)
# 可以看到原来的用户没有了
[root@edenluo.com demo]# id edenluo
id: edenluo: no such user
  • 此处需要注意,把edenluo 改为zhangsan
  • 语法为:
  • usermod -l 新用户 要修改的用户名
5、 锁定用户demo
  • 账号锁定之后,普通用户无法su,root 可以su
[root@edenluo.com demo]# usermod -L demo
6、 解锁用户demo
[root@edenluo.com demo]# usermod -U demo
7、添加新的附加组
[root@edenluo.com demo]# usermod -aG 组名 用户名
  • 注意: 组名在前面,用户在后面
8、指定帐号过期日期
[root@edenluo.com demo]# usermod -e 2023/11/11 demo

查看过期时间
[root@edenluo.com demo]# chage -l demo
最近一次密码修改时间			 :1月 18, 2023
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间					:11月 11, 2023
两次改变密码之间相距的最小天数	  :0
两次改变密码之间相距的最大天数	  :99999
在密码过期之前警告的天数	    :7
9、指定用户帐号密码过期多少天后,禁用该帐号
## 先查看lisi用户的账号信息
[root@edenluo.com demo]# sed -n '$p' /etc/shadow    tail -1 /etc/shadow   
lisi:!!:19375:0:99999:7:::
## 使用 -f 参数进行修改
[root@edenluo.com demo]# usermod -f 30 lisi
[root@edenluo.com demo]# !sed
sed -n '$p' /etc/shadow
lisi:!!:19375:0:99999:7:30::
  • 可以看到实效的时间已经变成了30天

4、账户密码操作

1、给账户设置密码

[root@edenluo.com ~]# passwd     并且默认密码符合复杂度, 大写,小写,数字,特殊符号,  8
只适用于root账户	
[root@edenluo.com ~]# passwd 用户名称    passwd 后面要跟用户名,必须root用户

2、锁定密码,不允许修改密码

[root@edenluo.com ~]# passwd -l 账户名称
[root@edenluo.com ~]# passwd -l user10       同时普通用户也无法切换到密码suo
锁定用户 user10 的密码 。
passwd: 操作成功

3、解锁密码,允许修改密码

[root@edenluo.com ~]# passwd -u 账户名称
[root@edenluo.com ~]# passwd -u user10
解锁用户 user10 的密码 。
passwd: 操作成功

4、查看密码状态

[root@edenluo.com ~]# passwd -S 账户名称
[root@edenluo.com ~]# passwd -S user10
user10 PS 2013-11-21 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)
[root@edenluo.com ~]# passwd -S user10
user10 LK 2013-11-21 0 99999 7 -1 (密码已被锁定。)

5、强制指定的用户在下次登陆时必须重置其密码

[root@edenluo.com ~]# passwd -e user10 
Expiring password for user user10. 
passwd: Success

6、删除指定用户的密码值:

[root@edenluo.com ~]# passwd -d user10 
Removing password for user user10. 
passwd: Success

7、静默设置密码

[root@edenluo.com ~]# echo ‘123’ | passwd  --stdin user10 

8、/etc/shadow 又称他为影子文件

[root@edenluo.com ~]# man 5 shadow
eden:$6$Qxq1sIXL$3dG7NNqtwFAj/etKKs3dZ9NzQS0NES42cDn78go/5s8ijGh9fIsEQnqRf2eGtV29eWIcy.mvZdX7asaiafkj00:19590:7:90:7:7::
  • 用户名
  • 密码密文,由3部分组成,其中第一部分表示加密方式:
    1 1 1 表示 MD5
    5 5 5 表示 SHA-256
    6 6 6 表示 SHA-512
    2 a 2a 2a 2 y 2y 2y表示Blowfish算法
  • 最后一次更改密码的日期 .(从1970年1月1日开始计算,到修改密码时的天数)
  • 两次修改密码间隔的最小天数,如果是0,表示随时可以修改密码。
  • 两次修改密码间隔的最大天数,超过这个天数,密码将失效(密码有效期)。默认值99999表示永不失效。
  • 密码警告期限(密码失效前多少天提醒用户修改密码)。默认提前一周通知用户修改密码(登录系统时,系统提示修改密码)。
  • 密码禁用期限,密码过期之后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)
  • 账户过期期限,从1970年1月1日开始计算,超过这个日期,帐户将无法使用。空字段表示账户永不过期。
  • 保留字段

5、删除账户

[root@edenluo.com ~]# userdel -r 用户名称
-r 连带个人信息(家目录,个人邮箱)一起删除	

6、切换账户

[root@edenluo.com ~]# su -  账户    - 完全切换(包括所在路劲切换到用户家目录,bash)  不加- 是不完整切换 bash 保留所在路径
[root@edenluo.com ~]# su -l 账户    -l  login

三、组管理

1、创建组

[root@edenluo.com ~]# groupadd 组名
[root@edenluo.com ~]# groupadd -g gid 组名
[root@edenluo.com ~]# groupadd -g gid -o 组名

2、查看组

[root@edenluo.com ~]# cat /etc/group
  • 组名:代表组密码:gid:组员

3、查看一个用户的所属组

[root@edenluo.com ~]# groups 用户名称

4、修改组

[root@edenluo.com ~]# groupmod 参数 组名
  • ​ -g 修改组id
  • ​ -n 设置群组名称
  • ​ -o 允许重复使用组id
[root@edenluo.com ~]# groupmod -g 2000 grp1
[root@edenluo.com ~]# groupmod -n grp3 grp1

5、给组设置密码

[root@edenluo.com ~]# gpasswd 参数 组名
[root@edenluo.com ~]# gpasswd grp2  

组密码作用:临时切换当前登陆账户组身份,让这个账户暂时拥有所切换组的权限

例子:用户tingting临时切换到1802组,
tingting是不属于1802组的
[tingting@wing ~]$ ll /a
-rw-r----- 1 root 1802 0 Jun 27 10:00 /a

[tingting@wing ~]$ cat /a
cat: /a: Permission denied
[tingting@wing ~]$ newgrp 1802
Password: 
[tingting@wing ~]$ cat /a
[tingting@wing ~]$ 

6、给组添加账户

[root@edenluo.com ~]# gpasswd -a user10 grp2
Adding user user10 to group grp2
  • 同时添加多个用户到组:
[root@edenluo.com ~]# gpasswd -M jim,tom,wing 组名

7、从组删除账户

[root@edenluo.com ~]# gpasswd -d user10 grp2

8、指定组管理员

[root@edenluo.com ~]# gpasswd -A user12 grp2

9、组密码文件

[root@edenluo.com ~]# cat /etc/gshadow
 组名:密码:组管理员:组员

10、删除组

 [root@edenluo.com ~]# groupdel 组名
用户的主属组不能删除

如果有版帮助,帮忙免费的关注一下**公众号「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

尘嫣慕曦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值