首页 > 代码库 > 用户、组以及相关文件说明
用户、组以及相关文件说明
用户分类:
管理员:root用户,UID为0
系统用户:UID范围1-499
一般用户:UID范围:500-60000
组分类:
基本组或私有组:创建用户时,如果没有为其指定所属的组,则系统默认会创建一个与用户名同名的组。
附属组:默认组以外的其他组。
当一个用户执行程序的时候,系统会判断当前用户有没有权限执行这个程序,如果没有权限执行,则启动不了该程序。如果有权限执行,则执行后该程序会产生一个或多个进程,该进程的权限就是执行该程序的用户的权限,因此进程的属主和属组就是该用户的属主和属组。当该进程访问一个对象的时候,会判断该进程的属主与属组是否与要访问的对象的属主和属组一样,如果属主一样,则具有要访问对象的属主的权限,如果属组相同,则具有要访问对象的属组的权限,如果都相同,则同时具有该权限,如果都不相同,则具有Others的权限。
示例:
程序:/bin/ls
程序的权限:-rwxr-xr-x 1 root root 117024 Apr 17 2012 /bin/ls
用户:tom
组:tom
对象:drw-r--r-- 1 root root 0 Jun 30 21:59 a123
当用户tom想执行/bin/ls这个程序时,系统会判断tom是否有权限执行/bin/ls,而ls这个程序的属主和属组都是root,而tom用户的属主和属组都是tom,因此当tom执行ls时,就会具有others的权限,而ls这个程序的others的权限是rx,因此tom可以执行ls,执行后会产生一个进程,该ls进程的属主和属组就是tom,当tom使用ls访问对象a123时,要和对象的属组和属主进行比较,因此对于a123来说,只能查看ls列出a123目录里面的文件,不能使用ls -l列出该目录下的文件或目录的详细信息。
1. /etc/passwd文件格式说明:
格式:
account:password:UID:GID:GECOS:directory:shell
各个字段的说明:
account:用户的名称。
password:用户的加密密码,可以是*或x。如果是x,则是一个占位符,真正的密码位于/etc/shadow这个影子文件中。
UID:用户的UID
GID:用户的基本组的GID。附属组的信息存放在/etc/group里面。
GECOS:用户的注释信息,如用户的全名,用户的家庭住址等等。
directory:用户的家目录。
shell:用户在登录系统的时候所运行的shell。如果为空,则为/bin/sh即/bin/bash。如果设置为不存在的shell,则用户无法通过login登录系统。当设置为/sbin/nologin时,用户也无法登录系统,因此系统用户的默认shell都是/sbin/nologin。
查看系统中的合法shell:
cat /etc/shells或者是chsh -l
示例:
[root@Server3 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh [root@Server3 ~]# chsh -l /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh [root@Server3 ~]#
2. /etc/shadow文件说明
shadow文件存放是系统中的账户的密码信息以及账户的老化信息。该文件采用冒号(:)作为分隔符,分为9个字段,格式如下:
login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
示例:
[root@Server3 tmp]# grep ‘frame‘ /etc/shadow frame:$6$raWrlosK$jwlpWIiYAfMLOreKEXsMwvbwieNsG.vGl72KYf.stzQCQwMDayhtCTl/B.Apjn/UlyLBTZcbvmjNOL1vhqMTd0:16247:0:99999:7::: [root@Server3 tmp]#
login name:登录名,存在于系统中的有效的用户名。在上述示例中,登录名为frame。
encrypted password:在加密密码里面,分为如下的几个部分,
该部分的格式如下:
$id$salt$encrypted
ID | Method --------------------------------------------------------- 1 | MD5 2a | Blowfish (not in mainline glibc; added in some | Linux distributions) 5 | SHA-256 (since glibc 2.7) 6 | SHA-512 (since glibc 2.7)
encrypted的长度: MD5 | 22 characters SHA-256 | 43 characters SHA-512 | 86 characters
第一部分:表示的是采用的加密方式。如果$后是1,则表示的是使用MD5方式加密的,如果是2,则表示
的是使用的Blowfish加密算法,如果是5,则表示的使用的SHA256加密算法,如果是6,则使用的是
SHA512加密算法
加密方法:对称加密和非对称加密。
对称加密:加密和解密使用相同的密码。
非对称加密:也称为公钥加密。在非对称加密中,每个密码都是成对出现的,一个为私钥(private key或者是secret key),一个为公钥(public key),公钥加密,私钥解密。
单向加密:也成为散列加密。可以由数据取得密文,反之不能以密文取得数据。提取数据特征码,每一个数据的特征码都是唯一的,可以用于数据校验,校验数据是否遭到破坏。计算一个文件的特征码,可以用md5sum。
示例:
[root@Server3 tmp]# md5sum issue bbee69205bff2d11233b02a8f80ba4fd issue [root@Server3 tmp]# echo a >> issue [root@Server3 tmp]# md5sum issue f80ac7948edb06fa27b1a0ddbe09d3af issue [root@Server3 tmp]# 说明:当往issue文件中增加一个字符a时,重新计算其特征码时,所产生的结果差别很大,这个也就是单向加密的一个特征,称为雪崩效应。初始结果的微小改变可以引起结果的巨大差异。
常用的单向加密算法有:MD5和SHA1。
MD5(Message Digest)为128位的定长输出。
SHA1(Secure Hash Algorithm)为160位的定长输出。
SHA256和SHA512:则表示为256和512位的加密算法。
第二部分:称为salt,为8字节的字符串,为随机生成的。在计算密码的时候,是把这部分也加进去计算的。如果salt和密码都一样,则加密出来的结果才一样,如果仅仅是密码一样,而salt不一样,则加密出来的结果也不一样。
当用户登录系统的时候,先将salt加进去,然后使用相同的算法,对用户输入的密码进行加密,然后和第三部分进行比较,判断是否相同,相同则密码一样,否则不一样。
第三部分:就是用户的密码。
在encrypted password中,如果是*,则表示该用户不允许登录,如果是!则表示该用户没有密码,NP也表示没有密码,即No Password,如果不想让一个用户登录系统,可以在该字段的前面加上!!即可,!!表示的是该用户被锁定,LK也可以表示账户被锁定(LocK)
date of last password change:上一次密码修改的时间距离1970年1月1日的天数。如果该字段为空,则表示关闭密码老化的特性。如果为0,则表示用户下一次登录系统时,必须要修改密码。
minimum password age:两次修改密码的最小时间间隔,密码最短使用期限。如果是0或空,则意味着可以随时修改密码。
maximum password age:密码最长使用期限。意味着该时间到期后,用户必须要修改自己的密码。用户下次登录的时候,会询问用户是否要修改密码。
password warning period:提前多少天警告用户口令将过期。如果为0,则密码即将过期时,不会提示用户修改密码。
password inactivity period:密码过期后多少天,用户依然可以使用该密码登录,但是登录后系统会强制用户修改密码。如果该时间到期后用户没有修改密码,则该密码将失效。
account expiration date:账户过期时间,也是距离1970年1月1日起的天数。账户过期和密码过期是不一样的,账户过期意味着用户不能使用该账户登录,密码过期则意味着用户不能使用该密码登录。如果是空,则意味着该账户永远不会过期.
reserved field:保留供将来使用。
3. /etc/group
格式:
group_name:passwd:GID:user_list
group_name:组名
passwd:组密码
GID:组的GID
user_list:用户列表,用逗号隔开。
示例:
daemon:x:2:bin,daemon
4. /etc/gshadow
格式:
group name:encrypted password:administrators:members
group name:组名
encrypted passwd:加密后的组密码
administrators:组管理员
members:组成员列表,多个组成员之间用逗号分隔。
示例:
mail:::mail,postfix
本文出自 “HeZhang” 博客,请务必保留此出处http://hezhang.blog.51cto.com/1347601/1433335