用户管理
用户
linux的用户账号记录主要存放在/etc/passwd,每增加一个用户就会新增一行。每一行一共有7个字段,用冒号分隔
每个字段的含义:
aa:x:300:503::/home/database:/bin/bash
用户名:密码:UID:GID:注释:家目录:用户默认shell
我们来解析一下每一个字段的含义
用户名:也就账号名,有字母、数字、字符组成,不能以数字开头
密码:这里的密码会用X字符代替,为了安全,真正的密码存放在/etc/shadow里面
UID:用户ID号,每一个用户都有唯一的ID号标示,系统识别用户最终是根据UID来识别,而不是用户名,用户名转换为UID这一过程称为名称解析。Linux UID最大范围是0-65535,正常使用1-60000,管理员UID固定为0。在Centos6上,1-499为系统用户预留,普通用户使用500以上,而在Centos7上1-999为系统用户预留,普通用户使用1000以上
GID:用户基本组ID,和UID一样,都有唯一的标示
注释:自定义的备注信息
家目录:当新建用户的时候都会有一个用户自己的目录,没特别指定位置都会在/home下面,和用户名一样
shell:指定用户使用的shell,centos默认为bash shell
用户组:
用户的组信息存放在/etc/group,一共4个字段,以:号分隔
各字段的说明:
dx:x:500:aa
组名:组密码:GID:用户列表
其中组密码和/etc/passwd用的用户密码一样,为了安全,用X替代,真实密码会存放 在/etc/gshadow里面,同样是经过加密后的(SHA512加密).
用户列表:它们的附加组属于这个组
另外,关于/etc/shadow与/etc/gshadow里的特别说明
我们看一下shadow和gshadow里的格式
取其中加密后的密码字典做解析:
$6$fMwePAO/ $RsfsCCkATlci2HBi6hUN6gU7W0I/Bf4nGP2nZoo7eqovkdORJZchXClzePNpE.9OqOfRFKAUHO.jR4THFw0xJ1
由3个$分隔,$id$salt$encrypted
第一个字段id:
id为1时,采用MD5进行加密
id为5时,采用SHA256进行加密
id为6时,采用SHA512进行加密
第二个字段salt:
由于会存在某些用户使用同一个密码登陆系统,当shadow文件不小心泄漏,同样密码加密后的密文是一样的,会有被人猜到密码的可能,所以在我们每次改写密码时,都会随机生成这样一个salt.我们登录时输入的明文密码经过上述的加工后与shadow里的密码域进行字符比较,这样就算同一个密码也会有不同的密文,增加安全性。
用户和组的相关的配置文件:
/etc/passwd:用户名、UID、基本组等信息
/etc/group:组名、GID、组内包含的用户;
/etc/shadow:用户密码及相关属性;
/etc/gshadow:组的密码及相关属性;
用户和组管理的相关命令:
useradd 创建用户
命令格式:
useradd [options] LOGIN
useradd -D [options] 设置新建用户时系统的默认值
例如:useradd �CD �Cs /bin/tcsh 后,会改变/etc/default/useradd配置文件,下次新建用户的时候,默认shell就是/bin/tcsh了
-r 创建系统用户
-u UID:指定UID
-g GID:指定用户所属基本组,此组必须事先存在
-c 备注信息
-d 指定用户的主目录路径;此位置不能事先存在,否则/etc/skel相关用户配置文件将不被复制过去
-s 设定用户默认shell
-G 指定用户附加组
-M 不给用户创建家目录
例子:创建用户Oracle,所属附加组database和sql,ID号为3000,家目录为/home/database
useradd �CG database,sql �Cu 3000 �Cd /home/database
usermod:用户属性修改
usermod [OPTION]... LOGIN
-u UID
-g GID
-G 修改用户所属的附加组;同时使用-a选项是保留原有设置,追加新的上去
-s shell
-c 备注信息
-d 修改用户的家目录为新位置,用户原目录文件不会移动到新目录,但加上-m选项就可以
-l 修改登录名
-L 锁定用户
-U 解锁用户
例子:staff用户追加附加组newuser2和newuser3
usermod -G -a staffnewuser2,newuser3
userdel:删除用户
userdel[-r] USERNAME
-r:删除用户的同时删除其家目录;
例子:删除用户aa,并把家目录一起删除
userdel �Craa
passwd:给用户添加密码
passwd[OPTION] [UserName]
-l: 锁定用户
-u: 解锁用户
-nmindays: 最短使用期限;
-xmaxdays:默认为99999天;
-wwarndays:
-iinactivedays:
--stdin:从标准输出接收用户密码;
echo 'centos' | passwd --stdin centos
groupadd:创建组
groupadd [OPTIONS] GROUPNAME
-gGID: 指明组ID;
-r:创建系统组;
例子:创建组ID 为999的aa组
groupadd�Cg 999 aa
groupmod: 组属性修改
groupmod[OPTION] GROUPNAME
-nGROUP_NAME
-gGID
gpasswd:设定组密码
例子:为xx组设定组密码
gpasswd xx
groupdel:删除组
例子:删除xx组
groupdel xx
id:查看用户相关的id信息;
id [OPTION]... [USER]
-u:UID
-g:GID
-G:Groups
-n:NAME
例子:显示当前用户或aa用户信息
su:switch user, 切换用户或以其它用户的身份执行命令;
切换方式:
suUSERNAME: 非完全切换;非登录式切换
su- USERNAME或su -lUSERNAME: 完全切换;登录式切换
仅以指定用户的身份执行指定的命令:
su- USERNAME -c 'COMMAND'
例如:su - aa -c 'echo "aa"'
newgrp:切换基本组为指定的组
例子:把当前登陆用户aa切换为bb组
newgrp bb
w, who, whoami 查看当前登录用户信息
chage, chsh, chfn 用得不多,了解一下
chage:
-d: 最近一次的修改时间(第三个字段)
-E: 过期时间(第八个字段)
-I:非活动时间(第七个字段)
-m: 最短使用期限(第四个字段)
-M: 最长使用期限(第五个字段)
-W: 警告时间(第六个字段)
chsh:changeshell,修改用户的默认shell
例子:yy用户改为tcsh shell
bash-4.1$ chsh
Changing shell for yy.
密码:
New shell [/bin/bash]: /bin/tcsh
Shell changed.
chfn:changefinger,修改注释信息cat/etc/passwd