用户与组管理
如何成为Linux用户?
在Linux系统中,要想从系统中获取资源、对系统进行管理和控制,就需要向系统申请一个账号,从而实现特定用途,当申请到账号后,要对它设置口令,这样用户账号就申请成功了,然后可以登陆系统,当用户登陆系统时,需要通过系统的认证,认证成功后才给予授权,在用户的使用过程中还会对用户进行审计。
为什么要设置用户组?
是为了方便对不同类用户进行分组统一管理,例如:把一个公司的员工按职能的不同划分为不同的部门从而实现不同部门进行不同的管理方式是一个道理。
Linux中的用户类别:
管理员用户 root UID :0 又称为超级用户,拥有至高无上的权利,可以对Linux系统进行任何操作,甚至可以删除系统。
普通用户:系统用户 UID : 1-499(Centos6版本中),1-999(Centos7版本中)系统用户是维护特定的一些服务运行,对守 护进程获取资源进行权限分配的账号
登陆用户 UID :500-60000 (Centos6版本中),1000-60000(Centos7版本中)登陆用户就是可以登陆到系统 中,完成一些权限内的操作,从而获取所须资源的用户。
Linux是如何认识用户名的呢?
其实系统是通过UID来标识一个用户的,当你输入用户名登陆时,其中进行了名称转换,把用户名转换为了Linux能够识别的UID号,名称转换信息保存在/etc/passwd文件中
UID:UID是每个用户身份标识,就像人的身份证一样
Linux中的组类别:
按用户类型分:
管理员组:root GID :0
普通用户组:系统用户组 GID : 1-499(Centos6版本中),1-999(Centos7版本中)
登陆用户组 GID :500-60000 (Centos6版本中),1000-60000(Centos7版本中)
按所属的主从关系来分:
基本组
附加组
按私有公有分:
私有组:组名同用户名,并且只包含一个用户
公共组:组内包含了多个用户
GID :每个组的身份标识
同样,GID也是Linux认识这个组的标识,通过/etc/group文件中保存的信息进行组名与UID的解析
与用户相关的文件:
/etc/passwd文件:保存着用户账号的信息
解释文件内容:
第一列:登陆的用户名
第二列:密码占位符
第三列:UID
第四列:GID(所在组的)
第五列:注释描述信息
第六列:用户家目录
第七列:用户默认使用的shell
[root@myhost ~]# getent passwd zhangsan
zhangsan:x:501:501::/home/zhangsan:/bin/bash
/etc/shadow:保存用户的密码信息
解释文件内容:
第一列:登陆的用户名
第二列:用户的密码(一般用sha512加密)
第三列:从1970年1月1日起到密码最近一次被修改的时间
第四列:密码的最小有效时间
第五列:密码的最大有效时间(99999表示永不过期)
第六列:密码过期前几天提醒
第七列:密码的非活动期限
第八列:从1970年1月1日起,多少天后账号失效
[root@myhost ~]# getent shadow zhangsan
zhangsan:$6$y5uABHzk$5RFHTYLHA4cL.WfSW2Gd4tjOoefwJ4DNrvLzE8.shDViZqBe/JcZbLoN672LqEnl48F484pxg/AWFPZhwWM.Y/:17018:0:30:7:5:17383:
与组相关的文件:
/etc/group文件:保存组的信息
解释文件内容:
第一列:组名称
第二列:组密码占位符
第三列:组的ID
第四列:以当前组为附加组的用户列表
[root@myhost ~]# getent group mage
mage:x:504:lisi,wangwu,zhangsan
/etc/gshadow文件:保存组的密码信息
解释文件内容:
第一列:组名称
第二列:组密码
第三列:组管理员列表(组管理员可以更改组密码和族成员)
第四列:以当前组为附加组的用户名列表(分隔符为逗号)
[root@myhost ~]# getent gshadow mage
mage:$6$5Blhu/UHz8UNGvz$9qj158ot4uvGDngNKUrzFyKB246zqSIK7Eo0JhKaUp1SubjI0of1NfGsRUVySB8xuG32hxwtayvlGG.pKWu1w1:lisi:lisi,wangwu,zhangsan
用户管理命令:
useradd命令: 创建用户
格式: useradd 选项 用户名
常用选项:
-u:指定UID
-o:配合-u选项,不检查UID的唯一性
-c:"描述信息"
-d:指定家目录,指定的家目录可以不存在,但上层目录必须存在
-g:指定基本组或基本组GID
-G:指定附加组或GID
-M:不创建家目录
-r:创建系统用户
-s:指定登陆的shell
-D:查看useradd默认配置文件,可与其他选项陪和,对默认配置进行更改
-N:不创建私用组主组,使用users组做主组
示例:
创建一个hehe用户,UID为3000 家目录为/testdir/hehe 附加组为root组 填写描述信息为 ni hao
usermod命令:修改用户的属性信息
用法格式: usermod 选项 用户名
选项:
-u:修改UID
-c:修改"描述信息"
-d:修改家目录
-g:修改基本组
-G:修改附加组,原来的附加组会被覆盖
-a:与-G一同使用,用于为用户追加新的附加组
-m:只能与-d选项一同使用,用于将原来的目录移动为新的家目录
-s:修改登陆的shell
-l:修改登录名
-e:设置用户账号的失效时间,XXXX-XX-XX
-L:锁定用户账号密码,禁止登陆(在密码字符前加!)
-U:解锁用户密码
示例:修改hehe用户的UID为5000 再把hehe用户添加附加组bin 设置用户账号在2016年10月1日失效
[root@localhost ~]# usermod -u 5000 -aG bin -e 2016-10-01 hehe
[root@localhost ~]# tail -1 /etc/passwd
hehe:x:5000:3000:nihao:/testdir/hehe:/bin/bash
[root@localhost ~]# groups hehe
hehe : hehe root bin
[root@localhost ~]# tail -1 /etc/shadow
hehe:!!:17017:0:99999:7::17075:
passwd命令:用于设置用户密码,锁定和解锁用户密码
格式:passwd 用户名
选项:
-d:清除用户密码,使之可无密码登录
-l:锁定用户密码
-u:解锁用户密码
-S:查看用户密码锁定情况
-i:非活动期限
--stdin :从标准输入接收用户密码(在脚本的时候用的比较多)
[root@localhost ~]# passwd hehe
Changing password for user hehe.
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd -l hehe
Locking password for user hehe.
passwd: Success
[root@localhost ~]# passwd -S hehe
hehe LK 2016-08-04 0 99999 7 -1 (Password locked.)
[root@localhost ~]# passwd -u hehe
Unlocking password for user hehe.
passwd: Success
[root@localhost ~]# passwd -S hehe
hehe PS 2016-08-04 0 99999 7 -1 (Password set, SHA512 crypt.
userdel 命令:删除用户
格式: userdel [选项] 用户名
选项: -r:删除用户同时删除家目录
[root@localhost ~]# tail -2 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
hehe:x:5000:3000:nihao:/testdir/hehe:/bin/bash
[root@localhost ~]# userdel -r hehe
[root@localhost ~]# tail -2 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
组管理命令:
groupadd命令:添加新组
格式:groupadd [选项] 组名
选项:
-g:指定GID,默认是上一个组的GID+1
-r:创建系统用户
示例:创建一个组,组名为zhang GID为5000;
[root@myhost ~]# groupadd -g 5000 zhang
[root@myhost ~]# tail -1 /etc/group
zhang:x:5000:
groupmod命令:修改组信息
格式: groupmod [选项] 组名
选项:
-g:修改组的GID
-n:修改组名
示例:把zhang组的GID改为3000,组名改为lisi
[root@myhost ~]# groupmod -g 3000 -n lisi zhang
[root@myhost ~]# tail -1 /etc/group
lisi:x:3000:
groupdel命令:删除组
格式: groupdel 组名
gpasswd命令:向组中添加、删除用户,给组设置密码
格式1:gpasswd [选项] 用户名 组名 \\添加、删除组成员
选项:
-a:向组中添加用户
-d:把组中的用户移除出去
-M:刷新组列表(意思是可同是添加多个用户,但原来组里的用户将被移除)
示例:
[root@myhost ~]# useradd zhangsan
[root@myhost ~]# useradd lisi
[root@myhost ~]# useradd wangwu
[root@myhost ~]# groupadd mage
[root@myhost ~]# gpasswd -a lisi mage
Adding user lisi to group mage
[root@myhost ~]# groupmems -l -g mage
lisi
[root@myhost ~]# gpasswd -M zhangsan,wangwu mage
[root@myhost ~]# groupmems -l -g mage
zhangsan wangwu
[root@myhost ~]# gpasswd -d zhangsan mage
Removing user zhangsan from group mage
[root@myhost ~]# groupmems -l -g mage
wangwu
格式2:gpasswd 组名 //给组添加密码
给组添加密码的作用是,防止其他人切换到此组。
其他一些常用命令:
chage命令:修改用户密码
格式:chage [选项] 用户名
选项:
-d:修改用户最近一次修改密码的时间
修改为0的时候提醒用户下次登陆修改密码
-E:设置账号的有效期
-w:修改密码过期警告时间
-m:修改密码最小的有效期
-M:设置密码的最大有效期
-I:修改用户的非活动期限
示例:把zhangsan用户的账号有效期设置为1年,修改最大密码期限为1个月,修改其飞活动期限为5天
[root@myhost ~]# passwd zhangsan
Changing password for user zhangsan.
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@myhost ~]# chage -E 2017-08-05 -M 30 -I 5 zhangsan
[root@myhost ~]# tail -3 /etc/shadow
zhangsan:$6$y5uABHzk$5RFHTYLHA4cL.WfSW2Gd4tjOoefwJ4DNrvLzE8.shDViZqBe/JcZbLoN672LqEnl48F484pxg/AWFPZhwWM.Y/:17018:0:30:7:5:17383:
lisi:!!:17018:0:99999:7:::
wangwu:!!:17018:0:99999:7:::
groupmems命令:查看哪些用户的附加组为此组
groupmems [选项] [选项] 组名
选项:
-g:指定组
-l:查看组成员
-d:删除指定的组成员
-p:清空组成员
-a:添加组成员
示例:
[root@myhost ~]# gpasswd -M zhangsan,lisi,wangwu mage
[root@myhost ~]# groupmems -l -g mage
zhangsan lisi wangwu
[root@myhost ~]# groupmems -d zhangsan -g mage
[root@myhost ~]# groupmems -l -g mage
lisi wangwu
[root@myhost ~]# groupmems -a zhangsan -g mage
[root@myhost ~]# groupmems -l -g mage
lisi wangwu zhangsan
id命令:显示用户的真实有效的ID
格式: id [选项] 用户名
选项:
-u:仅显示有效的UID
-g:仅显示用户的基本组GID
-G:显示用户的所用组GID
-n:显示名称而非ID
示例:
[root@myhost ~]# id wangwu
uid=503(wangwu) gid=503(wangwu) groups=503(wangwu),504(mage)
[root@myhost ~]# id -u wangwu
503
[root@myhost ~]# id -g wangwu
503
[root@myhost ~]# id -G wangwu
503 504
[root@myhost ~]# id -ng wangwu
wangwu
[root@myhost ~]# id -nG wangwu
wangwu mage
su命令:切换用户
格式1: su - 用户名
登陆式切换,会通过读取目标用户的配置文件俺来重新初始化(用户环境也变化)
格式2: su 用户名
非登录式切换,不会读取目标用户的配置文件进行初始化 (用户环境不变)
-c “命令”:su结合-c命令后面加上要执行的命令,可以实现不切换用户的身份即可运行此处制定的命令
格式:su - 用户 -c "命令"
注意:管理员可无密码切换至其他任何用户
chfn命令:给用户添加描述信息
chsh -s /bin/bash 用户名: 给指定用户更改shell环境
getent 文件名 用户名:查看指定用户的指定文件的信息
newgrp命令:临时全换到组(需要组密码)
格式:newgrp 组名 用户名
authconfig --passalgo=sha256 --update // 更改密码的加密算法
newusers命令:批量添加用户
格式:newusers 用户名列表文件
chpasswd命令:批量添加密码
格式:cat 密码文件 | chpasswd
注意:批量添加用户以后默认家目录里没有任何文件,需要从/etc/skel/中复制过去
默认不创建mail文件,给添加额用户发送一个邮件就自动创建了mail文件。
快捷命令:
vipw = vi /etc/passwd
vigr = vi /etc/group
pwck:检查修改的passwd 文件
grpk:检查修改了得group文件