本文介绍Linux的用户管理

用户管理

Linux 是一个可以实现多用户登陆的操作系统,不同用户可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。

但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于用户管理和权限机制,不同用户不可以轻易地查看、修改彼此的文件。

与windows相比LINUX中的用户和账号的作用是一样的。

都是基于用户对访问的资源做控制,只不过在表示的细节上有差异。

用户帐号

类型 说明
超级用户 root账户拥有整个系统至高无上的权利
本地用户 由管理员创建,权限受到一定的限制,在自己的宿主目录是完整的权限
系统用户 一般是不会登录系统的,用于维持某个服务程序正常运行
伪用户 linux中任何一个命令的操作都必须有一个用户的身份
伪用户一般和系统或者程序服务相关
bin、daemon、shutdown 、halt等
linux默认都有这些伪用户
伪用户通常不需要或无法登陆系统,可以没有宿主目录
源码安装nginx,运行nginx web服务器默认使用nobody用户

用户分类

根据帐号的位置:可分为本地帐号、远程(域)帐号

根据帐号的功能:

类型 UID
超级用户(root) 0
普通用户 1-999为系统用户
1000+为本地用户
RHEL中本地用户UID从500开始

UID即每个用户的身份标示,类似于每个人的身份证号码

用户组分类

根据帐号的位置:可分为本地用户组、远程(域)用户组

根据帐号的功能:

类型 GID
超级用户组(root) 0
普通用户组 1-999为系统用户组
1000+为本地用户组

配置文件

关于用户和组的相关配置文件存放在以下目录中:

类型 账户信息 密码信息
用户 /etc/passwd /etc/shadow
/etc/group /etc/gshadow

用户账户信息文件说明

用户的账户信息保存在/etc/passwd文件中

这个文件以如下格式保存了每系统帐户的所有信息:

root:x:0:0:root:/root:/bin/bash

用户名:密码占位符:UID:GID:用户描述:宿主目录:登录的shell

用户密码信息文件说明

用户的密码信息保存在/etc/shadow文件中

这个文件以如下格式保存了系统帐户的密码信息:

root:$1$LTbeEPHI$AuZ6b2iHVNdekNHu2WvSP/::0:99999:7:::

用户名:加密后的密码:最近更改密码的日期:密码不能修改的天数:密码过期时间:密码需要更改期限到来的前7天发出警告:密码过期了几天后还能修改密码:帐号过期时间:保留

用户组信息文件说明

用户组信息保存在/etc/shadow文件中

这个文件以如下格式保存了系统用户组的所有信息:

root:x:0:tangbb

组名:组密码占位符:GID:组成员列表

用户组密码信息文件说明

用户组密码信息保存在/etc/gshadow文件中

这个文件以如下格式保存了系统用户组的密码信息:

root:x:0:

组名:组密码:组管理者列表:组用户列表

/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。

比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码。

解决模板文件被删之后用户名显示不正常的问题

当添加新的用户帐户时,默认会执行下列操作:

它的主目录就会被创建(一般是"/home/用户名",除非你特别设置)

一些隐藏文件 如.bash_logout, .bash_profile 以及 .bashrc 会被复制到用户的主目录

会创建一个和用户名同样的组(除非你给新创建的用户指定了组)

  • 删除用户的规则文件
[root@VM_200_13_centos ~]# useradd test
[root@VM_200_13_centos ~]# echo 123456 | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.
[root@VM_200_13_centos ~]# ls -a /home/test
. .. .bash_logout .bash_profile .bashrc
[root@VM_200_13_centos ~]# rm -rf /home/test/.bash*
[root@VM_200_13_centos ~]# su - test
Password:
bash-4.2$ su - test

从上面最后一行看出用户名显示为bash-4.2

  • 恢复用户的规则文件
bash-4.2$ su - test
Password:
Last login: Sun Aug 14 01:38:21 CST 2016 on pts/0
-bash-4.2$ su
Password:
[root@VM_200_13_centos test]# cp /etc/skel/.bash* /home/test/
[root@VM_200_13_centos test]# chown test:test /home/test/.bash*
[root@VM_200_13_centos test]# su - test
Last login: Sun Aug 14 01:40:15 CST 2016 on pts/0
[test@VM_200_13_centos ~]$

从上面最后一行看出用户名已经正常显示

用户操作

介绍用户的添加删除等操作

添加用户

命令:useradd

作用:添加用户

语法:useradd [选项] 用户名

选项 说明
-u 创建用户时指定UID
-d 创建用户时指定宿主目录
不使用该选项时会默认会以用户名在/home目录下创建宿主目录
-g 创建用户时指定起始组(起始组只能有一个)
-G 创建用户时指定附加组(可以有多个附加组)
-s 创建用户时指定登录的shell
-M 创建用户时不创建宿主目录

创建用户tangpeng

[root@VM_200_13_centos ~]# ls /home
[root@VM_200_13_centos ~]# useradd tangpeng
[root@VM_200_13_centos ~]# ls /home
tangpeng

指定UID创建用户tangdd

[root@VM_200_13_centos ~]# useradd -u 9527 tangdd
[root@VM_200_13_centos ~]# ls /home
tangdd tangpeng

创建用户tangjj指定宿主目录为/home/zhazha

[root@VM_200_13_centos ~]# useradd tangjj -d /home/zhazha
[root@VM_200_13_centos ~]# ls /home
tangdd tangpeng zhazha

创建用户tangmm指定起始组为tangdd

[root@VM_200_13_centos ~]# useradd -g tangdd tangmm
[root@VM_200_13_centos ~]# id tangmm
uid=9529(tangmm) gid=9528(tangdd) groups=9528(tangdd)

创建用户指定附加组为root

[root@VM_200_13_centos ~]# id tangbb
uid=9530(tangbb) gid=9530(tangbb) groups=9530(tangbb),0(root)

指定用户登录的shell且不创建宿主目录

[root@VM_200_13_centos ~]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@VM_200_13_centos ~]# useradd -M -s /usr/sbin/nologin nginx
[root@VM_200_13_centos ~]# ls /home
tangbb tangdd tangmm tangpeng zhazha

删除用户

命令:userdel

作用:删除用户

语法:userdel [选项] 用户名

选项 说明
-f 强制删除用户即便是登录中的用户
-r 删除宿主目录和邮件
-Z 删除和这个用户关联的SELinux用户

删除用户tangpeng同时删除宿主目录和邮件

[root@VM_200_13_centos ~]# userdel -r tangpeng
[root@VM_200_13_centos ~]# ls /home
tangbb tangdd tangmm zhazha

修改用户

命令:usermod

作用:修改用户

语法:usermod [选项] 用户名

参数 说明
-u 修改用户UID
-d 修改用户宿主目录
-g 修改用户起始组
-G 修改用户附加组
-s 修改用登录的shell

切换用户

命令:su

作用:切换用户

语法:su [选项] [-] 用户名

说明:加上-会在切换用户时把环境变量一起进行切换

[root@VM_200_13_centos ~]# su - tangdd

查看用户

命令:id

作用:打印指定用户的用户和用户组信息

语法:id [选项] 用户

选项 说明
-Z 只打印当前用户的安全上下文(只在开启SELinux的内核系统中有效)
-g 只打印有效用户组
-G 打印所有用户组
-n 忽略(兼容其他版本)
-u 只打印有效的UID

命令:w

作用:显示登录到系统的用户

语法:w [选项]

选项 说明
-h 不显示有信息
-u 忽略当前进程用户名
-s 以短格式输出
-f 显示远程主机名字段
-o 使用旧样式数据
-i 使用ip来替代主机名

命令:who

作用:显示当前登录的用户信息

语法:who [选项]... [FILE|ARG1 ARG2]

说明:如果没有指定文件则使用 /var/run/utmp、/var/log/wtmp作为记录文件;ARG1 ARG2可以为am i或者mom likes等同于who -m

选项 说明
-a 输出所有信息,等同于 who -b -d -l -p -r -t -T -u
-b 上次系统启动时间
-d 输出撕掉的进程
-H 打印行标题栏
-l 打印登录系统的用户进程
-q 统计登录的所有用户数量
-r 输出当前运行级别
-s 只打印用户名,终端类型时间
-t 打印上一次系统时间修改
-u 列出登录恩典用户

命令:finger

作用:显示系统用户信息

语法:finger [选项] [用户] [用户@主机]

选项 说明
-s 显示用户的注册名、实际用户名、终端名称、写状态、停滞时间、登录时间等信息
-l 显示用户的注册名、实际用户名、宿主目录、登录shell、登录日志、邮件、计划
-p 除了不显示.plan文件和.project文件以外,与-l选项相同

用户组操作

介绍用户组的添加删除等操作

添加用户组

命令:groupadd

作用:添加用户组

语法:groupadd [选项] 组名

选项 说明
-f 如果用户组已经存在则不创建,并取消-g指定的GID
-g 指定GID
-p 指定组密码
-r 为该组创建系统帐号
-o 允许使用不唯一的GID创建用户组
-K 覆写/etc/login.defs文件中创建用户组的默认配置(修改时在该选项后以键值对形式进行修改)

GID即用户组的ID

删除用户组

命令:groupdel

作用:删除用户组

语法:groupdel [选项] 组名

该命令比较简单,出去-h选项外的另一个-R选项都是不常用的

[root@VM_200_13_centos ~]# groupdel tangdd

修改用户组

命令:groupmod

作用:修改用户组

语法:groupmod [选项] 组名

选项 说明
-g 修改当前组的GID为指定的GID
-n 修改当前组名为新的组名
-o 允许使用一个重复的GID
-p 修改组密码

密码修改

命令:passwd

作用:修改用户密码

语法:passwd [选项] <用户名>

说明:不加用户名则修改当前用户

选项 说明
-k 设置只有在密码过期失效后才能修改
-d 删除密码,只有ROOT用户能使用该选项
-l 锁定密码,只有ROOT用户能使用该选项
-u 解除锁定,只有ROOT用户能使用该选项
-e 使帐号的密码过期,只有ROOT用户能使用该选项
-f 强制执行
-x 密码最长使用寿命,只有ROOT用户能使用该选项
-n 密码最短使用寿命,只有ROOT用户能使用该选项
-w 在密码过期之前用户收到警告的天数,只有ROOT用户能使用该选项
-i 指定密码过期后的第几天禁用帐号,只有ROOT用户能使用该选项
-S 报告用户的密码状态,只有ROOT用户能使用该选项
--stdin 以标准输入设定用户的密码,只有ROOT用户能使用该选项

选项都比较简单,最后一个可能比较难懂

[root@VM_200_13_centos ~]# echo cnmlgb | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.

附录

RHEL7恢复ROOT密码

RHEL7用户管理的更多相关文章

  1. 第七天 Linux用户管理、RHEL6.5及RHEL7.2 root密码破解、RHEL6.5安装vmware tools

    1.Linux用户管理 Linux系统中,存在三种用户 A.超级用户:root 最高权限,至高无上 在windows中 administrator是可以登录的最高权限,但是,system权限最高,不能 ...

  2. linux 下用户管理

    linux 下用户管理 一.用户的分类 1.超级用户:root UID=0 2.系统用户:不需要登录系统,对应用程序服务,主要维护系统的正常运行:UID = 1 ~ 499(RHEL7 = 1 ~ 9 ...

  3. 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装

    Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...

  4. liunx之用户管理

    用户管理 ==============================================================groupadd,groupdeluseradd,usermod, ...

  5. Linux(3)- 用户管理、文件与目录权限、常用命令、Linux软件包管理

    一.用户管理 现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源. 普通用户 ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(75)-微信公众平台开发-用户管理

    系列目录 前言 本节主要是关注者(即用户)和用户组的管理,微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号也提供了相应的接口 ...

  7. MySQL用户管理

    主要总结MySQL进行用户管理的基本实现,包含MySQL登录,添加用户,删除用户,为用户分配权限,移除某用户的权限,修改密码,查看权限等基本操作,所有命令均亲测实现.本博文是本人的劳动成果所得,在博客 ...

  8. mysql 用户管理和权限设置

    用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...

  9. Laravel大型项目系列教程(二)之用户管理

    Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能. 二.Let's go 1.创建用户注册视图 $ php artisan generate:v ...

随机推荐

  1. java之抽象类

    1.用abstract关键字来修饰一个类时,这个类叫做抽象类:用abstract来修饰一个方法时,该方法叫做抽象方法. 2.含有抽象方法的类必须被声明抽象类,抽象类必须被继承,抽象方法必须被重写. 3 ...

  2. 对android应用一些破解的方法

    因为需要破解一款应用,找了些资料 Android手机中的程序文件夹拷贝到别的Android手机上还能用么? xx.apk Android个人破解应用新思路 安卓手机下xx.apk JAVA破解之旅 s ...

  3. MarkDown写blog(测试)

    区块元素 段落和换行 一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行.比方说,若某一行只包含空格和制表符,则该 ...

  4. Exploring Ionic Lists

    Infinite Lists 由于手机不适合使用多页面显示posts,Infinite Lists成为各种新闻.咨询类app的标配.为了在ionic框架中使用到Infinite Lists,我们首先学 ...

  5. linux下mysql字符集编码问题的修改

    安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件:由于linux下MySQL的默认安装目录分布在不同的文件下:不像windo ...

  6. 解决 ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)异常

    ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) 解决方案: 在java_opts="-Xd ...

  7. node.js JS对象和JSON字符串之间的转换

    JSON.stringify(obj)将JS对象转为字符串. var json = { aa: ['sdddssd'],   bb: [ '892394829342394792399', '23894 ...

  8. Java后端书架

    本书架主要针对Java后端开发与架构. 更新记录:4.0版把第五部份-具体技术的书整块拿掉了.<TCP/IP详解 卷1:协议>出到了第二版,增加<SRE:Google运维解密> ...

  9. canvas剪裁图片并上传,前端一步到位,无需用到后端

    背景: 当前主流的图片剪裁主要有两种实现方式. 1:flash操作剪裁.2:利用js和dom操作剪裁. 目前看来这个剪裁主要还是先通过前端上传图片到服务器,然后前端操作后把一些坐标和大小数据传到后台, ...

  10. yousa_team团队项目——兼职平台网站 工作进度

    4月31 初步设计网站界面,功能以及数据库关系图 网站包括登陆注册界面,商家和学生都有个人主页,查看兼职信息界面和反馈界面,管理员有查看反馈界面,查看兼职市场,管理后台界面 登录注册界面实现用户的登陆 ...