用户和组的管理
前言
本篇文章主要讲Linux系统下用户和组的概念,还有添加用户和组,修改用户和组的基本操作,会涉及不少与之相关的配置文件与命令的介绍,几乎所有
正文
首先,简单提下概念,用户是操作系统的使用者,也是系统进程的所有者,也就是说其实操作系统是给一堆人使用的,就拿大家都熟悉的Windows操作系统来说,我们一般只看得见自己一个用户,或是后来又创建的来宾用户,其实还有许多不需要登陆的系统用户,如下图
他们的作用很明显,运行不同的进程,来提供相应的服务,支持程序的运行。
然后用户组的话,就是一堆用户的集合。是为了方便管理某一堆用户的权限。举个例子来理解吧,假设我在跟一个团队工作。我写了段代码,别人也写了段代码,那现在要一起调试了,结果我的代码文件创建者是我,其他人没权限运行,另一段代码文件创建者是另一个人,也没给其他人权限,那还要一个个文件改权限么,所以一个组就能避免这个问题。
一个用户可以属于多个组,然后就有主组与附加组之分,这个简单了解下就行,用户和组的概念就这些,下面讲对他们的操作
用户的操作
相关配置文件有/etc/passwd、/etc/shadow、/etc/default/useradd、/etc/login.defs ,下面结合具体命令一块讲下
1. useradd、usermod和userdel命令,他们分别用来添加、修改、删除用户,首先看下添加用户的例子
useradd 用户名 -m -p 密码 -s SHELL类型 -u UID号 -g GID号或组名
简单说下:-m是创建家目录,-p后面跟密码,创建用户的时候就设好了密码,-s选择用户使用的SHELL类型,-u设置用户ID号,-g设置主组的ID,-G后面跟要加的附加组名或组ID
- UID的话可以用id命令后面跟用户名查看,简单方便可以先掌握了,如下所示,是查看root的id
id root
2. 然后可以用下面的命令查看用户是否创建成功
cat /etc/passwd
它会输出passwd文件内容,创建成功的话,输出的最后一行有你刚创的用户名,如下图是我刚创建的用户test4
所以 /etc/passwd 文件也知道了,他是存放用户信息的,它的格式如下
用户名:密码:用户id:主组id:用户详细信息:家目录:shell类型
3. 根据上面文件格式,可以发现用户信息那栏我们还不知道怎么改,最直接的可以在passwd文件里改,格式如下
全名,工作地址,移动电话,家庭电话
这是一种方法,当然也可以用chfn命令解决,如下所示
再介绍一个命令吧,除了直接用cat /etc/paswd查看用户信息,其实还可以用finger命令,如下图所示
是不是更直观,当然还有getent passwd等价于cat /etc/passwd,vipw等价于vi /etc/passwd,这两个也可以了解下
4. 好的,创建用户完了,但之前设的密码太简单了现在要修改了怎么办,可以用usermod解决大部分问题,如下所示
usermod 用户名 -p 新密码
用法跟useradd相似,可选项也都差不多,所以不多提了,介绍另一个可以改用户密码的命令passwd,用法如下
passwd 用户名
- 他有比较常用的几个选项我说下:-l 锁定用户密码,-u 解锁用户密码,-f 迫使用户下次登陆时改密(对新建用户听常用),-d 去掉用户的密码。锁定的话就是密码不起作用了,也就是用户登陆不了了。同样 -d 去掉了密码也登陆不了了。这些效果可以自行尝试。
那怎么看密码是不是改了呢,用下面的命令可以查看
cat /etc/shadow
下图是结果,不过看到的是经过SHA512算法加密后的密码,但确实是改了。
如果锁定的话密码会是两个!!
所以 /etc/shadow 目录就是存放用户密码相关信息的地方,当然改这个文件也能得到改密码的目的,用vim编辑文件内容即可,当然涉及密码只有root用户才有查看修改这个文件的权限,他的文件格式如下:
用户名:密码:最后一次更新密码的时间:最短可以隔几天改一次密码(改密码间隔时间):隔多少天必须改密码(密码过期):提前多少天提醒密码过期:过渡期(密码过期后还能撑几天):账户过期时间(不同于密码过期,账号过期就没有这个帐号了,更别说密码了):这里是预留给以后用的,现在没什么用
这个文件会比之前的passwd更重要也更有用,大家多留意下
5. 既然对密码有这么多的配置,那么就有专门的命令可以设置,chage命令,专门负责密码期限的相关设置,用法如下
- -d 设置最后更新密码的时间,-E 设置账号过期时间,-I 设置过渡期,-l 显示期限信息,-m 改密最短间隔,-M 密码过期时间,-W 提前多少天警告
- 这里注意一点,时间都是相对于1970.1.1的时间(也就是跟1970.1.1相距多少天了)
6. 最后就是删除用户的操作了,同样在passwd文件里可以改,把他那栏信息都删了就行,但是同时得在shadow文件里也把他删了,这种方法有弊端,你可以进到/home目录下可以发现用户的家目录还在,所以还得删除用户的家目录下。当然可以用userdel命令删除用户就比较方便,如下所示
userdel -rf 用户名
- 加个 -r 选项就可以删除家目录,-f 是强制执行,就有可能删除他的时候他的程序正在运行,那么删除程序文件就会报错。这个Windows经常能遇到吧,现在Linux可以强行解决这类问题,很暴力拦都拦不住。
7. 下面讲下还没提过的 /etc/login.defs文件吧,它是控制新建默认用户的配置文件。默认用户的话,useradd 后面跟用户名加 -D 选项就能创建,那它又是怎么配置默认用户的呢,那就直接看下它的内容
这就是它的文件内容,虽然每个变量设置前都有说明,不过我还是简单讲下吧,没理解再看文件里的说明吧
- MAIL_DIR:用户邮件地址,所以之前改文件删用户的时候还得看下用户邮件存放目录。好了我刚看了下确实没删掉,所以改文件来修改用户可以,删用户就不推荐使用了
- PASS_MAX_DAYS、PASS_MIN_DAYS、PASS_MIN_LEN、PASS_WARN_AGE:密码过期时间、改密最短间隔时间、密码最短长度、密码过期提前几天警告
- UID_MIN、UID_MAX:用户默认创建id的最小值和最大值,GID_MIN和GID_MAX同理
- CREAT_HOME:yes说明默认创建用户后会同时创建它的家目录
- UMASK:用户创建文件、目录的默认权限的掩码,这个属于权限问题后面再讲
- USERGROUPS_ENAB:yes也就是删除用户的时候把仅有他的组也删了(主组),先不用了解
- ENCRYPT_METHOD:密码加密方式,是SHA512加密方式
8. 现在就只有 /etc/default/useradd 文件了,它的作用跟上面login.defs文件差不多,不过两者既有联系也有区别(等下会结合起来细讲),login.defs 文件针对的是用户,而现在讲的这个文件针对的是 useradd 命令,看它的路径就明白,是useradd的默认配置,看下他的文件内容
好像看不出太多,那就用之前学过的whatis配合man命令查看他的帮助吧,来看下结果,我直接把相关部分截出来了
现在这个文件的内容可以理解了,顺便可以看下他跟login.defs文件的关系了:
- GROUP:用户默认组,对应第二幅图 useradd 的 -g 选项来看,说的是如果login.defs文件里的USERGROUPS_ENAB变量是no的话那么这个文件里的GROUP就生效了
- HOME:用户默认家目录,对应上图 -b 选项来看,是不是
- INACTIVE:-1,就是不启用密码的过渡期
- EXPIRE:账号过期时间,没填就不会过期
- SHELL:默认用户使用的shell类型
- SKEL:这是默认用户目录里的内容,下面会简单讲下他
- CREAT_MAIL_SPOOL:yes就是默认创建邮件目录,所以不需要创建邮件目录的话可以在这里填no哎呀,又得填个坑了,/etc/skel目录,直接看下它里面有哪些文件吧,再看下你的家目录你就明白一切了,相当于在创建家目录时会复制skel的内容,所以用处还挺大的,说实话。
用户组的操作
组的话,也有添加,修改和删除等操作,对应groupadd、groupmod、groupdel三个命令,相关配置文件有这些/etc/group、/etc/gshadow,下面来看下
1. groupadd命令,创建一个新的组,用法如下
groupadd 组名 -g GID组号 -p 密码
- -g 选项用来指定组号,-p 选项用来设组的密码,一般 -g 选项会比较常用,而 -p了解以下即可
2. 好了创建完一个组有怎么查看呢,在 /etc/group 这文件里,它里面有组的信息,同样除了cat能查看,getent group也能实现查看,后面getent我就不多提了,只是多个方法,没必要掌握。结果如下图所示
testgrp就是我新建的组,至于这个文件的内容还是挺简单的,格式如下:
组名:密码(显示为x,安全起见):组号GID:组里面的用户
3. 好了组建完了,现在要怎么修改组呢,有多多个命令可以改,不过各有千秋。
- 首先groupmod命令,他能修改组的外在,但改不了它的内在——组成员。它的用法如下
groupmod 组名 -n 新组名 -g 新ID -p 新密码
- 其次是gpasswd命令,它就可以修改组成员,去掉组的密码,不过改组名id就做不到了,它的用法如下
gpasswd -a 用户名 组名
-r 选项可以去掉组的密码,这个就了解这两个些即可,具体可以查帮助前篇笔记讲过
- 最后就是groupmems命令,他是管理组内用户的首选命令,可以查看修改组成员,用法如下
groupmems -a 用户 -g 组
删除用户的话用 groupmems -d 用户 -g 组 可实现,groupmems -l -g 组 可以查看该组的成员。这个命令掌握这三个用法差不多了
4. 最后又是怎么删除的问题了,groupdel命令,用法如下
groupdel 组名
5. 就还剩 /etc/gshadow 这个文件没讲,这个文件存放的是安全组信息,所谓安全就是只有root用户能看,看下他的文件格式吧
组名:密码:管理员:组员
6. 最后了解一下吧,就是加密算法函数crypt(),密码就是靠这个函数加密的,用下面这个命令可以查看帮助
man 3 crypt
这是我截取的重要部分,下面id号对应一类加密算法,这样密码是哪种加密算法加密的就不用看login.defs文件了,看shadow的时候密码开头$1就是MD5算法,ok,这个理解就行,其他就先不讲了
总结
用户和组的信息文件:/etc/passwd /etc/shadow /etc/group /etc/gshadow 相关的默认配置文件:/etc/login.defs /etc/skel /etc/default/useradd
用户:useradd usermod userdel passwd chage chfn 组:groupadd groupmod groupdel groupmems gpasswd 查看:getent vipw vigr pwck grpck finger id
pwck和grpck,分别是检查passwd文件和group文件格式的,可以自行体验
- 我之所以会把这些文件格式讲得那么清楚是它在批量操作的时候特别有用,如下面这个例子
newusers f1
newusers命令批量创建用户使用的,f1就是我按passwd文件格式输入的要创建的用户的信息,如下图所示
可以看下passwd文件,没问题。再看下登陆界面,能登陆么,密码x输入没问题,好了这就是批量操作
对用户和组的管理介绍到此为止,希望对读者有帮助