linux基础之用户及用户组管理

亡梦爱人 提交于 2020-01-16 16:40:36

本节内容

用户管理

       1. 为什么需要用户?

              1.linux是一个多用户系统

              2.权限管理(权限最小化)

       2. 用户相关文件

              /etc/passwd -->用户基本信息

              /etc/shadow -->密码信息

              /etc/default/useradd -->保存了useradd的默认配置

              /etc/login.defs -->保存了全局信息

              /etc/group     -->组信息

              /etc/gshadow-->组密码

              /etc/skel-->用户家目录模板

       3. 用户信息

              三类用户:

                     超管root0

                     系统用户(运行服务,通常不许登录系统1-999

                     普通用户(1000-60000

       4. useradd:添加用户

              -g: 指定主组

              -G:指定附加组

              -u: 指定uid

              -r: 创建系统用户

              -s: 指定shell类型(/bin/bash,/sbin/nologin

-c: 添加描述信息

       5. usermod:修改用户信息

              -g: 指定主组

              -G:指定附加组

              -u: 指定uid

              -r: 创建系统用户

              -s: 指定shell类型(/bin/bash,/sbin/nologin

              -l: 改名

              -e: 过期时间(/

       6. passwd:修改用户密码

              passwd 用户名

              echo "用户密码" | passwd --stdin "用户名"

       7. groupadd:添加组

       8. userdel:删除用户

              -r: 删除用户家目录

       9. groupdel:删除组

       10. id: 查看用户信息

       11. su:切换用户



 一、用户管理

为什么需要有用户?

1. linux是一个多用户系统

2. 权限管理(权限最小化) 

用户:存在的目的是为了对系统中的资源做归属

密码:存在的目的是为了对用户做身份认证

用户和用户组

用户组,在用户组中可以包含一个或者多个用户(用户组是为了方便对多个用户进行授权操作)

二、用户管理相关文件

/etc/passwd:用户基本信息

/etc/shadow:用户密码信息、过期时间等

/etc/group:用户组信息

/etc/gshadow:用户组密码

/etc/default/useradd:创建用户的默认配置信息

/etc/skel/:用户家目录模板

/etc/login.defs:全局用户设定信息 

1/etc/passwd:用户基本信息

1. 该文件中一行就是一个用户!

2. 统计当前系统中有多少用户:

[root@renyz08 ~]# cat /etc/passwd | wc -l

20

3. passwd文件详解

account:password:UID:GID:GECOS:directory:shell

accout:用户名

password:用户密码,密码位置默认是x(用x进行密码占位)

UID:用户身份id,用来唯一的标识一个用户

GID:用户组id,用来在系统中唯一的标识一个用户组(这里指的是其基本组的组ID

GECOS:用户描述信息,可以空白,也可以随意写(useradd -c )

directory:用户家目录(/root用户家目录,其他用户是在/home

shell:用户所使用的shell类型

shell类型:

/bin/bash-->可以登录系统

/sbin/nologin-->该用户一定无法登录系统

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

用户名       用户id   用户所在组的id  描述信息    家目录    shell类型

比如:

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

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

2/etc/group:用户组信息

Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组

概念(主组和附加组):

用户的基本组(主组):当前用户具有哪个组的权限

用户的附加组:用户额外属于的组

root:x:0:

root 组名

x进行密码占位(组密码)

0 GID(组ID

最后还有一位表示有哪些用户在此组内

如下:表示ken用户在root组内

root:x:0:

renyz08:x:1000:renyz08

3/etc/default/useradd

定义创建用户默认选项的文件

# useradd defaults file          # useradd默认文件

GROUP=100                 #表示可创建普通组

HOME=/home                #用户的家目录建在/home中;用户家目录的默认创建地

INACTIVE=-1                #是否启用帐号过期停权,-1表示不启用;宽限天数,0及以下数皆为无效数字

EXPIRE=                    #帐号终止日期,不设置表示不启用;帐号失效日期(如:20081212)

SHELL=/bin/bash              #所用SHELL的类型;登录后执行的程序

SKEL=/etc/skel                #用户家目录中的环境文件,默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的;

CREATE_MAIL_SPOOL=yes    #是否创建用户邮件缓冲,yes表示创建

三、linux中的用户类别

超级管理员(root  uid 0

系统用户           uid 1-999             运行服务

普通用户           uid 1000+ 1k-60k 工作中用到的用户

注意:uid的划分只是一种规范,可以自己随意指定

系统用户:

1. 运行服务程序的

2. 一般不让系统用户登录系统

3. 系统用户无家目录

创建用户时默认的shell类型为/bin/bash

面试题:系统用户都是不可以登录系统的吗?

错误的。在linux当中创建用户的时候默认使用的shell类型为/bin/bash是可登录系统的,如果没有指定不可登录系统的shell类型的话。系统用户是可以登录我们的系统的。只是说在工作中需要不让系统用户登录系统,我们在创建系统用户的时候指定系统用户的shell类型不可登录系统。

四、useradd命令

作用:创建用户

使用格式:

useradd options... username

选项:

-d, --home HOME_DIR:指定用户家目录

-c, --comment COMMENT:用户说明信息(添加描述信息)

-e, --expiredate EXPIRE_DATE:指的账号的过期时间,时间格式 YYYY/MM/DD

-g, --gid GROUP:指的用户的基本组的组id(主组ID

-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指的用户的附加组列表

-u--uid UID:指的用户的uid

-m, --create-home:创建用户的时候自动创建用户家目录(默认就已经使用)

-M:不自动创建用户家目录

-o, --non-unique:通常和-u一起使用,用来让两个用使用相同的uid

-r, --system:创建一个系统用户

-s, --shell SHELL:在创建用户的时候,指定用户的shell类型(/bin/bash/,/sbin/nlogin)

例子1:创建普通用户ren

[root@renyz08 ~]# useradd ren

[root@renyz08 ~]# tail -1 /etc/passwd

ren:x:1001:1001::/home/ren:/bin/bash

例子2:创建用户并添加描述信息

[root@renyz08 ~]# useradd -c "Hello linux" ren1

[root@renyz08 ~]# tail -1 /etc/passwd

ren1:x:1002:1002:Hello linux:/home/ren1:/bin/bash

例子3:创建用户并指定用户ID1010

[root@renyz08 ~]# useradd -u 1010 ren2

[root@renyz08 ~]# tail -1 /etc/passwd

ren2:x:1010:1010::/home/ren2:/bin/bash

例子4:创建用户并指定主组ID0  #指定组的时候组必须存在!

[root@renyz08 ~]# useradd -g 0 ren3

或者

[root@renyz08 ~]# useradd -g root ren3

[root@renyz08 ~]# id ren3

uid=1011(ren3) gid=0(root) =0(root)

例子5:创建用户并指定附加组ID0  #指定组的时候组必须存在!

[root@renyz08 ~]# useradd -G 0 ren4

[root@renyz08 ~]# id ren4

uid=1012(ren4) gid=1012(ren4) =1012(ren4),0(root)

例子6:创建系统用户

[root@renyz08 ~]# useradd -r -s /sbin/nologin ren5

[root@renyz08 ~]# tail -1 /etc/passwd

ren5:x:997:995::/home/ren5:/sbin/nologin

1.可以查看用户ID,发现是1000以内

2.用户家目录不会创建

五、passwd命令

作用:设置用户密码

选项:

-l 锁住密码(lock

-u 解锁密码(unlock

-d 删除用户密码(delete

-e 使用户密码过期(expire到期、终止)

--stdin 从标准输入获取密码(standard input)

例子1:给用户创建密码

[root@renyz08 ~]# passwd ren

更改用户 ren 的密码

新的密码:

无效的密码: 密码少于 8 个字符

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

Changing password for user ren.

New password:

BAD PASSWORD: The password is shorter than 8 characters

Retype new password:

passwd: all authentication tokens updated successfully.

注意:root登录到普通用户是不需要输入密码的!

[root@renyz08 ~]# su - ren

[ren@renyz08 ~]$ su – root   #从普通用户切换到root是需要输入密码的

Password:

[ren@renyz08 ~]$ exit  #输出exit退回上一次登录的用户

logout

[root@renyz08 ~]#

例子2:锁住用户密码

[root@renyz08 ~]# passwd -l ren

Locking password for user ren.

passwd: Success

[root@renyz08 ~]# su - ren1

[ren1@renyz08 ~]$ su - ren  #普通用户在此登录输入密码之后会提示认证失败!

Password:

su: Authentication failure鉴定故障

例子3:解锁用户密码

[root@renyz08 ~]# passwd -u ren

解锁用户 ren 的密码。

passwd: 操作成功

[root@renyz08 ~]# su - ren1

上一次登录:四 7 11 19:29:01 CST 2019pts/0

[ren1@renyz08 ~]$ su – ren   #再次输入密码登录发现可以正常登录

密码:

上一次登录:四 7 11 19:28:01 CST 2019pts/0

最后一次失败的登录:四 7 11 19:29:46 CST 2019pts/0

最有一次成功登录后有 1 次失败的登录尝试。

[ren@renyz08 ~]$

例子4:让用户密码过期

[root@renyz08 ~]# passwd -e ren

正在终止用户 ren 的密码。

passwd: 操作成功

[ren1@renyz08 ~]$ su – ren

Password:

You are required to change your password immediately (root enforced)

Changing password for ken.

您需要立即更改密码(root 强制)

ren 更改 STRESS 密码。

(current) UNIX password:    #输入当前用户密码

New password:               #输入新的密码,字母+数字组合

Retype new password:

例子5--stdin使用格式

echo 密码 | passwd --stdin 用户名

[root@renyz08 ~]# echo "0304" | passwd --stdin ren

更改用户 ren 的密码

passwd:所有的身份验证令牌已经成功更新。

passwd: all authentication tokens updated successfully.

六、Userdel命令

作用:删除用户

选项:

-r 删除用户时连同用户家目录删掉

例子1:删除用户及家目录

[root@renyz08 ~]# userdel -r ren4

[root@renyz08 ~]# id ren4

id: ren4: no such user    #ren4用户了

[root@renyz08 ~]# ls /home   #用户家目录也无ren4家目录

ren  ren1  ren2  ren3  renyz08

例子2:删除用户时不删除用户家目录

[root@renyz08 ~]# userdel ren3

[root@renyz08 ~]# id ren3

id: ren3: no such user

[root@renyz08 ~]# ls /home

ren  ren1  ren2  ren3  renyz08   #但是用户家目录依然存在

[root@renyz08 ~]# useradd ren3  #创建同名用户时报如下的错误

useradd: warning: the home directory already exists.

Not copying any file from skel directory into it.

Creating mailbox file: File exists

useradd:警告:此主目录已经存在。

不从 skel 目录里向其中复制任何文件。

正在创建信箱文件: 文件已存在

[root@renyz08 ~]# id ren3  #但是用户仍然创建成功了

uid=1011(ren3) gid=1011(ren3) =1011(ren3)

如果不想看到上面的报错信息需要如下的操作:

[root@renyz08 ~]# userdel ren3

[root@renyz08 ~]# rm -rf /home/ren3   #删除用户家目录

[root@renyz08 ~]# rm -rf /var/spool/mail/ren3   #删除用户邮箱

[root@renyz08 ~]# useradd ren3

[root@renyz08 ~]#

例子3:使用userdel ren3删除用户ren3后,再创建同名文件,登录ren3后的问题解决

-bash-4.2$

如果登录用户的时候发现出现上面的错误是因为缺少用户家目录模板下面的三个隐藏文件

处理办法:cp /etc/skel/.bash* /home/ren3

如下操作:

[root@renyz08 ~]# userdel ren3

[root@renyz08 ~]# id ren3

id: ren3: no such user

[root@renyz08 ~]# useradd ren3

useradd:警告:此主目录已经存在。

不从 skel 目录里向其中复制任何文件。

正在创建信箱文件: 文件已存在

[root@renyz08 ~]# su - ren3

最后一次失败的登录:五 7 12 18:11:08 CST 2019pts/0

最有一次成功登录后有 2 次失败的登录尝试。

su: 警告:无法更改到 /home/ren3 目录: 权限不够

-bash: /home/ren3/.bash_profile: 权限不够

-bash-4.2$ rm -rf /home/ren3

rm: 无法删除"/home/ren3": 权限不够

-bash-4.2$ exit

登出

-bash: /home/ren3/.bash_logout: 权限不够

[root@renyz08 ~]# rm -rf /home/ren3

[root@renyz08 ~]# mkdir /home/ren3

[root@renyz08 ~]# cp /etc/skel/.bash* /home/ren3

[root@renyz08 ~]# su - ren3

上一次登录:五 7 12 18:13:19 CST 2019pts/0

[ren3@renyz08 ~]$

七、groupadd

作用:创建用户组

例子1:创建组

[root@renyz08 ~]# groupadd ren5

[root@renyz08 ~]# tail -1 /etc/group

ren5:x:1012:

八、groupdel

作用:删除用户组

例子1:删除组

[root@renyz08 ~]# groupdel ren5

[root@renyz08 ~]# tail -1 /etc/group

九、id命令

作用:查看指定的用户信息(或判断用户是否存在)

格式:id [-u|-g|-G] username

选项

-u:仅仅显示用户uid

-g:仅仅显示用户gid

-G:仅仅显示用户全部组id

例子1:查看用户信息

[root@renyz08 ~]# id ren1

uid=1002(ren1) gid=1002(ren1) =1002(ren1)

[root@renyz08 ~]# id ren6

id: ren6: no such user

十、su命令(switch user

作用:切换用户

格式:su 目标用户

注意:在切换用户的时候需要加上-进行环境变量的整体改变

su命令和su -命令最大的本质区别就是:

前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下susu -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令

例子1:切换用户

[root@renyz08 ~]# su - ren

十一、/etc/shadow:用户密码信息、过期时间等

zxhk:  $6$dgnPoZ0s$6xNKEWz : 17729 : 0 : 99999 :  7  :   :   :

第一段:用户名:

第二段:加密后的密码

第三段:上次修改密码举例元年经过的天数197011日(如果该字段空,意味着该用户密码被禁用)

第四段:密码最短使用时间(0表示不限制)

第五段:密码最长有效期(99999表示不限制)(如果第5的值小于第四段,那么用户无法修改自己的密码)

第六段:密码到期前几天开始发送告警,提示密码即将过去,请立即修改

第七段:非活动期间,密码到期后的宽限时间(登录系统的时候必须先修改密码,才能登录)

第八段:密码过期时间(也是举例计算机元年经过的天数)(这里和前面的几个时间没有联系)

第九段:保留字段

常常听到:我的密码忘记或者被更动了?怎么办?

有的时候会发生这样的情况,就是说,你的 root 密码忘记了!要怎么办?重新安装吗?另外, 有的时候是被入侵了, root 的密码被更动过,该如何是好?

这个时候就必须要使用到 /etc/shadow 这个资料了!我们刚刚知道密码是存在这个档案中的, 所以只要你能够以各种可行的方法开机进入 Linux ,例如单人维护模式,或者是以 live CD (KNOPPIX) 来进入 Linux 系统。之后,将硬碟顺利挂载,然后进入 /etc/shadow 这个档案中,将 root 的密码这一栏全部清空!然后再登入 Linux 一次,这个时候 root 将不需要密码 (有的时候需要输入空白字元) 就可以登入了!这个时候请赶快以 passwd 设定 root 密码即可。 

十二、usermod命令

作用:修改用户信息

选项:

-g,--gid GROUP:更新使用者新的起始登入群组。群组名须已存在。(指定主组的ID

-G--groups GROUP1[,GROUP2,...[,GROUPN]]]:   使 groups 的成员。每个群组使用,区格开来(指定附加组ID

-u--uid UID: 用者ID值。必须为唯一的ID值(指定UID

-s--shell SHELL: 指定新登入shell。如此栏留白,系统将选用系统预设shell

-L --lock: 锁定用户的密码

-U 解锁用户的密码

-l--login NEW_LOGIN :变更使用者login时的名称为login_name

-e--expiredate EXPIRE_DATE:加上使用者帐号停止日期。日期格式为 MM/DD/YY.

 -d--home HOME_DIR:更新使用者新的登入目录。

-m--move-home:移动用户家目录至新的位置

例子1:更改ren1用户的uid1010

[root@renyz08 ~]# usermod -u 1010 ren1

[root@renyz08 ~]# id ren1

uid=1010(ren1) gid=1004(ren1) =1004(ren1)

例子2:更改ren1用户的主组为root

[root@renyz08 ~]# usermod -g root ren1

[root@renyz08 ~]# id ren1

uid=1010(ren1) gid=0(root) =0(root)

例子3ren2用户添加root为附加组

[root@renyz08 ~]# usermod -G root ren2

[root@renyz08 ~]# id ren2

uid=1005(ren2) gid=0(root) =0(root)  #会替换以前的附加组

例子4ren2用户增加ren1为附加组

[root@renyz08 ~]# usermod -G root,ren1 ren2

[root@renyz08 ~]# id ren2

uid=1005(ren2) gid=0(root) =0(root),1004(ren1)

例子4:更改ren1用户登录名为ren10

[root@renyz08 ~]# usermod -l ren10 ren1  #新名在前,旧名在后

[root@renyz08 ~]# id ren1

id: ren1: no such user

[root@renyz08 ~]# id ren10

uid=1010(ren10) gid=0(root) =0(root)


 练习

1. 创建用户javauid 1000 基本组是gp001 附加组 gp002 gp003

2. 修改用户java

将名称修改为python

uid修改为 2000

修改主组是cats

shell类型改为 /sbin/nologin

让该用户在101号到期

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!