当前位置: 首页 > article >正文

Linux用户管理

用户管理

        在 Linux 系统中各种会存在着多个用户。我们的使用者靠用户名来区分各自登陆的账

号。如果我们的用户想要使用系统资源,就必须在系统中拥有合法的账号。在系统多个文

件中都保存了用户身份相关信息。

系统靠ID号区分用户(ls -n

使用者靠用户名来区分各自登录的账号#lastlog 查看所有

用户相关配置文件:

1. /etc/passwd

 root       :         x         :         0        :          0         :      root     :     /root      :    /bin/bash   

用户名        密码占位符     用户UID        初始组ID      注释信息      用户家目录       shell类型

在/etc/passwd 文件中用:当做分隔符,一共有 7 列。每列的内容分别是:

第一列:用户名

第二列:密码占位符(真正的密码文件在/etc/shadow

但是如果如果取消密码占位符。就可以实现本地免密码登录

(第二列如果为空则不能进行远程登录)。

第三列:用户 IDUID

 0 root用户(超级用户)

1-499                                          500-65535             #c6

1-999                                        1000-65535             #c7

系统或服务用户                     普通用户

当创建一个新用户时 UID 从 1000 开始,最大到 60000。2.6.x 内核

uname -r 查看内核版本)以后的 Linux 系统 UID 可以支持 2^32

UID 了(修改最大 UID 范围/etc/login.defs)。

第四列:初始组 IDGID

:拥有相同权限的用户的集合。

初始组:用户创建时默认加入的组

附加组:用户为了获取权限而加入的组

当前组当前生效的组:默认情况下,用户登录系统使用初始组为当前组。可以通过newgrp进行切换当前组。当前组会决定我们新建文件目录的所属组。只要加到组里,就拥有组的权限,无论它是不是当前组。

创建用户时如果不指定用户的初始组,则会自动创建和用户名相同的组,初始组只能

有一个。也就是说用户登陆系统,立刻就拥有初始组的相关权限/身份。

第五列:用户描述信息(类似于“注释”,不建议更改))。

第六列:用户家目录

第七列:用户的 shell 类型

用户会取得一个 shell 与系统的内核通信以进行用户的操作任务。

/bin/bash:能正常登陆系统 shell 类型为 bash

/sbin/nologin:不能登陆系统,可以使用系统资源。服务用户shell类型 ngnix

#cat -n   /etc/passwd 可查看创建用户,rpm包默认帮助把服务用户创建,直接使用即可。源码包需要自行创建服务用户 ①可以login uid1000

2. /etc/shadow:

bin   :      *      :   17834   :        0       :   99999   :    到期前   :  密码过期后   :              :                

用户名   用户密码  最近更改时间 不可更改时间  有效期   警告天数   宽限天数   失效日期      保留 

第一列:用户名。

第二列:经过加密编码的密码,$6$开头的表明是使用 SHA-512 加密。

!!“*”代表没有密码,不能登录(在第二列用户的密码前面加入一个“!”或“*”,加入后都不能登录)(新建用户时,如果不设置密码,那么第二列为“!!”)

第三列:密码最近更改时间

此段记录了改动密码的日期,日期是由 1970 年 1 月 1 日作为标准时间来计算的。

时间戳转日期:

日期转时间戳:(86400 为每一天的秒数

第四列:密码不可被更改的天数(与第三列相比

账号的密码在最近一次修改过之后需要经过几天才可以再次修改。

0 ,表示密码随时可以被修改。

5, 5 天之后才能更改密码。

第五列:密码最长有效期(与第三列相比)

而默认的 99999(273 年)表示为 近似永久。

第六列:密码到期前的警告天数(与第五字段相比)

当账号的密码有效期快到的时候,系统会依据这个字段的设置发出“警告”给这个账

号,提醒他过 N 天后你的密码即将过期。

第七列:密码过期后的宽限天数(密码失效日,与第五字段相比)

密码过期后预留几天给账户修改密码,此时已无法使用旧密码登陆系统。

 0,代表密码过去就马上失效。

 5,代表密码会在 5 天后失效。

-1,代表密码永远不会失效。

第八列:账号失效日期

这里同样要写时间戳,用 1970 年 1 月 1 日进行时间换算,如果超过了失效时间,用户

也就失效无法使用了。

第九列:保留。

#passwd -l 用户名 锁定用户   -u解锁

3. /etc/group

   root      :           x           :       0       :      user1    

用户组名称    组密码占位符      组GID        组内成员

第一列:组名称(默认组成员)。

第二列:组密码占位符。

第三列:组 ID 号(GID

第四列:组内成员列表

管理命令:

新建组:groupadd 组名

-g  #指定新建用户组的GID

-o  #表示新建用户组的GID可以和系统已有的GID相同

设置组密码:gpasswd 组名                                                                      如何临时添加?如何永久添加?

永久添加组员:gpasswd -a 用户名 组名

            修改/etc/group配置文件,将成员名加入最后一列

设置组管理员:gpasswd -A 用户名 组名(root用户才可以执行此命令)

临时添加组员:newgrp 组名

#临时添加当前用户到某个组(重新登录失效   #exit退出

#需要先给组设置密码;添加时需要输入密码;不会写入配置文件。

删除组成员:gpasswd -d 用户名 组名

#newgrp A 会切换当前用户的当前组为A

4. /etc/gshadow

     root      :           :            :               

   用户组      组密码   管理员     组成员  

第一列:组名称第二列:经过加密的组密码,这个段可以为空或!,如果是空或!表示没有密码。

第三列:用户管理员,这个字段也可以为空,如果有多个用户组管理者,用,分隔。

第四列:组成员,如果有多个成员,用,分隔。

通过 gpasswd 组名的方式来为组设置密码(需要 root 用户设置)。

组密码的作用:用户可以通过输入组密码的方式临时切换到组中,获取相应的组权限。

如果没有设置组密码,则只有属于本用户组的用户能够切换到本用户组的身份。

通过 gpasswd -A 账户名 组名 来为组添加管理员(拥有添加或移除组员的权限,只有

root 有权限添加管理员,即使是默认初始组,也没有组管理员权限)。

通过 gpasswd -a/-d 用户名 组名 来添加/移除组成员

5. /etc/login.defs 

一般不修改

#当用户创建时,同时在目录/var/spool/mail 中创建一个用户 mail 文件

#指定密码保持有效最大天数。

#表示修改密码的间隔时间。

#指定密码的最小长度。

#表示密码到期前多少天系统提示用户密码到期。

#指定 UID 最小为 1000,也就是说创建新用户时用户的 UID 从 1000 开始。

#指定最大 UID 为 60000。

#系统用户最小 201

#系统用户最大 999

#最小 GID 为 1000。

#最大 GID 为 60000。

#系统组 ID 最小 201#系统组 ID 最大 999

#指定是否创建用户家目录,yes 为创建,no 表示不创建。

#创建用户时默认创建用户家目录。

#创建用户家目录权限默认掩码值。

#表示 userdel 删除用户时,如果该用户初始组没有成员存在,则会删除组。

#使用 SHA512 加密方式。

6. /etc/default/useradd

一般不修改

#创建用户的默认文件

#新创建用户时默认初始组的 GID 号(公共组),现在使用的都是私有组机制(根据创建用

户名称创建组)

#/home 表示用户家目录的位置

#表示是否启用账号过期禁用,-1 表示不启用。

#表示账号过期,不设置表示不启用。

#指定了新建用户的默认 shell 类型。

#指定用户家目录中默认文件的来源,新建用户家目录下的文件都是从这个目录中复制的。

#表示是否创建邮箱缓存 yes 表示创建

7. /etc/skel/ 家目录模板

[root@localhost ~]# ls -a /home/user1

.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

[root@localhost ~]# ls -a /etc/skel/

.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

在创建新用户后,会在新用户家目录下看到类似.bash_profile .bashrc .bash_logout等文件。

/etc/skel 目录定义了新建用户在主目录下默认的配置文件,

例:需要创建N个用户,且N个用户的家目录都需要,test.1文件

先创建文件再创建用户

#touch test.1 /etc/skel/    

#useradd  用户1

#useradd  用户2

#ls -a /home/1

#ls -a /home/2

用户管理相关命令

   useradd 创建用户过程:useradd 不加任何参数(选项)创建时,系统首先读取用于添加用

户的配置文件/etc/login.defs 和/etc/default/useradd 根据这两个配置文件中定义的规

则添加用户。然后向/etc/passwd 和/etc/group 文件添加用户和用户组记录,同时

/etc/passwd 和/etc/group 对应的加密文件也会自动生成记录。接着系统会自动在

/etc/default/useradd 文件设定的目录下建立用户家目录。最后复制/etc/skel 目录中的

所有文件到新用户的家目录中,新用户建立完成。

1.useradd 【选项】 用户名

-uuid 用户标识号,此标识必须唯一。 手动创建 多为1000以内

-ggroup 指定新用户的初始组(组名称)。

#groupadd  -g 100  g01   提前创建组名称,再创建用户

#useradd     -g  g01 -u 100 u01

-G:指定新用户的附加组,必须是已经存在的组。附加组对于默认组而言,当一个用户同

时是多个组中的成员时,登录时默认组称为主组,其他组称为附加组。

#useradd -G root hf05   = #useradd hf05 #gpasswd -a hf05 root

           相当于先创建hf05用户,再把它指定用户分到已存在的组root

-d:home 指定新建用户的默认家目录,如果不指定系统会在/etc/default/useradd 文件指

定的目录下创建用户主目录。

-s : shell 指 定 新 建 用 户 使 用 默 认 的 shell 类 型 , 如 果 不 指 定 , 会 在

/etc/default/useradd 文件中定义的 shell 作为新用户的默认 shell。

-ccomment 对新建用户添加说明信息。

-f:inactive 指定账号过期多长时间后会永久停用。当值为 0 时账号立刻停用。当值为-1

时则关闭此功能。

-M:创建时不生成用户家目录。

-r:自动将用户 UID GID 指定到 1000 以内,不在/home 下创建用户家目录。

# useradd  -r -s  /sbin/nologin   hf01()

# useradd  -r -s  /sbin/nologin                                                           创建服务用户nginx

nginx解压后#cd ./nginx补全

#./configure --user=nginx --prefix=/usr/local/nginx   指定安装服务用户安装

#make  $$make install

2.usermod [选项] 用户名         useradd取代了

-u UID #修改用户的指定 UID

-g 组名 #修改用户的指定初始组(尽量不修改)

-G 组名 #修改用户的附加组(不管之前设置了多少附加组,都替换掉)(加上-a 选项可

不替换)

-c 说明 #修改用户的描述信息

-d 目录 #结合 -m 选项直接对源家目录进行改名实现修改家目录

usermod –m –d /home/u4 user4 (用户 user 的原家目录是/home/user4

-s shell 类型 #修改用户的登录 shell 类型

-L(大) 用户名 #锁定用户的密码

-U(大) 用户名 #解锁用户密码

-l 新用户名 旧用户名 #修改用户名

3.userdel 【选项】 用户名

-r 删除用户时,连带家目录一起删除

4.passwd 【选项】 用户名

-l 用户名 #锁定用户的密码,使之无法登录系统。

-u 用户名 #解锁用户密码。

-S 用户名 #查看用户账号状态。

第一次对一个用户使用时是为此用户创建密码,第二次使用时是修改密码。

当普通用户没有密码时,自己是修改不了密码的。

密码明文!!!有泄露风险

多在shell脚本使用

非交互式密码设置:

echo "123123" | passwd --stdin user1  

用非交互式的方式设置 user1 的密码为 123123

5.groupadd 【选项】 GID 组名

-g:指定新建用户组的 GID,该 GID 必须唯一,不能和其他用户组的 GID 重复。

-o:表示新用户组的 GID 可以与系统中已有的用户组的 GID 相同。

6.gpasswd 【选项】 用户名 组名

-A:指定组管理员           #    gpasswd   -A  "" root  取消组管理员

-a:向指定组内添加一个成员

-d:把指定用户从组内删除

-M:定义组内成员列表,用户之间用,分隔(覆盖式)

7.newgrp 组名

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户

权限,newgrp 主要用于在多个用户组之间进行切换可使用 exit 退出

8.groupdel 组名

groupdel 用于删除用户组,如果该用户组中扔包括某些用户,则应确认组成员正常权限的

前提下进行删除。

9.groups

查询用户所属哪些组。

其他相关命令

10. id 用户名

#显示用户的 UID、初始组、附加组列表

 

11. su 用户名         newgrp  切换组

  su - 用户名         完全切换用户身份

su 用户名    #切换用户身份,但是当前所在位置不变

su - 用户名  #完全切换用户身份,当前所在位置也会随之改变

echo $PATH 命令看一下 su 和 su -以后的环境变量有何不同。

以此类推,①要从当前用户切换到其它用户也一样,应该使用 su -命令。

                  ②或者重新ssh登录输入用户名密码,,,切换用户身份

(也可以分别用 env 命令查看区别)

12.finger:查看用户详细信息

[root@localhost ~]# finger username

实验:

切换 root 用户把/etc/passwd 文件中 user1 的 shell 类型改成/bin/csh。

退出 root 用户,分别用 su 和 su-切换用户用 useradd 命令看效果(切换后 pwd 看到的目

录有区别)。


http://www.kler.cn/a/323539.html

相关文章:

  • 深入理解 source 和 sh、bash 的区别
  • 【全面系统性介绍】虚拟机VM中CentOS 7 安装和网络配置指南
  • 制作图片马常用的五种方法总结
  • 51c大模型~合集42
  • 前端知识点---this的用法 , this动态绑定(Javascript)
  • 物料数据对接:轻易云助力聚水潭与金蝶云星空集成方案
  • 面试遇到的质量体系10个问题(深度思考)
  • 论文阅读 | 可证安全隐写(网络空间安全科学学报 2023)
  • 神经网络(二):卷积神经网络
  • Vscode 远程切换Python虚拟环境
  • 解决Android中使用jdk 9以上中的某个类(AbstractProcessor)但是无法导入的问题
  • Java中通过方法上注解实现入参校验
  • 计算机毕业设计 在线问诊系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • C++那些你不得不知道的(2)
  • .NET 控制台应用程序连接 MySQL 数据库实现增删改查
  • mysql数据库设置主从同步
  • 自动驾驶电车难题的康德式道德决策
  • 黑马头条day6-kafka及异步通知文章上下架
  • Spring 全家桶使用教程 —— 后端开发从入门到精通
  • C#——switch案例讲解
  • 计算机毕业设计 校园失物招领网站的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 58 深层循环神经网络_by《李沐:动手学深度学习v2》pytorch版
  • 【论文写作】描述一个模型比另一个模型效果好时
  • sentinel原理源码分析系列(二)-动态规则和transport
  • 如何在openEuler上安装和配置openGauss数据库
  • linux编辑文件保存退出的实操讲解