关于Ubuntu中passwd、shadow、group等文件
在Ubuntu系统中,/etc目录下,有三个文件:passwd shadow group,可能我们已经在用了,但是没有注意到其详细。
这三个配置文件用于系统帐号管理,都是文本文件,可用vi等文本编辑器打开。/etc/passwd用于存放用户帐号信息,/etc/shadow 用于存放每个用户加密的密码,/etc/group用于存放用户的组信息。
1. /etc/passwd
/etc/passwd文件的内容如下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4::sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
...
每一行是由分号分隔的字串组成,它的格式如下:
username:password:uid:gid:gecos:homedir:shell
各域对应的中文说明如下:
用户名:密码:用户ID:组ID:用户全名:主目录:登录shell
gecos是通用电子计算机操作系统的缩写,是Bell实验室中的一台大型主机。
Unix系统最初是用明文保存密码的,后来由于安全的考虑,采用crypt()算法加密密码并存放在/etc/passwd文件。现在,由 于计算机处理能力的提高,使密码破解变得越来越容易。/etc/passwd文件是所有合法用户都可访问的,大家都可互相看到密码的加密字符串,这给系统 带来很大的安全威胁。现代的Unix系统使用影子密码系统,它把密码从/etc/pa sswd文件中分离出来,真正的密码保存在/etc/shadow文件中,shadow文件只能由超级用户访问。这样入侵者就不能获得加密密码串,用于破 解。使用shadow密码文件后,/etc/passwd文件中所有帐户的password域的内容为"x",如果password域的内容为"*",则 该帐号被停用。使用passwd这个程序可修改用户的密。
2. /etc/shadow
/etc/shadow存放加密的口令,该文件只能由root读取和修改。下面是shadow文件的内容:
root:$1$43ZR5j08$kuduq1uH36ihQuiqUGi/E9::0::7:::
daemon:*::0::7:::
bin:*::0::7:::
sys:*::0::7:::
sync:*::0::7:::
...
我们可用chage命令显示test用户的帐号信息:
debian:~# chage -l test
最小: 0
最大:
警告日: 7
失效日: -1
最后修改: 7月 09 2005
密码过期: 从不
密码失效: 从不
帐户过期: 从不
/etc/shadow文件的格式如下:
username:password:last_change:min_change:max_change:warm:failed_expire:expiration:reserved
各字段的简要说明:
last_change:表示自从Linux使用以来,口令被修改的天数。可用chage -d命令修改。
min_change:表示口令的最小修改间隔。可用chage -m命令修改。
max_change:
它的格式如下:
groupname:password:gid:members
这里的password代表组口令,很少用到。它可使原先不在这个群组中的用户可以通过newgrp命令暂时继承该组的权限,使用 newgrp命令时会新开一个shell。口令的加密方式和passwd文件中的口令一样,所以如果需设置组口令,要用passwd程序虚设一个用户,再 把该用户password节中的加密口令拷贝到/etc/group文件中。members列代表组成员,我们可把需加入该组的用户以逗号分隔添加到这里 即可。同一组的成员可继承该组所拥有的权限。
这样,用户帐户本身在 /etc/passwd 中定义。Linux 系统包含一个 /etc/passwd 的同伴文件,叫做 /etc/shadow。该文件不像 /etc/passwd,只有对于 root 用户来说是可读的,并且包含加密的密码信息。我们来看一看 /etc/shadow 的一个样本行:
CODE:
drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
|
每一行给一个特殊帐户定义密码信息,同样的,每个字段用 : 隔开。第一个字段定义与这个 shadow 条目相关联的特殊用户帐户。第二个字段包含一个加密的密码。其余的字段在下表中描述:
字段 3 自 1/1/1970 起,密码被修改的天数
字段 4 密码将被允许修改之前的天数(0 表示“可在任何时间修改”)
字段 5 系统将强制用户修改为新密码之前的天数(1 表示“永远都不能修改”)
字段 6 密码过期之前,用户将被警告过期的天数(-1 表示“没有警告”)
字段 7 密码过期之后,系统自动禁用帐户的天数(-1 表示“永远不会禁用”)
字段 8 该帐户被禁用的天数(-1 表示“该帐户被启用”)
字段 9 保留供将来使用
shadow 是 passwd 的影子文件。
在linux中,口令文件在/etc/passwd中,早期的这个文件直接存放加密后的密码,前两位是"盐"值,是一个随机数,后面跟的是加密的密码。为了安全,现在的linux都提供了 /etc/shadow这个影子文件,密码放在这个文件里面,并且是只有root可读的。
/etc/passwd文件的每个条目有7个域,分别是名字:密码:用户id:组id:用户信息:主目录:shell
例如:ynguo:x:509:510::/home/ynguo:/bin/bash
在利用了shadow文件的情况下,密码用一个x表示,普通用户看不到任何密码信息。影子口令文件保存加密的口令;/etc/passwd文件中的密码全部变成x。Shadow只能是root可读,从而保证了安全。
/etc/shadow文件每一行的格式如下:用户名:加密口令:上一次修改的时间(从1970年1月1日起的天数):口令在两次修改间的最小天数:口令修改之前向用户发出警告的天数:口令终止后账号被禁用的天数:从1970年1月1日起账号被禁用的天数:保留域。
例如:root:$1$t4sFPHBq$JXgSGgvkgBDD/D7FVVBBm0:11037:0:99999:7:-1:-1:1075498172
3. /etc/group
/etc/group 文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用 户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件 的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的; 用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户 组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去.
/etc/group 内容具体分析
/etc/group 的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:
group_name:passwd:GID:user_list
在/etc/group 中的每条记录分四个字段:
第一字段:用户组名称;
第二字段:用户组密码;
第三字段:GID
第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名; 我们举个例子:
root:x:0:root,linuxsir 注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户(可以通过/etc/passwd查看);
beinan:x:500:linuxsir 注:用户组beinan,x是密码段,表示没有设置密码,GID是500,beinan用户组下包括linuxsir用户及GID为500的用户(可以通过/etc/passwd查看);
linuxsir:x:502:linuxsir 注:用户组linuxsir,x是密码段,表示没有设置密码,GID是502,linuxsir用户组下包用户linuxsir及GID为502的用户(可以通过/etc/passwd查看);
helloer:x:503: 注:用户组helloer,x是密码段,表示没有设置密码,GID是503,helloer用户组下包括GID为503的用户,可以通过/etc/passwd查看;
而/etc/passwd 对应的相关的记录为:
root:x:0:0:root:/root:/bin/bash
beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
helloer:x:502:503::/home/helloer:/bin/bash
由此可以看出helloer用户组包括 helloer用户;所以我们查看一个用户组所拥有的用户,可以通过对比/etc/passwd和/etc/group来得到;
关于GID ;
GID和UID类似,是一个正整数或0,GID从0开始,GID为0的组让系统付予给root用户组;系统会预留一些较靠前的GID给系统虚拟用户(也被 称为伪装用户)之用;每个系统预留的GID都有所不同,比如Fedora 预留了500个,我们添加新用户组时,用户组是从500开始的;而Slackware 是把前100个GID预留,新添加的用户组是从100开始;查看系统添加用户组默认的GID范围应该查看 /etc/login.defs 中的 GID_MIN 和GID_MAX 值; 我们可以对照/etc/passwd和/etc/group 两个文件;我们会发现有默认用户组之说;我们在 /etc/passwd 中的每条用户记录会发现用户默认的GID ;在/etc/group中,我们也会发现每个用户组下有多少个用户;在创建目录和文件时,会使用默认的用户组;我们还是举个例子; 比如我把linuxsir 加为root用户组,在/etc/passwd 和/etc/group 中的记录相关记录为:
linuxsir用户在 /etc/passwd 中的记录;我们在这条记录中看到,linuxsir用户默认的GID为502;而502的GID 在/etc/group中查到是linuxsir用户组;
linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
linuxsir 用户在 /etc/group 中的相关记录;在这里,我们看到linuxsir用户组的GID 为502,而linuxsir 用户归属为root、beinan用户组;
root:x:0:root,linuxsir
beinan:x:500:linuxsir
linuxsir:x:502:linuxsir
我们用linuxsir 来创建一个目录,以观察linuxsir用户创建目录的权限归属;
[linuxsir@localhost ~]$ mkdir testdir
[linuxsir@localhost ~]$ ls -lh
总用量 4.0K
drwxrwxr-x 2 linuxsir linuxsir 4.0K 10月 17 11:42 testdir
通过我们用linuxsir 来创建目录时发现,testdir的权限归属仍然是linuxsir用户和linuxsir用户组的;而没有归属root和beinan用户组,明白了吧; 但值得注意的是,判断用户的访问权限时,默认的GID 并不是最重要的,只要一个目录让同组用户可以访问的权限,那么同组用户就可以拥有该目录的访问权,在这时用户的默认GID 并不是最重要的;
4. /etc/gshadow
/etc/gshadow 解说;
/etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码;
/etc/gshadow 格式如下,每个用户组独占一行;
groupname:password:admin,admin,...:member,member,...
第一字段:用户组
第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
第四字段:组成员,如果有多个成员,用,号分割;
举例:
beinan:!::linuxsir
linuxsir:oUS/q7NH75RhQ::linuxsir
第一字段:这个例子中,有两个用户组beinan用linuxsir
第二字段:用户组的密码,beinan用户组无密码;linuxsir用户组有已经,已经加密;
第三字段:用户组管理者,两者都为空;
第四字段:beinan用户组所拥有的成员是linuxsir ,然后还要对照一下/etc/group和/etc/passwd查看是否还有其它用户,一般默认添加的用户,有时同时也会创建用户组和用户名同名称; linuxsir 用户组有成员linuxisir;
如何设置用户组的密码? 我们可以通过 gpasswd来实现;不过一般的情况下,没有必要设置用户组的密码;不过自己实践一下也有必要;下面是一个为linuxsir用户组设置密码的例子;
gpasswd 的用法:
gpasswd 用户组
root@localhost ~]# gpasswdlinuxsir
正在修改 linuxsir 组的密码
新密码:
请重新输入新密码:
newgrp
用户组之间的切换,应该用 newgrp ,这个有点象用户之间切换的su ;我先举个例子:
[beinan@localhost ~]$ newgrp linuxsir
密码:
[beinan@localhost ~]$ mkdir lingroup
[beinan@localhost ~]$ ls -ld lingroup/
drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56lingroup/
[beinan@localhost ~]$ newgrp beinan
[beinan@localhost ~]$ mkdir beinangrouptest
[beinan@localhost ~]$ ls -ld beinangrouptest
drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56beinangrouptest
说明:我是以beinan用户组切换到linuxsir用户组,并且建了一个目录,然后再切换回beinan用户组,又建了一个目录,请观察两个目录属用户组的不同;还是自己体会吧;
关于Ubuntu中passwd、shadow、group等文件的更多相关文章
- Ubuntu中恢复rm命令误删文件(转)
计算机系统:Ubuntu 16.04 1 背景 在做项目的时候,本来想使用rm命令删除以14开头的文件,结果写成如下形式: rm 14 * 注意,本来14和*之间不应该有空格的,但是误写了一个空格,结 ...
- lesson - 5 课程笔记 which/ type / whereis /locate /pwd / etc/passwd/ shadow/ group / gshadow /useradd /usermod /userdel /passwd / su sudo
一.which 作用: which 命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录, which 命令会在环境变量$PATH 设置的目录里查找符合条件的文件.也 ...
- ubuntu中恢复rm命令误删文件
步骤: 1.对于文件系统为ext3文件系统 使用命令:sudo apt-get install ext3grep. 对于文件系统为ext4文件系统 使用sudo apt-get install ext ...
- (转)Ubuntu中使用dpkg安装deb文件提示依赖关系问题,仍未被配置
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5638149.html 参考网址: http://zhidao.baidu.com/link?url=b ...
- [错误解决]Ubuntu中使用dpkg安装deb文件提示依赖关系问题,仍未被配置
使用dpkg进行软件安装时,提示:dpkg:处理软件包XXX时出错:依赖关系问题,仍未被配置 使用如下命令,sudo apt-get install -f 等分析完之后,重新使用dpkg –i XXX ...
- Ubuntu中vi常用命令
在Ubuntu中经常需要修改某些文件,这里对vi中的一些常用操作作一下总结. 1.进入vi命令 vi filename: 打开或新建文件,并将光标置于第一行首 进入文件后,处于命令行模式(comman ...
- Ubuntu中改变文件的默认打开方式
其实最简单的方法是右键,在属性中修改,不过这样做没啥意义. ubuntu中与文件的打开方式相关的配置文件有四个: /etc/gnome/defaults.list 这是全局配置文件 /usr/shar ...
- Ubuntu中的.bashrc文件
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运 ...
- 在Debian/Ubuntu系统中安装*.sh与*.bin文件
在Debian/Ubuntu系统中安装*.sh与*.bin文件的基本方法.一,安装*.sh文件运行命令行至文件目录下,执行:sudo sh *.sh直接运行在命令行中执行:sudo chmod +x ...
随机推荐
- composer 报 zlib_decode(): data error
使用composer 时报 zlib_decode(): data error 错误. 解决办法:执行 composer self-update 即可
- Linux查看CPU和内存使用情况【转】
转自:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应 ...
- iOS中 项目开发易错知识点总结
点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [_contactTextFiled ...
- ecshop第一讲之安装
今天开始对Ectouch做一些研究,但是发现网上资源很少,而且官网对服务都需收费:并且提供的wiki.官方文档等都是空的,瞬间感觉,,,,后来开始海量搜索,最后发现只有论坛还有些东西可以看看,并对海量 ...
- clip属性
clip:rect矩形剪裁功能及一些应用介绍. 其实是这样的,top right bottom left分别指最终剪裁可见区域的上边,右边,下边与左边.而所有的数值都表示位置,且是相对于原始元素的左上 ...
- [ios]app后台运行
参考:http://www.douban.com/note/375127736/ 1 使用开源代码MMPDeepSleepPreventer将文件加入工程,包括音频文件.可以在源文件中加入单例,便于使 ...
- java.lang.IllegalThreadStateException
java.lang.IllegalThreadStateException 今天遇到了这个问题.当时的情景是想要循环实现了runable的类和继承Thread类的两个线程.可是没有注意到,继承自Thr ...
- 鼠标放上去,div高度随文字增加,并显示剩余的文字。
/*这里是鼠标放上去显示全名 */ .kb2wText{display:block; height:20px; width:150px; line-height:20px; color:#0 ...
- qbxt十一系列一
希望[题目描述]网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,“前进栈”.“后退栈”.这里你需要实现以下几个功能:BACK: 如果“后退栈”为空则忽略此命令. 否则将当前两面压入“ ...
- shell脚本之间互相调用
在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一: . ./subscript.sh 方法二: source ./subscript.sh 注意: .两个点之间,有空格 ...