linux基础之用户及用户组管理
本节内容
用户管理
1. 为什么需要用户?
1.linux是一个多用户系统
2.权限管理(权限最小化)
2. 用户相关文件
/etc/passwd -->用户基本信息
/etc/shadow -->密码信息
/etc/default/useradd -->保存了useradd的默认配置
/etc/login.defs -->保存了全局信息
/etc/group -->组信息
/etc/gshadow-->组密码
/etc/skel-->用户家目录模板
3. 用户信息
三类用户:
超管root(0)
系统用户(运行服务,通常不许登录系统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 用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:创建用户并指定用户ID为1010
[root@renyz08 ~]# useradd -u 1010 ren2
[root@renyz08 ~]# tail -1 /etc/passwd
ren2:x:1010:1010::/home/ren2:/bin/bash
例子4:创建用户并指定主组ID为0 #指定组的时候组必须存在!
[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:创建用户并指定附加组ID为0 #指定组的时候组必须存在!
[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命令看一下su和su -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令
例子1:切换用户
[root@renyz08 ~]# su - ren
十一、/etc/shadow:用户密码信息、过期时间等
zxhk: $6$dgnPoZ0s$6xNKEWz : 17729 : 0 : 99999 : 7 : : :
第一段:用户名:
第二段:加密后的密码
第三段:上次修改密码举例元年经过的天数1970年1月1日(如果该字段空,意味着该用户密码被禁用)
第四段:密码最短使用时间(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用户的uid为1010
[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)
例子3:ren2用户添加root为附加组
[root@renyz08 ~]# usermod -G root ren2
[root@renyz08 ~]# id ren2
uid=1005(ren2) gid=0(root) 组=0(root) #会替换以前的附加组
例子4:ren2用户增加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. 创建用户java,uid 1000 基本组是gp001 附加组 gp002 gp003
2. 修改用户java,
将名称修改为python,
将uid修改为 2000,
修改主组是cats,
shell类型改为 /sbin/nologin
让该用户在10月1号到期
linux基础之用户及用户组管理的更多相关文章
- Linux基础学习 | 用户及用户组
Linux 用户及用户组 目录 一.用户 添加用户实例 二.用户组 添加用户组实例 三.用户及用户组文件 四.各命令参数对照 一.用户 Linux系统是一个多用户多任务的分时操作系统.任何 ...
- Linux系统的用户和用户组管理
一.用户账户管理 Linux/Unix是一个用户.多任务的操作系统:在讲Linux账号及账户组管理之前,先简单了解一下多用户.多任务操作系统的基本概念. Linux的单用户多任务 在Linux下,当你 ...
- linux基础之用户和组管理及权限
一.用户和组管理 相关配置文件 /etc/passwd: 用户名 : 密码占位符 : UID : GID : COMMENTS : 家目录 :默认shell /etc/group: 组名 : 组密码占 ...
- linux 常用命令-用户、用户组管理
注:本篇只涉及常用命令,全部命令可以通过help帮助查看. (1)type useradd #查看命令属于内部命令还是外部命令,内部命令是嵌在linux的shell中,外部命令存储在路径中 (2) ...
- linux笔记:用户和用户组管理-用户管理命令
useradd(添加用户.在使用useradd添加一个用户后,必须使用passwd给该用户设置密码,该用户才能登陆): passwd(设置或修改用户密码): usermod(修改用户信息): chag ...
- linux笔记:用户和用户组管理-用户配置文件
用户信息文件(/etc/passwd): 影子文件(/etc/shadow) 组信息文件(/etc/group)和组密码文件(/etc/gshadow):
- Linux命令_用户和用户组管理
新增组的命令 groupadd 格式:groupadd [-g GID] groupname 如果不加-g选项,则按照系统默认的gid创建组.跟uid一样,gid也是从1000开始的. 我们也可以如下 ...
- Linux基础学习(7)--用户和用户组管理
第七章——用户和用户组管理 一.用户配置文件 1.用户信息文件/etc/passwd: (1)用户管理简介:所以越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范. ...
- Linux 用户和用户组管理
Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...
随机推荐
- 由奶茶店突发奇想开始了Java设计模式:享元模式
目录 定义 意图 主要解决问题 何时使用 优缺点 结构 奶茶摊位的例子 奶茶店的例子 在什么情况下使用享元模式 定义 享元模式是对象的结构模式,享元模式以共享的方式高效的支持大量的细粒度对象,主要用于 ...
- M1 和 Docker 谈了个恋爱
出于开源项目的需要,我准备把之前在 windows 下运行的开源项目移植到 Mac 上跑得试下,但是 Mac M1 芯片并不能很好地支持 Docker,这不,发现 Docker 也正式支持 Mac 了 ...
- 利用Apache部署静态网站(一)
Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且可通过简单的API扩充, ...
- Dubbo学习笔记(二) Dubbo的基本配置
Check启动检查 根据之前的学习,我们简单理解的Dubbo远程调用的基本流程,服务提供者注册到注册中心,然后服务消费者通过监听注册中心达到远程调用的目的,那么如果注册中心中没有消费者对应的接口会怎么 ...
- new word
strategy: a plan of action or policy designed to achieve a major or overall aim.
- hdu 4891 模拟
题意: 给你一个串,问你有几种意思,有两个规则 (1) { } 答案乘以 ({}之间"|"的个数 + 1) (2) && 答案乘以 (&a ...
- Host头部攻击
在HTTP的请求报文中,我们经常会看到Host字段,如下 GET /test/ HTTP/1.1 Host: www.baidu.com Connection: keep-alive Upgrade- ...
- <input type="file" id="fileID">文本框里的值清空方法
一般情况下,不允许通过脚本来对文件上传框赋值. 下面是一个变通的方法.就是创建一个新的input type="file" 把原来的替换掉. <!DOCTYPE html PU ...
- axios提交表单
后端使用@RequestBody接收jsons数据 因为后端接收json数据,所以前端也要发送json 项目的前端是使用layui的数据表单 案例方法 方法一:JSON字符串 提交的数据格式 {&qu ...
- maven工程添加servlet依赖
实现导入HttpServlet <!-- Servlet依赖--> <dependency> <groupId>javax.servlet</groupId& ...