linux中的用户管理
用户管理-实质上对文件管理
1.用户及用户组
用户:是操作者在系统中的身份标识,是系统最底层的安全机制的一部分,用户在系统中以字符和文件的形式存在。
组:是逻辑概念,是用户的集合;主组=初始组,不可变 ,附加组-更多的权力。
用户的存在为了限制权限,系统上的每一个进程(运行程序)都需要特定的用户运行,每一个文件都有特定的用户拥有,访问文件或目录受用户限制。
组的存在为了归类用户便于管理权限。
2.用户在系统中的存储方式
用户在系统中就是文件中的字符串,每个字符串映射了该用户所用到的系统资源。
3.深入分析用户涉及到的配置文件及内容
配置文件 | 内容 |
---|---|
/etc/passwd | 用户信息库 - 用户名称:密码:uid:gid:说明:家目录:默认shell(默认shell的指定有那些可以查看系统中/etc/shells文件) |
/etc/shadow | 用户认证信息 |
/etc/group | 组信息库 - 组的名字:组密码:组id:组成员 |
/etc/gshadow | 组认证信息 |
/home/用户同名目录 | 默认用户家目录 |
/etc/skel/* | 用户环境配置文件模板 -用户的骨文件(骨文件:用户系统使用时的环境信息);建立用户时需要文件的全部内容 |
4.用户信息的查看
命令 | 功能 |
---|---|
id | 查看显示目前登陆账户的uid和gid及所属分组及用户名 |
id命令的常用参数:
参数 | 意义 |
---|---|
-u | 查看用户的uid |
-g | 查看用户的gid |
-G | 查看用户所在的所有组的id |
-n | 显示名字而不显示id数字 |
-r | 显示实际ID |
-help | 显示帮助 |
-version | 显示版本信息 |
5.用户身份的切换及实验环境
命令 | 功能 |
---|---|
whoami | 查看当前用户 |
logout | 退出当前用户 |
exit | 退出当前用户,快捷键ctrl+d |
gnome-session-quit --force | 注销当前用户 |
用户切换:
su 和 su - | 功能 |
---|---|
su | 只切换用户身份,不切换用户环境 |
su - | 切换用户身份及用户环境 |
注意:
每次su切换到其他用户操作之后必须退出,然后再次切换到其他用户;
执行时高级用户切换到低级用户不需要密码,而低级用户切换到高级需要密码,平级用户切换切换也需要密码。
实验环境:
实时监控用户信息: watch -n 1 “tail -n 3 /etc/passwd /etc/group;ls -l /home/”(每秒更新引号中内容的后三条信息)
6.用户及用户组的建立及删除
用户的分类:
linux中用户分三类 | 。 |
---|---|
超级用户root | UID=0,UID为0的用户就是超级用户 |
伪用户(如system user) | UID=1~499 |
普通用户login user id | UID=500~60000(1000-2*16=65530,max=60000)可以使用useradd添加的用户 |
(伪用户分为两种:
①与系统相关:比如有些伪用户是与系统的某些操作相关(比如关机,重启等等,会调用伪用户的身份)。在linux里面,任何一个进程操作都要有一个用户身份,这就需要调用伪用户。
②与程序服务相关:比如apache,启动之后也要对应一个伪用户。
伪用户的最大作用会是在系统操作或应用服务的时候调用的一个用户身份而已,在一定程度上起到一定的安全作用。
伪用户的特点:不能登陆系统、没有宿主目录。)
添加和删除用户及用户组:
命令 | 功能 |
---|---|
useradd | 添加用户(建立用户时,读取/etc/login.defs 文件内容确定规则) |
userdel | 删除用户 |
groupadd | 创建一个新的工作组(新工作组的信息将被添加到系统文件中) |
groupdel | 删除工作组 |
useradd的相关参数:
参数 | 功能 |
---|---|
-u | 指定用户的uid(注意手工添加的用户的 UID 不要小于 500) |
-g | 指定用户的gid(一般初始组名和用户名相同,在创建用户时会默认建立初始组,如果不想使用默认初始组,则可用-g指定) |
-G | 指定用户的附加组(我们把用户加入其他组,一般都使用附加组) |
-c | 指定用户的说明( /etc/passwd 文件的第五个字段,-c就是指定该字段内容的) |
-d | 指定用户的家目录 , 默认为 /home/username(家目录必须写绝对路径,而且如果需要手工指定家目录,则一定要注意权限) |
-s | 指定用户的默认shell(默认是 /bin/bash) |
-e 曰期 | 指定用户的失效曰期,格式为"YYYY-MM-DD"(即/etc/shadow文件的第八个字段) |
-o | 允许创建的用户的 UID 相同(如,执行"useradd -u -o 0 usertest"命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0) |
-m | 建立用户时强制建立用户的家目录(在建立系统用户时,该选项是默认的) |
(创建用户时,系统会按照默认值帮我们指定这些选项。)
groupadd的常用参数:
参数 | 功能 |
---|---|
-f | 如果组已经存在则成功退出 |
-g | 指定组id |
-h | 显示此帮助信息 |
-K | 不使用 /etc/login.defs 中的默认值 |
-o | 允许创建有重复 GID 的组 |
-p | 为新组使用此加密过的密码 |
-r | 创建一个系统账户(组id号低于499) |
-R | –root chroot dir,chroot 到的目录 |
7.用户及用户组的信息管理
修改用户组的相关信息:
命令 | groupmod |
---|
命令的参数:
参数 | 功能 |
---|---|
-g | 修改组ID |
-n | 修改组名 |
修改用户的相关信息:
命令 | usermod |
---|
命令的参数:
参数 | 功能 |
---|---|
-l | 修改用户名称 |
-u | 修改用户的 uid |
-g | 修改用户的 gid |
-G | 更换新的附加组 |
-aG | 追加用户的附加组 |
-c | 修改用户的说明 |
-md | 修改用户的家目录 , 默认为 /home/username |
-s | 修改用户的 shell 类型 |
-L | 锁定用户帐号 |
-U | 解锁用户帐号 |
-l | 新的登录名称 |
-p | –password PASSWORD,将加密过的密码PASSWORD设为新密码 |
-o | –non-unique,允许使用重复的(非唯一的) UID |
-c | –comment 注释,GECOS 字段的新值 |
-e | –expiredate EXPIRE_DATE,设定帐户过期的日期为 EXPIRE_DATE |
-f | –inactive INACTIVE,过期 INACTIVE 天数后,设定密码为失效状态,并不从其它组中删除此用户 |
-R | –root CHROOT_DIR,chroot 到的目录 |
-Z | –selinux-user SEUSER,用户账户的新 SELinux 用户映射 |
-h | 显示此帮助信息并推出 |
8.用户认证文件的内容分析
/etc/shadow 用户认证信息文件
1:2:3:4:5:6:7:8:9
1.用户名称
2.用户密码(用户的加密字符串,如果出现!则用户被冻结)
3.密码已经使用时间,即密码最后一次被更改的时间(此时间计算是从1970-01-01开始计算的累计天数)
4.密码最短有效期
5.密码最长有效期(用户必须在此有效期内修改密码,否则会被冻结)
6.密码到期前警告(在过期前指定天数内会发送警告信息给用户)
7.密码非活跃天数(默认为空,如果设定,表示密码最长有效期限过后还能使用的天数)
8.密码到期日,表示账户一定会被冻结的时间点
9.用户自定义列,目前尚未启用
9.用户认证管理
passwd命令:
passwd作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,前提是没有被root用户锁定;
如果root用户运行passwd ,可以设置或修改任何用户的密码;
passwd命令后面不接任何参数或用户名,则表示修改当前用户的密码。
passwd命令的常用参数:
参数 | 功能 |
---|---|
-l | 锁定用户(被锁定的用户无权更改其密码,仅能通过root权限操作) |
-u | 解除锁定 |
-d | 删除用户密码,仅能以root权限操作 |
-S | 查询用户的密码状态(即/etc/shadow 文件中的内容),仅能root用户操作 |
-n | 两次密码修改的最小天数,后面接数字,仅能root权限操作 |
-x | 两次密码修正的最大天数,后面接数字,仅能root权限操作 |
-w | 在距多少天提醒用户修改密码,仅能root权限操作 |
-i | 修改密码非活跃天数(在密码过期后多少天,用户被禁掉),仅能以root操作 |
–stdin | 可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用 |
-f | 强制操作,仅root权限才能操作 |
-k | 保留即将过期的用户在期满后能仍能使用 |
chage命令:
chage语法格式:
chage [-l列出用户信息] [-m 最小天数] [-M 最大天数] [-W 警告] [-I 失效日] [-E 过期日] [-d 最后日] 用户
chage命令的常用参数:
参数 | 功能 |
---|---|
-l | 列出指定用户当前的密码相关信息 |
-d | 指定从1970年1月1日起,密码被改变的天数 |
-E | 指定帐号被锁的日期(日期格式YYYY-MM-DD,若不用日期,也可以使用自1970年1月1日后经过的天数) |
-i | 指定密码过期多少天后用户被封(如果值为0,帐号在密码过期后就不会被锁) |
-m | 密码可更改的最小天数(为零时代表任何时候都可以更改密码) |
-M | 指定密码有效的最多天数(当该选项指定的天数加上-d选项指定的天数小于当前的日期时,用户在使用该帐号前就必须改变密码) |
-W | 指定密码过期前要警告用户的天数 |
类似命令对照:
功能 | 命令 |
---|---|
修改用户密码最短有效期–westos用户在一天内不能改变密码 | passwd -n 1 westos或chage -m 1 westos |
修改用户密码最长有效期–设定westos在30天内必须修改密码 | passwd -x 30 westos或chage -M 40 westos |
修改密码警告期限–密码过期前两天有警告输出 | passwd -w 2 westos或chage -W 2 westos |
修改用户非活跃天数–密码过期后仍可登陆的天数 | passwd -i 1 westos或chage -I 1 westos |
修改用户到期日-westos用户在2018-11-11会被冻结 | chage -E 2018-11-11 westos |
10.用户授权
sudo:能把某些超级权限针对性的下放 , 并且不需要普通用户知道 root 密码 , 所以 sudo 相对于权限无限制性的 su 来说 , 还是比较安全的。
sudo 执行命令的流程是当前用户切换到 root,然后以 root 身份执行命令 , 执行完成后 , 直接退回到当前用户 ; 而这些的前提是要通过sudo 的配置文件 /etc/sudoers 来进行授权。
配置文件语法及测试方式:
hostname 查询主机名
下放方式–visudo,在100行左右添加命令,格式如下:
用户 主机名称 =(得到的用户身份) 命令
让tom用户可以在localhost主机以root用户身份执行useradd命令:
tom localhost=(root) /usr/sbin/useradd
让tom用户可以在localhost主机以root用户身份 免密执行userdel命令:
tom localhost=(root) NOPASSWD: /usr/sbin/userdel
同时获取这两项权限:
tom localhost(root) NOPASSWD: /usr/sbin/userdel,/usr/sbin/useradd