赞
踩
Linux账号与身份管理
1. linux账号与用户组
用户标识符:UID与GID
虽然我们平时在登录linux主机的时候,会输入账号,但是linux并不会直接认识我们的账号,它认识的仅仅是ID。ID是一串数字,存储在/etc/passwd中。而账号仅仅是为了方便我们记忆而已。
Linux一共有两种ID,即UID和GID,UID是用户身份的标识,GID是群组的标识,它存在/etc/shadow中。
2. 用户账号
当我们登录主机时,会出现一个login界面提示我们登录,这时输入我们的账号和密码后,linux会做什么呢?
1) 先查找/etc/passwd看是否有这个账号,如果没有则退出,反之读出该用户的UID,GID,shell以及家目录等信息。
2) Linux进入/etc/shadow中查找对应的账号与UID,判断用户输入的密码与里面的密码是否一致。
3) 如果一切相符,则进入shell的掌控阶段。
由上面的流程可以得知,与账号有关的最重要的两个文件就是/etc/passwd以及/etc/shadow,一个管账号,一个管密码。
/etc/passwd文件结构
root:x:0:0:root:/root:/bin/bash
huli:x:500:500:huli:/home/huli:/bin/bash
其中每一行代表一个字段,有一些账号是系统正常运行所必须得,我们称它们为系统账号,每一行共有7个字段,使用’:’分隔开
1)用户名称
2)密码,一般是一个’x’,由于安全起见,现在的版本中密码都移到了/etc/shadow中。
3)UID
4)GID
5)账户描述信息
6)用户家目录
7)该用户默认的shell
注意:当UID是0时,表示这个账户是系统管理员,因此,要使一个账号变成系统管理员,可以将它的UID设成0。
/etc/shadow文件结构
root:$1$3FuRYPZx$CxcC2ghSgPjp7MzbWAal:15251:0:99999:7:::
同样,shadow的每一行也代表一个账户,也是以’:’分隔,但是它有9个字段。
1)用户名称,与passwd对应
2)密码:这是真正的密码,经过加密,如果密码栏的第一个字符是’*’或者是’!’,表示这个账号并不会用来登录。
3)最近更改密码的日期,这是距离1970年1月1日的天数。
4)密码不可更改的天数:这个字段表示这个账号的密码需要经过几天后才能更改,如果是0的话,表示密码随时可以更改。
5)密码需要重新更改的天数:如果为99999的话,表示密码不需要更改
6)密码更改期限前的警告期限
7)密码过期的宽限时间:如果密码失效了,还可以用这个密码在这个字段设置的天数内进行登录,如果在这个天数后还没有更改密码,那么账号将无法再进行登录。
8)账号失效日期,这个字段是自1970年以来的总日数。
9)保留
有效用户组与初始用户组
初始用户组:新增加一个账户时的默认用户组
有效用户组:新建立一个文件时,文件所属的用户组
可以使用groups来查看当前用户所属的用户组,在输出地消息中,第一个输出的用户组就为有效用户组。我们可以使用newgrp来改变我们的有效用户组。
账号管理:useradd、相关设置文件、passwd、usermod、userdel
Useradd username
参数:
-u : 后面接UID,是一组数字。直接给这个账号制定一个特定的UID
-g : 后面接的用户组名称就是上面提到的初始用户组。
-G: 后面接的用户组名称是这个账号还可以支持的用户组
-M: 强制,不要建立用户家目录。
-m : 强制,要建立用户家目录。
-c : 这个是/etc/passwd第5栏的说明内容。
-d : 指定某个目录称为家目录,而不要使用默认值。
-r : 建立一个系统账号,这个账号的UID会有限制(/etc/login.defs)
-s : 使用的默认shell
这个命令可能会更改的文件有:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/home/username
这个命令参考的文件有:
/etc/default/useradd
/etc/login.defs
/etc/skel/*
passwd(更改密码)
passwd [-lunxwS] username
参数:
-l : 将username账号的密码锁住(lock),在/etc/shadow内的密码栏修改。
-u: 将-l的lock解开
-n: 后面接天数,/etc/shadow内的第四栏
-x: 后面接天数,/etc/shadow内的第五栏
-w: 后面接天数,/etc/shadow内的第六栏
-S: 显示当前这个username的相关信息
注意:所有的用户均可使用passwd来修改自己的密码,但只有root可以使用该命令修改别人的密码。
usermod(用于修改账号相关的信息)
usermod [-cdegGlsuLU] username
参数:
-c : 后面接账号的说明,/etc/passwd的第5栏
-d : 后面接账号的家目录,/etc/passwd的第6栏
-e : 后面接日期,格式是YYYY-MM-DD,/etc/shadow的第8栏
-g : 后面接group name,/etc/passwd的第4栏
-G : 修改该用户所支持的用户组,修改的是/etc/group
-l :后面接账号名称,/etc/passwd的第一栏
-s :后面接shell的实际文件,如果/bin/bash
-u :后面接UID,/etc/passwd第3栏
-L :暂时冻结用户,即修改/etc/shadow的密码栏
-U :将/etc/shadow密码栏的!去掉,解冻。
Userdel(删除账户)
Userdel [-r] username
参数:
-r : 连同用户的家目录一起删除
切换用户身份(su,sudo)
su可以切换到root身份,不过需要root密码。如果直接使用su,那么MAIL/PATH/USER等环境变量还是原来登陆者的(注意HOME变量会切换),如果希望在切换身份时环境变量也跟着变,那么建议使用su -。
su [-lmc] [username]
参数:
- : 如果执行su –时,表示该用户想要变换身份成为root,且使用root的环境参数文件,如/root/.bash_profile等
-l : 后面可以接用户,例如su –l huli,这个-l的好处是,可使用变换身份者
的所有相关环境设置文件。
-m :-m与-p是一样的,表示“使用当前环境设置,而不重新读取新用户的设置文件”
-c :仅进行一次命令,-c后面接命令。
sudo的一个弊端是普通用户必须知道管理员的密码,当系统中有许多用户时,
如果每个用户都知道管理员密码,便存着者安全隐患。这个时候,可以使用
sudo,sudo是如何工作呢?
当用户执行sudo时,系统会先查找/etc/sudoers文件,判断用户是否有sudo。
如果有权限,便提示用户输入自己的密码来确认。
若密码输入成功,便可执行命令。
sudo [-u [username|#uid]] command
参数:
-u : 后面接用户账号名称,或者是UID。
手动增加用户
如果要手动增加用户,必须清楚得了解到所有相关的设置文件。
一般,手动增加用户会涉及到以下几个文件的修改:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/home/username
系统提供了一些工具来保证手动添加用户的安全性
peck
它能够检查/etc/passwd账号设置文件内的信息,以及实际的家目录是否存在
等信息,还可以比较/etc/passwd、/etc/shadow的信息是否一致,另外,如果
/etc/passwd内德数据字段错误,也会提示修改。
pwconv
这个命令的目的是将/etc/passwd内的账号与密码移到/etc/shadow中。
pwunconv
这个命令的目的是将/etc/shadow内的密码栏数据写回到/etc/passwd中。
grpconv
这个命令的目的是将/etc/group内的账号与密码移动到/etc/gshadow中
chpasswd
这个命令可以读入未加密前的密码,并且经过加密后,将加密后的密码写入
/etc/shadow中。它可以由标准输入读入数据,每个数据的格式是:
“username:password”
例:echo “skind:user!@#” | chpasswd
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。