我们大家都知道,要登录linux操作系统,我们必须要有一个用户名和密码。每一个用户都由一个惟一的身份来标识,这个标识叫做用户ID.系统中的每一个用户也至少需要属于一个"用户分组".同样,用户分组也是由一个惟一的身份来标识的,该标识叫做用户分组ID(GID).每位用户的权限可以被定义为普遍用户或者根用户,普通用户只能访问其拥有的或者有权限执行的文件.根用户能够访问系统全部的文件和程序,根用户通常也被称为"超级用户"其权限是系统中最大的,可以执行任何操作.在本篇博客中,我们就一起来学习一下linux对用户和组的管理。
做个广告:我参加CSDN举办的博客之星评选,希望得到大家的支持!
投票地址:点我投票
一. 用户和组文件
1.用户信息
linux操作系统的所有的用户信息都保存在/etc/passwd文件,用于用户登录时校验用户登录名.加密的口令数据项,用户ID(UID),默认用户分组ID(GID),用户信息,用户登录子目录和登录后使用的shell.这个文件的每一行保存一个用户的资料,而用户资料的每一个数据项采用冒号":"分隔,具体文件内容如下:
字段1:用户帐号的名称
字段2:用户密码字串或者密码占位符“x”
字段3:用户帐号的UID号
字段4:所属基本组帐号的GID号
字段5:用户全名
字段6:宿主目录
字段7:登录Shell信息
2. 用户密码信息
inux用户密码信息主要保存在/etc/shadow文件中,这个文件也称为用户影子文件--shadow
LINUX使用不可逆的加密算法如DES来加密口令,所以黑客从密文是得不到明文的.文件的每行是8个冒号分割的9个域,如下:
username:passwd:lastchg:min:max:warn:inactive:expire:flag
解释一下:
username:用户登录名
passwd:加密的用户口令
lastchg:表示从1970年1月1日起到上次修改口令所经过的天数
min:表示两次修改口令之间至少经过的天数
max:表示口令还会有效的最大天数,如果是99999则表示永不过期
warn:表示口令失效前多少天内系统向用户发出警告
inactive:表示禁止登录前用户名还有效的天数
expire:表示用户被禁止登录的时间
flag:保留域,暂未使用
二.用户管理(添加、修改和删除用户命令useradd/usermod/userdel)
1.useradd建立用户
useradd不加任何参数创建用户时,系统首先读取添加用户配置文件/etc/login.defs和/etc/default/useradd,根据这两个配置文件中定义的规则添加用户,然后会向/etc/passwd和/etc/group文件添加用户和用户组记录,同时/etc/passwd和/etc/group对应的加密文件也会自动生成记录,接着系统会自动在/etc/default/useradd文件设定的目录下建立用户主目录,最后复制/etc/skel目录中的所有文件到新用户的主目录中,这样一个新的用户就建立完成了。
示例:
添加一个用户caoshenghuan,指定所属的主用户组为linuxgroup2,附加用户组为linuxgroup,同时指定用户的默认主目录为/opt/caoshenghuan
[root@localhost ~]# useradd -g linuxgroup2 -G linuxgroup-d /opt/caoshenghuan caoshenghuan
[root@localhost ~]# more /etc/passwd|grep caoshenghuan
caoshenghuan:x:523:1030::/opt/caoshenghuan:/bin/bash
[root@localhost ~]# more /etc/group|grep caoshenghuan
linuxgroup:x:1020:caoshenghuan
2.useradd的使用语法
useradd语法的一般格式为:
useradd [-u uid [-o]] [-g group] [-G group,...]
[-d home] [-s shell] [-c comment]
[-f inactive] [-e expire ] name
各个选项具体含义如下:
-u uid:即用户标识号,此标识号必须唯一。
-g group:指定新建用户登录时所属的默认组,或者叫主组。此群组必须已经存在。
-G group:指定新建用户的附加组,此群组必须已经存在。附加组是相对与主组而言的,当一个用户同时是多个组中的成员时,登录时的默认组成为主组,而其它组称为附加组。
-d home:指定新建用户的默认主目录,如果不指定,系统会在/etc/default/useradd文件指定的目录下创建用户主目录。
-s shell:指定新建用户使用的默认shell,如果不指定,系统以/etc/default/useradd文件中定义的shell作为新建用户的默认shell。
-c comment:对新建用户的说明信息。
-f inactive:指定帐号过期多长时间后永久停用。当值为0时帐号则立刻被停权。而当值为-1时则关闭此功能,预设值为-1
-e expire:指定用户的帐号过期时间,日期的指定格式为MM/DD/YY。
name:指定需要创建的用户名。
示例:
添加一个用户bzu,指定UID为686,默认的shell为/bin/csh,让其归属为用户组linuxgroup和linuxgroup2,同时添加对此用户的描述,
[root@localhost ~]# useradd -u 686 -s/bin/csh -G linuxgroup,linuxgroup2 -c "This is test user"bzu
[root@localhost ~]# more /etc/passwd|grep bzu
bzu:x:686:686:This is test user:/home/bzu:/bin/csh
[root@localhost ~]# more /etc/group|grep bzu
linuxgroup2:x:1030:bzu
linuxgroup:x:1020:caoshenghuan,bzu
bzu:x:686:
3
.usermod的使用语法
usermod用来修改用户的账户属性信息,使用语法如下:
usermod [-u uid [-o]] [-g group] [-Ggroup,...][-d
主目录 [-m]] [-s shell] [-c 注释] [-l 新名称]
[-f 失效日期] [-e 过期日期][-L|-U]Name
各个选项具体含义与上面一样。
示例:
修改用户bzu的主用户组为新建的组test_group1,同时修改bzu的附加组为linuxgroup和root,最后修改bzu的默认登录shell为/bin/bash
[root@localhost ~]# groupadd test_group1 #添加一个新的用户组
[root@localhost ~]# more /etc/group|greptest_group1 #显示新增用户组的信息
test_group1:x:1031:
[root@localhost ~]# usermod -g test_group1 -G linuxgroup,root-s /bin/bash bzu
[root@localhost ~]# more /etc/passwd|grep bzu #从输出可知,用户的属性已经更改
bzu:x:686:1031:This is test user:/home/bzu:/bin/bash
[root@localhost ~]# more /etc/group|grep bzu #从输出可知,用户组的属性也同步更改
root:x:0:root,bzu
linuxgroup:x:1020:caoshenghuan,bzu
bzu:x:686:
4
.userdel的使用语法
Userdel用来删除一个用户,若指定“-r”参数不但删除用户,同时删除用户的主目录以及目录下的所有文件。语法格式为:
userdel [-r][用户帐号]
5.如何锁定、解除用户密码
下面首先对bzu和caoshenghuan用户设置密码
[root@localhost ~]# passwd bzu
Changing password for user bzu.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd caoshenghuan
Changing password for user caoshenghuan.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updatedsuccessfully.
下面的操作是通过su命令切换到caoshenghuan用户下,然后在caoshenghuan下再次切换到bzu用户下,这里的切换用户是为了说明一个问题:从超级用户root切换到普通用户下,是不需要输入普通用户密码的,系统也不会去验证密码。但普通用户之间切换是需要密码验证的。
[root@localhost ~]# su – caoshenghuan #通过su命令切换到caoshenghuan用户下
[caoshenghuan@localhost ~]$whoami #用whoami命令查看当前用户
caoshenghuan
[caoshenghuan@localhost ~]$ su - bzu #这里是从caoshenghuan用户下切换到bzu用户下,需要输入密码
Password:
[caoshenghuan@localhost ~]$whoami #成功切换到bzu用户下
bzu
接下来,在root用户下执行usermod锁定bzu的密码,测试bzu是否还能登录,从下面可以看出,密码锁定后,出现登录失败。
[root@localhost ~]# usermod -L bzu #锁定bzu用户的密码
[root@localhost ~]# su - caoshenghuan
[caoshenghuan@localhost ~]$ whoami
caoshenghuan
[caoshenghuan@localhost ~]$ su - bzu #这里输入的密码是正确的,但是提示密码错误,因为密码被锁定了
Password:
su: incorrect password
[caoshenghuan@localhost ~]$ whoami
caoshenghuan
最后对bzu解除密码锁定,登录正常。
[root@localhost ~]# usermod -U bzu #解除密码锁定
[root@localhost ~]# su – caoshenghuan
[caoshenghuan@localhost ~]$ whoami
caoshenghuan
[caoshenghuan@localhost ~]$ su - bzu
Password:
[bzu@localhost ~]$ whoami #密码锁定解除后,bzu用户可以登录系统
bzu
二.用户组管理(添加、切换、删除groupadd/newgrp/groupdel)
1.groupadd命令
用来新建一个用户组。语法格式为:
groupadd [-g -o] gid group
各个选项具体含义如下:
-g:指定新建用户组的GID号,该GID号必须唯一,不能和其它用户组的GID号重复。
-o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
例如:
创建一个linuxgroup的用户组和一个linuxgroup2用户组,GID分别为1020和1030
[root@localhost ~]# groupadd -g 1020 linuxgroup
[root@localhost ~]# groupadd -g 1030 linuxgroup2
[root@localhost ~]# more /etc/group|grep linuxgroup
linuxgroup:x:1020:
[root@localhost ~]# more /etc/group|grep linuxgroup2
linuxgroup2:x:1030:
2.newgrp命令
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限,newgrp主要用于在多个用户组之间进行切换,语法格式为:
newgrp <用户组>
例子:下面通过实例讲述newgrp的用法:
首先建立了3个用户组group1、group2和group3.
[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd group2
[root@localhost ~]# groupadd group3
下面创建了一个用户user1,同时指定user1的主用户组为group1,附加用户组为group2和group3
[root@localhost ~]# useradd -g group1 -G group2,group3 user1
[root@localhost ~]# more /etc/group|grep user1
group2:x:501:user1
group3:x:502:user1
下面是对用户user1设置密码
[root@localhost ~]# passwd user1
Changing password for user user1.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
下面是切换到user1用户下,通过newgrp切换用户组进行的一系列操作,从中可以看出newgrp的作用。
[root@localhost ~]# su - user1
[user1@localhost ~]$ whoami
user1
[user1@localhost ~]$ mkdir user1_doc
[user1@localhost ~]$ newgrp group2
[user1@localhost ~]$ mkdir user2_doc
[user1@localhost ~]$ newgrp group3
[user1@localhost ~]$ mkdir user3_doc
[user1@localhost ~]$ ll
total 12
drwxr-xr-x 2 user1 group1 4096 Oct 24 01:18 user1_doc
drwxr-xr-x 2 user1 group2 4096 Oct 24 01:18 user2_doc
drwxr-xr-x 2 user1 group3 4096 Oct 24 01:19 user3_doc
[user1@localhost ~]$
3.groupdel命令
表示删除用户组,语法格式为:
groupdel [群组名称]
当需要从系统上删除用户组时,可用groupdel指令来完成这项工作。如果该用户组中仍包括某些用户,则必须先删除这些用户后,然后才能删除用户组。
例如:删除linuxgroup这个用户组
[root@localhost ~]# groupdel linuxgroup
附:用户和组其他相关命令
设置/更改用户口令:
格式:passwd 用户名
id命令
用途:查询用户身份标识
格式:id [用户名]
users、w 、who命令
用途:查询已登录到主机的用户信息
su命令
用途:切换用户身份
格式:su - 用户名
分享到:
相关推荐
java进阶,包含 常用设计模式、线程和并发、spring核心代码、mybatis核心代码、springboot2.0、springcloud 、docker的使用、各类面试题。
DSP C2000程序员高手进阶,对初入门想提高的同学是个不错的东西
介绍 DSP C2000 的开发方法,适合DSP 程序员 高手进阶
DSP_C2000_程序员高手进阶.pdf
java程序员由菜鸟到笨鸟 作者:曹胜欢
《Java 基础入门》课后习题答案 第 第 1 章 Java 开发入门 一、填空题 1、 Java EE、Java SE、Java ME 2、 JRE 3、 javac 4、 bin 5、 path、classpath 二、选择题 1、ABCD 2、C 3、D 4、B 5、B 三、简答题 1、 面向...
1. 本专栏的所有内容都是经过我精打磨的,所以你完全不担学不会的问题 2. 本专栏的所有配套源码已经在 GitHub 上开源(在本仓库的 code 录下,直接导
黑马程序员 linux从入门到精通配套笔记
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案
程序员的英语进阶指南
pdf格式,校招面试必备知识点,也适合出去找工作时,也适合自己测试学习。
Java 程序员眼中的 Linux.zip,《Java 程序员眼中的 Linux》
Java 程序员眼中的 Linux - v1.0.pdf
dsp c2000资料,描述程序编制相关内容。
C语言怎么系统化的高效学习 程序员入门进阶的博客.pdf
JAVA程序员 从笨鸟到菜鸟