『学了就忘』Linux用户管理 — 50、用户管理相关文件详细说明
提示:严格的用户权限划分,不是为了防范外部人员的攻击,主要是防范内部人员的操作。
越是重要的数据,就要做严格的用户权限划分。
1、用户信息文件
用户信息文件为/etc/passwd,该文件中每一行就是一个用户。
如下图所示:

内容格式:root:x:0:0:root:/root:/bin/bash
每一行是7列,用:隔开。
下面说明一下每列的内容:
第一列:用户名。
第二列:密码位。这个位置不是真正的密码,是一个标识位,仅仅只代表这个用户有密码。真正的密码在/etc/shadow文件中。
- 为什么要把密码分开到另外一个文件中?
你查看一下两个文件的权限就可以知道了,如下图所示:

/etc/passwd文件是谁都可以查看。
/etc/shadow只有root用户可以查看。
这样更加安全。 - 这个位置可以省略掉吗?
这个位置有标识,系统才去/etc/shadow文件中去验证密码。如果没有标识,不会验证,所以不能删除。
第三列:用户ID。
0:超级用户UID,如果用户UID为0,代表这个账号是管理员账号。
Linux中如何把普通用户升级成为管理员呢?
就是把其他用户的UID修改为0就可以了,这点和Windows是不同的。
不过不建议建立多个管理员账号。1-499: 系统用户(伪用户)UID,这些UID账号是系统保留给系统用户的UID。
也就是说UID是1-499范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中1-99是系统保留的账号,系统自动创建。100-499是预留给用户创建系统账号的。
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin除外。500-65535: 普通用户UID,建立的普通用户UID从500开始,最大到65535。这些用户足够使用了,但是如果不够也不用害怕,2.6.x内核以后的Linux系统用户UID,已经可以支持2^32这么多了。
提示:如何把普通用户变成超级用户:把用户UID改为0。
第四列:组ID。
- GID添加用户时,如果不指定用户所属的初始组,那么会建立和用户名相同的一个组。
- Linux系统的用户组分为:初始组和附加组。
第五列:用户说明。如果新创建的用户,你没有填写说明,这个位置是空的。
第六列:用户家目录位置。
第七列:登录shell,/bin/bash。(用户登陆后执行的shell)
2、/etc/shadow影子文件
/etc/shadow文件内容:

内容格式:root:$6$uUXT6exYbBm6a7BC$kUSor7FFw48xOwuas8A2cI9hNKN7Izaz1Yd7h8a.otiEL/1LirTD6qDEeFNLgM4bpOswbAm3dh/WoPCXH9lg00:18251:0:99999:7:::
每一行是9列,用:隔开。下面说明一下每列的内容。
第一列:用户名。
第二列:加密密码。
- 我们可以在密码前,人为的加入
!或*改变加密值让密码暂时失效,使这个用户无法登陆,达到暂时禁止用户登录的效果。 - 注意所有伪用户的密码都是
!!或*,代表没有密码,是不能登录的。 - 当然我新创建的用户如果不设定密码,它的密码项也是
!!,代表这个用户没有密码,不能登录。
Red Hat 6开始,密码的加密方式为SHA512,Red Hat 6以前用的密码的加密方式为MD5。
第三列:密码最近更改时间,1970年1月1日作为标准时间时间截转日期。
时间显示为时间戳的形式,不是重点,了解即可。
- 时间戳转日期
[root@localhost ~]# date -d "1970-01-01 "15775 days"
2013年03月11日星期一00:00:00 CST
- 日期转时间戳
[root@localhost ~]# echo $(($(date-date="2013/03/11"+%s)/86400+1))
15775
这个
15775表示在1970年1月1日之后的第15775天修改的密码,单位是天。
第四列:两次密码的修改间隔时间(和第3字段相比)。
- 默认是0。也就是说当前时间戳是100,第四列数值为10,也就是下一次修改的时间最少也要到时间戳为110的时候才能修改。
- 该字段不建议修改。
第五例:密码有效期(和第3字段相比)。
第六列:密码修改到期前的警告天数(和第5字段相比)。
- 就是密码到期前多少天开始,该用户每一次登陆,系统都给你提示你的密码快到期了。
第七列:密码过期后的宽限天数(和第5字段相比)。
- 默认值没有写,其值就是-1。其意思表示用户是永不过期的,即使密码有效期过了,用户的密码也不会失效,还可以正常使用。
- 如果需要用户密码到期之后不能使用,把该位数值改写成0,或者改成正数,宽限几天。
第八列:密码失效时间。
- 这里同样要写时间戳,也就是用1970年1月1日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也失效无法使用。(就像是买会员,到期终止了。)
- 如果用户的密码失效了,会自动的密码位最前端加上一个
!,来进行用户登陆失效。
第九列:保留。没有意义,保留位。
3、/etc/group 组信息文件
/etc/group内容格式:root:x:0:root
下面说明一下每列的内容:
第一列:组名。
第二列:组密码位
- 这个也是一个占位标识,具体的密码在
/etc/gshadow文件中。 - 并不建议给组设置密码。
- 组密码是用来做什么的?
如果我给用户组设定了组管理员,并给该用户组设定了组密码,组密码就保存在这个文件当中。组管理员就可以利用这个密码管理这个用户组了。
(也就是说,如果需要向一个组添加用户,默认是只有root用户可以添加。而root用户给一个组创建了一个密码,然后给组中的一个用户,该用户就相当于这个组的一个小组长,这个小组长就有权限往这个组里添加用户,或者删除用户。) - 为什么不建议设置组密码?
因为这样设置会有一定风险,建议还是root用户来干这些事比较安全。
第三列:GID,也就是组ID。
第四列:此组中支持的其他用户(附加用户),附加组是此组的用户。自己属于初始组,不显示在此列中。
说明一个问题。
初始组和附加组区别
- 初始组:每个用户初始组只能且必须有一个,没有初始组这个用户是不能存在的,一般都是和用户名同名的。
- 附加组:每个用户可以属于多个或者没有附加组。要把一些用户加入组,都是加入附加组。
如果需要把用户改到其他组里,不建议修改初始组,建议修改附加组。
4、组密码文件
组密码文件/etc/gshadow文件,具体看上边3中介绍。
5、用户的家目录
Linux系统中,每添加一个用户,都会在/home/目录下,生成一个和用户名相同的目录,该目录作为该用户的家目录。
如下示例:
[root@localhost ~]# ls /home/
user1
6、用户邮箱目录
这个邮箱在/var/spool/mail目录当中,例如:user1用户的邮箱就是/var/spool/mail/user1文件.
7、用户模板目录
在/etc/skel/目录中,我们进入到uesr1的家目录中,这个目录看起来是空的。
[root@localhost ~]# cd /home/user1/
[root@localhost user1]# ls
[root@localhost user1]#
其实uesr1的家目录中是有文件的,但都是隐藏文件。
[root@localhost user1] # ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .gnome2
那这些隐藏文件是哪来的?
用户的家目录,是执行添加用户useradd user2命令之后自动建立的。所以说这些隐藏文件是自动生成的,这些自动生成的模板,就是在/etc/skel/目录中。
我们进入/etc/skel/目录中查看。
[root@localhost user1]# cd /etc/skel/
[root@localhost skel]# ls
[root@localhost skel]# ls -a
. .. .bash_logout .bash_profile .bashrc .gnome2
和用户家目录中的隐藏文件是一样的。.bash_history文件是在用户执行命令之后,自动生成的文件。
所以这个目录一般不用我们动。
那什么时候需要我们对/etc/skel/目录进行改动呢?
比如说我想给每一个新创建的用户,提供一个警告信息,或这些服务器使用规则的文档。我就可以在/etc/skel/目录下创建一个文档。
如下:
[root@localhost skel] # vi warining.txt
# 开始编辑内容
# ...
# ...
这样,在之后每一个新创建用户的家目录中,都会有一个warining.txt文件出现。
提示:之前已经存在的用户的家目录中不会出现。
总结:
添加一个用户,实际上是修改了上边7个文件(用户模板文件除外)。同理,把上述几个位置的文件进行删除,也可以完全的删除一个用户。
『学了就忘』Linux用户管理 — 50、用户管理相关文件详细说明的更多相关文章
- 『学了就忘』Linux系统管理 — 86、查看系统资源相关命令
目录 1.vmstat命令 2.dmesg命令 3.free命令 4.查看CPU信息 5.查看本机登陆用户信息 (1)w命令 (2)who命令 6.uptime命令 7.查看系统与内核相关信息 1.v ...
- 『学了就忘』Linux系统管理 — 81、进程管理介绍
目录 1.进程与线程的概念 2.什么是进程管理 3.进程管理的作用 4.Linux进程的几种状态 5.进程与线程的关系 (1)线程与进程的关系 (2)总结 1.进程与线程的概念 来源百度百科: 进程( ...
- 『学了就忘』Linux系统管理 — 85、工作管理相关命令
目录 1.工作管理简介 2.如何把命令放入后台 3.后台管理命令 (1)查看后台的工作 (2)将后台暂停的工作恢复到前台执行 (3)把后台暂停的工作恢复到后台执行 4.后台命令脱离登录终端运行 1.工 ...
- 『学了就忘』Linux用户管理 — 51、用户管理相关命令
目录 1.添加用户(useradd命令) 2.设定密码(passwd命令) 3.用户信息修改(usermod命令) 4.删除用户(userdel命令) 5.切换用户身份(su命令) 1.添加用户(us ...
- 『学了就忘』Linux启动引导与修复 — 72、Linux系统的修复模式(单用户模式)
目录 1.单用户模式常见的错误修复 2.通过单用户模式修改系统密码 (1)进入grub启动引导程序中 (2)编辑相应的系统启动内容 (3)编辑grub配置文件内容 (4)启动系统 (5)修改root用 ...
- 『学了就忘』Linux基础命令 — 25、文件基本权限的管理
目录 1.文件和目录的默认权限 2.umask默认权限 (1)查看系统的umask权限 (2)用八进制数值显示umask权限 (3)umask权限的计算方法 (4)注意:umask默认权限的计算绝不是 ...
- 『学了就忘』Linux基础 — 15、了解Linux系统的目录结构
目录 1.一级目录说明 (1)一级目录列表 (2)/bin/和/sbin/目录说明 (3)/boot/目录说明 (4)/lib/和/lib64/目录说明 (5)/lost+found/目录说明 (6) ...
- 『学了就忘』Linux基础命令 — 18、Linux命令的基本格式
目录 1.命令提示符说明 2.命令的基本格式 (1)举例ls命令 (2)说明ls -l命令的 输出内容 1.命令提示符说明 [root@localhost ~] # []:这是提示符的分隔符号,没有特 ...
- 『学了就忘』Linux基础命令 — 20、文件操作的相关命令
目录 1.touch 命令 2.stat命令 3.cat命令 4.more命令 5.less命令 6.head命令 7.tail命令 1.touch 命令 touch命令用于创建空文件或修改文件时间, ...
随机推荐
- linux下nginx编译安装、版本信息修改
环境 centos 7 安装依赖包 yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel opens ...
- Java初步学习——2021.10.05每日总结,第五周周二
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了二维数组,包括二维数组的声明,和二维数组的创建.以及获取二维数组的长度,其中要注意的是二维数组是每个元素都是一维数 ...
- 简单几步零成本使用Vercel部署OneIndex 无需服务器搭建基于OneDrive的网盘
前提 你需要一个OneDrive账号,必须管理员开放API 需要已安装Node.js 拥有Github账号,没有就注册一个 魔法上网环境(看情况) 注册应用 登录https://portal.azur ...
- 某个buuctf的题(easy_tornado)
题目:http://88099f53-12b6-470a-9993-b73e4155940e.node3.buuoj.cn/ 1首先看三个文件的内容 2简单分析 如果出题人没整一些花里胡哨的,那么fl ...
- 解决GitHub访问慢
话不多说,上干货~~~ 1. 打开 http://tool.chinaz.com/dns/ ,在输入框中填写 github.com,然后点击检测按钮,会列出响应ip,如图: 2. 找到hosts文件, ...
- WPF 排版基础
一.WPF 排版基础 WPF使用控制面板来进行排版,控制面板实际上是一种可以放入WPF界面元素的容器.当用户把界面元素放入控制面板后,WPF会自动把这些界面元素放在它认为合适的地方.WPF开发人员需要 ...
- Noip模拟34 2021.8.9
T1 Merchant 一眼二分,然后想了想维护凸包,好像并没有什么关系, 然后又想了想维护一个栈,发现跳指针细节过多不想打 最后直接打了二分,大点跑的飞快,感觉比较稳,出来$78$分 是没用神奇的$ ...
- 使用jQuery-UI来实现一个Ajax的自动完成功能(自动填充搜索框的下拉值)
首先你要在.net拓展包中去搜索 jquery ui (Combined Libray)安装这么个文件 第二部 在控制器中添加我们根据输入搜索框的值获取符合的记录集的action 第三步 有了 ...
- 小白自制Linux开发板 十. NES游戏玩起来
本篇基于我们制作的Debian文件系统而展开,而且我们这会玩一些高级的操作方式--用我们的小电脑进行程序编译. 所以本篇操作全部都在我们个的开发板上完成. 1. 开发环境搭建 首先安装gcc, ...
- ASP的调试技术解答
一. 调试 ASP.NET 应用程序时出现"未将项目配置为进行调试"的错误信息 症状 当您在 Visual Studio .NET 中调试 ASP.NET 应用程序时,可能会出现下 ...