Linux下关于用户账户的几个文件解析
Linux下关于用户账户的几个文件解析
Linux是一个多用户系统,但是对于一个多用户共存的系统中,当然不能够出现用户相互越权等一系列的安全问题,所以如何正确的管理账户成为了Linux系统中至关重要的一环。
在Linux下,与用户账户有着紧密联系的文件又如下的几个:
/etc/passwd #管理用户的UID、GID等重要用户信息
/etc/shadow #管理用户密码的等重要信息
/etc/group #管理用户组
/etc/gpasswd #管理用户组密码
1./etc/passwd
虽说这个文件的文件名写着passwd,但是里面并没有存放密码(早起存放,后来为了安全将密码分离出来)
打开该文件,里面的内容大致如下:
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
...
上面的每一行代表了存在你系统中的一个用户。按照“:”来进行字段的划分,可以划分为7个字段,从左到右依次如下意义:
- 账号名称(1)。用以来对应UID,例如上面的第一行root。
- 密码位(2)。早期的该字段的确用来存放密码,但是这个文件特性是所有程序都能读取,为了安全起见,后来将密码放置在了/etc/shadow中了,所以这里只有一个“x”。
- UID(3)。用户标识,在Linux中,该UID是整数。且多个账号可以对应一个UID,因为Linux系统内核只认UID的。不同的区间有不同的意义:
0(系统管理员)。如果你希望其他的某些账号也是系统管理员,可以讲其UID修改为0。(极度不推荐,一是安全性,二是UID还与多处文件及系统有关联,单一修改往往设置不全会出问题)
1~499。保留给系统账户使用的ID,不强制,只是一个习惯。
500~2^32-1。给一般用户使用的。 - GID(4)。这个与/etc/group有关,即与用户组相关,后续会提到。
- 用户信息说明(5)。没有重要用途,单纯作简单描述。
- 主文件夹(6)。例如上面的/root目录,当root登陆以后,直接进入root的主目录中。当然你可以进行个性化配置。
- Shell(7)。当用户root登陆以后,会查找该字段并使用该字段指定的shell(这里是/bin/bash)。但这是里有一个特殊的shell(nologin)可以用来替代成让账号无法取得shell环境的登陆操作。譬如,你当然不希望一个在你Linux上的邮件账户来通过shell操作你的电脑。
当然,如果记不住的话,可以使用finger命令与id命令,例如:
finger root
# 输出如下:
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Fri Mar 9 19:10 (CST) on tty1 7 seconds idle
Mail last read Sat Mar 3 15:58 2018 (CST)
No Plan.
id root
# 输出如下:
uid=0(root) gid=0(root) groups=0(root)
输出内容不在解释,十分 -h 了。
2./etc/shadow
打开该文件,内容大致如下:
root:$6$tVBKdRxY$myJhWrhIwlXh42zNYLz1fmwu4ONQWP03O/5ccx1/34koU8GTn0M0ACx3xI4Bl.wPN3DPrrGbQX7vbPqqR//xv0:17593:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
shadow文件夹自然也以“:”作为分隔符,这里一共有9个字段,从左到右依次具有如下意义:
- 账号名称(1)。
- 密码(2)。该处使用了摘要加密技术,即不容易逆向破译,只可做验证。
- 最近改动密码的日期(3)。自1970年1月1日以来累加的天数。
- 密码不可被改动的天数(4)。相当于改密码的冻结天数。root中为0代表你随时可以更改,如果修改为20就代表了20天内不可修改。
- 密码需要重新更改的天数(5)。这里root行填写的99999代表了root的密码在99999天以内需要修改,可以理解为允许你永不更改。
- 密码需要更改前的警告天数(6)。这一字段与上一字段配合。例如,上一字段设置为了20,即希望你在20天要重新修改密码,这里设置为5,就代表了第15天到第20天之前你登录的时候会提示你洗修改密码。
- 密码过期后的账号宽限天数(7)。例如,在字段(5)设置为了20,即希望你在20天内要修改密码,但是你在20天以后都还没有修改,那么该密码就过期了(密码过期你的账户依然可以使用bash等,但是重新登录时系统会提醒你修改密码),在过期期间你还没有修改密码,那么这个账户就失效了,该账号再也无法使用该密码登录了。
- 账号失效日期(8)。同样基于1970年1月1号以来的天数,日期到了以后,该账号会直接失效,与账号是否过期无关。
- 保留(9)。
3./etc/group
/etc/group文件中存放的是用户组的相关的信息,打开大致如下:
root:x:0:root
一共有四个字段:
- 用户组名称(1)。
- 用户组密码(2)。通常不需要设置,是给“用户组管理员”来使用的。
- GID(3)。/etc/passwd中第四个字段使用GID就是对应于此的。
- 此用户组支持的账户名(4)。当我们想要将一个用户添加到该用户组时,就可以将其写在该字段中,使用“,“无空格连接。
4./etc/gpasswd
/etc/gpasswd文件中存放的是用户组没密码的相关信息,大致如下:
root:::root
同样有四个字段:
- 用户组名(1)。
- 密码(2)。
- 用户组管理员账号(3)。
- 该用户组所属账号(4)。
当然,对于一个用户来说,当然可以在多个组当中。但是,当我们使用一个账户进行某些操作时,系统如何判断我们当前属于哪个组呢?例如,当前有个文件属性如下:
----r----- root group1 x.txt
有一个用户名为user既属于group1又属于group2。那该用户到底能不能读取这个txt呢?
其实这就涉及到了一个有效用户组与初始用户组两个概念了。使用groups命令,可以看到类似如下的输出(这里模拟有groups1、2两个组):
groups
# 输出
groups1 groups2
第一个就是有效用户。有效用户组意味着目前你身份是user,现在属于group1。所以你是可以读取那个txt的。如何进行切换呢?使用newgrp命令
newgrp group2
groups
# 输出
group2 group1
此时尝试读取x.txt会提示权限不足。
那么初始用户组是什么呢?其实就是/etc/passwd中的GID对应的用户组,也是我们在登陆是的第一个用户组。
Linux下关于用户账户的几个文件解析的更多相关文章
- 自学Linux Shell7.1-linux用户账户和组
点击返回 自学Linux命令行与Shell脚本之路 7.1-linux用户账户和组 linux安全系统的核心是用户账户.每个能进入linux系统的用户都会被分配唯一的用户账户,用户对系统中各对象的访问 ...
- linux下添加用户并将文件夹授权给某一个用户
### linux下添加用户并将文件夹授权给某一个用户 背景:在做一个项目时,需要外包的前端人员调试测试环境的页面,但是又不能给他服务器的账号信息,就在服务器上新添加一个子账户,再给这个账户项目文件的 ...
- Linux下的用户、组和权限
目录 一:用户和组信息的查看 查看用户信息 查看密码信息 查看组信息 特殊组wheel 二:用户和组信息的管理 用户管理 组管理 三:文件权限 文件权限的查看 文件权限的修改 ACL控制权限 setf ...
- linux下普通用户如何使用80端口启动程序
linux下普通用户如何使用80端口启动程序 http://blog.csdn.net/shootyou/article/details/6750230 大家都知道默认情况下linux的1024以下端 ...
- linux下创建用户
linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系 ...
- Linux 下监控用户最大进程数参数(nproc)是否到达上限
Linux 下监控用户最大进程数参数(nproc)是否到达上限的步骤: 1.查看各系统用户的进程(LWP)数: 注意:默认情况下采用 ps 命令并不能显示出所有的进程.因为 Linux 环境下执行多线 ...
- linux下创建用户并且限定用户主目录
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号 一方面可以帮助系统管理员对使用系统的用户进 ...
- 【搬运工】linux下创建用户(一)
转载:http://www.cnblogs.com/ylan2009/articles/2321177.html linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个 ...
- linux命令详解之useradd命令使用方法[linux下 添加用户、删除用户、修改用户密码、用户组管理]
http://www.jb51.net/article/45848.htm Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...
随机推荐
- 关于servlet中要写初始化逻辑应该重载有参还是无参的init
关于开发者在写初始化逻辑的时候,应该选用的哪个init方法@author mzy 在查看servlet的源码的时候,因为servlet是一个接口使用较麻烦: 所以我们使用它的实现类:GenericSe ...
- vue3.0入门(五):vite构建vue项目
使用vite构建项目步骤 安装node,cmd输入:node -v验证是否安装成功:一般node安装后会自动安装npm,cmd输入:npm -v验证是否安装成功 选择一个文件夹作为项目文件夹,搜索框输 ...
- 新东方APP技术团队建设
作者:张建鑫, 曾任IBM高级软件架构师, 滴滴高级技术专家, 现任新东方集团高级技术总监 2019年注定是不平凡的一年,在俞敏洪老师对科技条线的密切关注下, 吴强老师亲自操盘了对产品技术条线的改革, ...
- nginx 开启,关闭,重启
2021-08-191. 启动 # 判断配置文件是否正确 cd /usr/local/nginx/sbin ./nginx -t # 启动 cd usr/local/nginx/sbin ./ngin ...
- noip模拟39
\(\color{white}{\mathbb{百般红紫博众爱,正是芳菲斗艳时,名之以:牡丹}}\) %%% szs巨佬AK \(t1\).\(t4\) 都会做,剩下两道好像都不太会,再次扫描到知识盲 ...
- CGLib浅析
CGLib浅析 什么是CGLib CGLIB实现动态代理,并不要求被代理类必须实现接口,底层采用asm字节码生成框架生成代理类字节码(该代理类继承了被代理类). 所以被代理类一定不能定义为final ...
- ubantu与CentOS虚拟机之间搭建GRE隧道
Author : Email : vip_13031075266@163.com Date : 2020.01.23 Copyright : 未经同意不得 ...
- msf宏钓鱼
kali下载python脚本,生成rtf文件: 下载脚本:git clone https://github.com/bhdresh/CVE-2017-8759.git 生成rtf文件: python ...
- Docker DevOps实战:Docker+Jenkins+Python+Pytest+Allure(1)- 创建Jenkins容器、安装Python环境、安装项目依赖类库、安装Allure报告插件
前言: 本文实操笔记参照菠萝笔记,安装过程中的坑大家可以参考下 创建Jenkins容器 # 下载Jenkins镜像 [root@localhost ~]# docker pull jenkins/je ...
- mongodb linux基本启动 基础增删改 mysql语法的对比
一.主流数据源类型 还存在自定义数据源以及REST接口数据,共6中数据源. 二.linux下启动连接数据库 进去mongodb的目录启动服务:mongo --host 192.168.320.826 ...