用户账号管理
账号控制总述
用户账户
作用: 1.可以登陆操作系统 2.不同的用户具备不同的权限
唯一标识:UID(编号从0开始的编号,默认最大60000)
zhangsan(UID 1200)
管理员root的UID:永远为0
系统用户(为程序运行与服务运行提供身份)为1~999
普通用户的UID:默认从1000开始
组账户
作用: 方便管理用户
唯一标识:GID(编号从0开始的编号,默认最大60000)
原则:Linux一个用户必须至少属于一个组
组账户的分类:
基本组:系统创建与用户同名
附加组(从属组):由管理员创建,由管理员进行加入
创建一个用户,默认情况下会创建一个同名的组,称为基本组,一般基本组只有一个成员。比如创建一个tom用户,就会创建一个tom组。
我们手动添加的组是附加组。
基本组我们一般是不用的,更多使用附加组。
一般我们给组设置权限,组里的用户会继承组里的权限。
解析用户账号文件
本地账户的数据文件
– /etc/passwd、/etc/shadow
– /etc/group、/etc/gshadow
/etc/passwd:存放用户基本信息配置文件
[root@localhost ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器
用户创建
命令useradd
– 格式:useradd [选项]... 用户名
• 常用命令选项
– -u:指定 UID 标记号
– -d:指定宿主目录(家目录),缺省为 /home/用户名
– -G:指定所属的附加组
– -s:指定用户的登录解释器
useradd
useradd -u(指定uid)
id
useradd -d(指定家目录)
注意:用户的家目录不能自己创建,否则权限上可能会有问题。
useradd -G(指定附加组)
可以将一个用户加入到多个组:useradd -G adm,root admin
useradd -s (指定用户的登录解释器)
-s:指定用户的登录解释器
shell:壳,解释器
用户---->解释器---->内核---->硬件
/sbin/nologin:禁止用户登录操作系统
用户修改
usermod命令
– 格式:usermod [选项]... 用户名
• 常用命令选项
– -l:更改用户帐号的登录名称
– -u:用户id
– -d:家目录路径(不会自动创建家目录)
– -s:登录解释器
– -G:附加组 //重置附加组
修改用户帐号的登录名称
修改uid和登录解释器
修改家目录
直接用vim修改/etc/passwd
重置用户附加组
原来没有附加组,就会增加附加组;
原来有附加组,就会修改附加组;
设置用户密码
Linux用户没有密码不能登录。
passwd命令
– 格式:passwd [选项]... 用户名
[root@localhost ~]# passwd nsd01 #交互式设置
更改用户 nsd01 的密码 。
新的 密码: #输入新密码
无效的密码: 密码少于 8 个字符
重新输入新的 密码: #重新输入新密码
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# su - nsd01 #临时切换用户身份
[nsd01@localhost ~]$ passwd
更改用户 nsd01 的密码 。
为 nsd01 更改 STRESS 密码。
(当前)UNIX 密码: #输入旧密码
新的 密码: #输入新密码
重新输入新的 密码: #重新输入新密码
passwd:所有的身份验证令牌已经成功更新。
[nsd01@localhost ~]$ exit #退出。回到root用户身份
root修改普通用户密码
注:无需知道旧密码,直接改新密码
su切换用户
普通用户修改密码
普通用户修改密码的时候,必须要符合复杂性要求。
非交互式设置密码
passwd命令,支持非交互式设置密码
– --stdin:从标准输入(比如管道)取密码
[root@localhost ~]# echo 123 | passwd --stdin nsd01
[root@localhost ~]# echo 123456 | passwd --stdin nsd01
[root@localhost ~]# echo redhat | passwd --stdin nsd01
用户密码信息存放文件:/etc/shadow
/etc/shadow,保存密码字串/有效期等信息
– 每个用户记录一行,以:分割为9个字段
[root@localhost ~]# grep nsd01 /etc/shadow
nsd01:$6$NVe937Nd$B0n94XrpQ.LipQHTpYh0iV/M4jCLdccfHxzRLprdxDzwk8WDDh/TzdTfh8lA9y9WKJ.8Ls/l5.w/1W.nV6CFX/:18481:0:99999:7:::
字段1:用户帐号的名称
字段2:加密后的密码字符串
字段3:上次修改密码的时间(自1970-1-1到达上一次修改密码的时间,所经历的天数)
字段4:密码的最短有效天数,默认0(0表示随时都可以修改,1表示至少使用1天才可以修改密码)
字段5:密码的最长有效天数,默认99999
字段6:密码过期前的警告天数,默认7
字段7:密码过期后多少天禁用此用户账号
字段8:帐号失效时间,默认值为空
字段9:保留字段(未使用)
最后几个字段,可以理解为用户永远有效。
两个!!表示用户刚创建,没有设置过密码,只有设置了密码才能登录系统。
用户初始配置
配置文件来源
配置文件来源
新建用户时,新建用户家目录,根据 /etc/skel 模板目录复制
[root@localhost ~]# ls -A /etc/skel/
[root@localhost ~]# touch /etc/skel/haxi.txt
[root@localhost ~]# mkdir /etc/skel/test
[root@localhost ~]# ls -A /etc/skel/
[root@localhost ~]# useradd nsd19
[root@localhost ~]# ls -A /home/nsd19
[root@localhost ~]# useradd nsd20
[root@localhost ~]# ls -A /home/nsd20
主要的初始配置文件
主要的初始配置文件
– ~/.bash_profile:每次登录系统时执行,定义初始变量值
– ~/.bashrc:每次进入新的Bash环境时执行(开启新的终端)
[root@localhost ~]# vim /root/.bashrc #定义永久别名
alias haha='echo haha'
开启新的终端进行测试:
[root@localhost ~]# haha
haha
– /etc/bashrc:全局配置文件,影响全体用户 (开启新的终端)
[root@localhost ~]# vim /etc/bashrc
alias xixi='echo xixi'
[root@localhost ~]# useradd nsd20
[root@localhost ~]# su - nsd20 #相当于开启新的终端
[nsd20@localhost ~]$ xixi
xixi
[nsd20@localhost ~]$ exit
登出
[root@localhost ~]#
root:/root/.bashrc
普通用户:/home/用户名/.bashrc
全体:/etc/bashrc
删除用户
userdel命令
格式:userdel [-r] 用户名
添加 -r 选项,宿主目录/用户邮件也一并删除
[root@localhost ~]# userdel -r nsd01 #连同家目录一并删除
[root@localhost ~]# userdel nsd02 #不删除家目录,只删除用户信息
组账号管理
/etc/group,保存组帐号的基本信息
/etc/group,保存组帐号的基本信息
每个组记录一行,以:分割为4个字段
[root@localhost ~]# grep stugrp /etc/group
stugrp:x:1504:nsd06
组名:组密码占位符:组的GID:组成员列表
[root@localhost ~]# groupadd tarena #新建一个组
[root@localhost ~]# grep tarena /etc/group #查看组信息
tarena:x:1607:
[root@localhost ~]# useradd kaka
[root@localhost ~]# useradd nb
[root@localhost ~]# useradd jack
[root@localhost ~]# useradd kenji
组成员管理
gpasswd命令
– 格式:gpasswd [选项]... 组名
• 常用命令选项
– -a:添加组成员,每次只能加一个
– -d: 删除组成员,每次只能删一个
– -M:定义组成员用户列表,可设置多个
– -A:定义组管理员列表
]# gpasswd -a kaka tarena #添加用户kaka到tarena组
]# grep tarena /etc/group #查看组信息
]# id kaka
]# gpasswd -a nb tarena #添加用户nb到tarena组
]# grep tarena /etc/group
]# gpasswd -M 'jack,kenji' tarena #定义组成员列表
]# grep tarena /etc/group
]# gpasswd -a nb tarena
]# grep tarena /etc/group
]# gpasswd -d nb tarena #将nb用户从tarena组中删除
]# grep tarena /etc/group
]# gpasswd -M ‘’ tarena #删除组中所有成员
]# grep tarena /etc/group
组管理员
-A:定义组管理员列表
[root@localhost ~]# su - nb
[nb@localhost ~]$ gpasswd -a kaka tarena
gpasswd:没有权限。
[nb@localhost ~]$ exit
[root@localhost ~]# gpasswd -A nb tarena #设置组管理员
[root@localhost ~]# su - nb
[nb@localhost ~]$ gpasswd -a kaka tarena
正在将用户“kaka”加入到“tarena”组中
[nb@localhost ~]$ exit
[root@localhost ~]#
/etc/gshadow:组的管理信息配置文件
/etc/gshadow:组的管理信息配置文件
[root@localhost ~]# grep tarena /etc/gshadow
tarena:!:nb:
组名:密码加密字符串:组的管理员列表:组成员列表
删除组账号
删除组账号:删除组的时候,不可以删除基本组
[root@localhost ~]# groupdel tarena
[root@localhost ~]# groupdel tmooc
[root@localhost ~]# grep tmooc /etc/group
[root@localhost ~]# grep tarena /etc/group
小结
/etc/passwd:存放用户基本信息
/etc/shadow:存放用户密码信息
/etc/group:存放组基本信息
/etc/gshadow:存放组的管理信息