用户的介绍

Linux是多用户、多任务的系统,这就涉及到权限的问题了,像电影里的一些门禁系统只有一些大boos才能进入对吧,那此时大boos就具有操作这个门禁的权限了其他人则没有,那权限其实就是用户对相关应用的控制能力(权限隔离机制)。

这么多用户Linux是如何区分的?在Linux中使用UID(user id)来标识。当有多个用户想对某个文件拥有x同权限,那么可以给它们分配到同一个组里(逻辑容器 组就是用来包含用户的),组也同样有id标识叫GID(group id)

用户分类

  • 管理员用户 UID=0
  • 普通用户 UID=1000-65535(有些系统可以支持到四亿多用户)
  • 程序(系统)用户 UID=1-999

组分类

  • 管理员组/普通组
  • 基本组:Linux中新建用户时,没有指定隶属于的组,系统会为这个用户建立一个同名的组,作为该用户的基本组。
  • 附加组:方便给用户添加权限

我们知道计算机处理数字的能力比处理字符串快,我们刚好刚好相反,那我们在登录系统时输入的用户名会被Linux解析成UID,在系统有这一系列的数据库,像/etc/passwd中存放着用户基本信息、/etc/shadow存放用户影子口令、/etc/group存放组基本信息,下面来看看这些 文件的作用。

与用户相关的配置文件

/etc/passwd

passwd.PNG

  • 第一列:是用户名
  • 第二列:账号的口令,x代表占位符,实际上加密过了,口令保存在/etc/shadow文件中
  • 第三列:UID(用户id标识号)
  • 第四列:GID(组标识号)
  • 第五列:用户描述信息(注释说明)
  • 第六列:用户宿主目录(家目录)
  • 第七列:默认使用的shell

/etc/shadow

shadow.PNG

  • 第一列:是用户名
  • 第二列:加密后的密码((!!暂时无法登陆系统)
  • 第三列:最后一次更改密码的时间
  • 第四列:账户多少天内不可以更改密码,为0表示没有限制。
  • 第五列:表示密码到期,到达指定多少天后必须更改密码,留空表示没有限制(默认99999)。
  • 第六列:假如设置成5,那么密码到期前倒数5天会警告用户密码还剩5天即将过期,留空或0表示没有限制。
  • 第七列:密码到期过后再宽限多少天,留空表示没有限制,宽限日期一到用户不允许登录
  • 第八列:到期的时间,时间一到用户就不能够登录,留空将永远不过期 。
  • 第九列:没有作用,保留以后使用。

密码区域解释(格式:$id$salt$encrypted):它由三部分组成用$隔开第一部分为加密算法:1.MD5加密(已经被破解)、5.SHA-256加密、6.SHA-512加密,第二部分是随机序列号,第三部分是随机序列号和密码共同加密后的字符串。

加密算法:对称加密,也就是加密和解密都是使用同一把钥匙。非对称加密,加密和解密使用不同的秘钥(公钥与私钥)。单向加密,散列加密用于提取数据的特征码,常常用来校验数据的完成性,它不可逆其次是定长输出(有规定长度),比如有md5是128位定长输出(128指的是2进制,通常用16进制来表示),sha是由160位、224位、256位、384位、512位。加密后的数据只要改动就会引起结果(特征码)的巨大变化。

/etc/default/useradd

创建账户默认值的一些信息(可以修改)
useradd.PNG

  • 第一行:可以创建普通组
  • 第二行:普通用户宿主(家)目录,会在home下生成与用户同名的目录,作为用户宿主目录。
  • 第三行:是否开启用户过期停止使用权(过期的宽限期限),-1代表不启用(如果写了整数代表用户过期后还可使用x天)。
  • 第四行:设定过期时间,格式:2018027
  • 第五行:设定用户的默认shell
  • 第六行:新用户宿主目录模板目录
  • 第七行:是否为用户启用邮件通知功能

/etc/skel

用户宿主(家)目录模板目录,只对新建用户生效。在新建用户后会复制/etc/skel目录中的文件到新建用户的宿主目录中。
skel.PNG

 .bash_logout    #用户注销时执行的命令
 .bash_profile    #用户登录系统时执行的命令(用户变量)
 .bashrc    #用户登录新shell时执行的命令

/etc/login.defs

关于密码的一些限制是在这个文件配置的
MALL_DIR /var/spool/mail #用户系统邮件存放目录
PASS_MAX_DAYS 9999 #密码最长使用期限
PASS_MIN_DAYS 0 #最短使用期限(至少使用x天才可以更改密码),0代表不受限制
PASS_MIN_LEN 5 #密码最小长度
PASS-WARN_AGE 7 #密码过期前的警告时间(如果密码最长使用时间是30天,这个会在到期前7天发出警告)
UID_MIN 1000 #最小UID
UID_MAX 60000 #最大UID
SYS_UID_MIN 201 #系统用户最小UID
SYS_UID_MAX 999 #系统用户最大UID
GID_MIN 1000 #普通组最小GID
GID_MAX 60000 #普通组最大GID
SYS_GID_MIN 201 #系统组最小GID
SYS_GID_MAX 999 #系统组最大GID
CREATE_HOME yes #是否创建宿主(home)目录
UMASK 077 #权限反掩码
USERGROUPS_ENAB yes #删除用户时是否删除组
ENCRYPT_METHOD SHA512 #用户密码加密方式

用户相关操作

添加删除用户

语法:useradd [options] 用户名
下面是它的选项
-c #添加注释信息,内容用""引起来。
-d #手工指定宿主目录,默认在/home。
-e #新建用户时,设置用户默认过期时间,格式:YYYY-MM-DD。
-g #指定用户基本组(没有该选项,linux新建用户会自动创建同名组作为用户基本组。)
-G #新建用户时指定用户的附加组,附加组可以有多个用逗号隔开。
-m #创建宿主目录时,和-k一起使用。
-M #创建用户时,不为用户创建宿主目录。
-p #创建用户时,为用户设置加密的密码(不推荐使用,history可以查看历史命令。)
-r #创建系统用户(不会建立宿主目录,UID和GID使用系统用户ID,取值范围:1-999。)
-s #指定默认shell(所指定的shell需要系统支持,/etc/shells存放着系统支持的shell)
-u #自定义UID
-D #查看和改变默认的值(修改的/etc/default/useradd文件中的选项和值)
-g #修改组
-b #修改宿主目录
-f #修改过期是否停用
-e #修改过期时间
-s #修改默认shell

语法:userdel [options] user_name
-r #删除用户时删除宿主目录

设置密码

用户建立过后是没有密码的,我们需要手动设置。
语法:passwd [options] 用户名
下面是一些选项,不加选项则设置修改当前登录用户的密码。普通用户则需要验证当前密码。
-l #锁定用户(暂时会无法登陆系统),锁定会在密码开头加上!!
-u #解锁用户
-S #查看用户状态,显示/etc/shadow的字段内容
--stdin #标准输入,经常在shell脚本编程中为用户自动设置密码
-d #删除用户密码,删除后允许空密码登录(很危险)
-e #设置密码过期,在下次用户登录时会提示密码过期并重新设置密码。
-n #设置密码最少使用多少天才可更改密码,修改/etc/shadow第四列
-x #设置密码最长使用期限,设置修改/etc/shadow第五列
-w #设置密码到期前警告时间,修改/etc/shadow第六列
-i #修改过期宽限天数,修改/etc/shadow第七列

显示更改用户属性和信息

语法:usermod [options] user_name(修改的是 /etc/passwd)
-c #更改用户的comment(注释说明)
-d #更改用户宿主目录
-e #更改用户过期时间,格式:YYYY-MM-DD。
-f #修改用户过期宽限天数
-g #修改用户基本组
-G #修改用户附加组
-l #修改用户登录名,只改变shadow与passwd文件的用户名
-s #修改用户的shell(需要系统支持的shell)
-L #锁定用户
-U #解锁用户

用户更改用户的shell

语法:chsh [options] user_name
-s #后面跟上shell,
-l #显示当前系统支持的shell(/etc/shells文件)

用户基本信息(finger待补充)

显示用户基本信息
语法:finger [options] user_name

工具可能需要安装 yum -y install finger

修改用户基本信息
chfn [options] user_name
-o #修改办公室
-p #修改办公室phone
-h #修改家庭电话号码
-f #修改用户名

显示用户和组的id
不加选项则显示用户ID、所有组ID
语法:id [options] user_name
-a #忽略其他系统版本区别
-Z #显示安全上下文内容(selinux)还没学呢
-g #打印基本组id
-u #显示用户id
-G #显示所有组的id
-n #不显示组号,显示组名。与-u一起使用

修改用户密码的时间信息(/etc/shadow文件)
语法:chage [options] user_name
-l #显示用户详细密码参数
-d #修改/etc/shadow第三列,格式:YYYY-MM-DD。
-m #修改/etc/shadow第四列,跟天数
-M #修改/etc/shadow第五列,跟天数
-W #修改/etc/shadow第六列,跟天数
-I #修改/etc/shadow第七列,跟天数
-E #修改/etc/shadow第八列,格式:YYYY-MM-DD。

查看哪些用户已登录系统,并且在做什么。
语法:w

关于用户注意事项

useradd -o -u 0 aaa #-u是=指定

sudo [s|i] execute_command 是临时使用 root 权限来执行命令。
当用户(或组)没有权限执行命令或查看文件时,用这个命令可以暂时提升到 root 权限,前提是在/etc/sudoers中有添加用户名(或组名)并指定那些命令可以给用户使用(推荐用visudo编辑会自己检测语法)。这种机制是白名单,只要在清单中用户能证明自己身份就让你用。

sudoers.png

不在 sudoers 里去使用会发一封 mail 给 root,说有人干坏事儿。

not_in_sudo.png

sudo -s 直接切换到 root 来使用,但是只能是白名单中指定用户才能,它和 sudo -i 作用一致,直接用 sudo 会有一个缓存时间,时间一过必须重新使用 sudo 再次执行命令,这样就比较麻烦,不如切到 root。

直接su是切换到 root,su 和 sudo 区别在于 su 只要你能证明口令就行(只看口令不看人),哨兵正站岗抖着腿,看到有人要过哨,哨兵即刻说:天王盖地虎;他说:宝塔正河妖,哟自己人您请。

sudo 是设置一个白名单,在这个名单中的用户只要证明你是本人(看了口令又看人)就能使用,上回仅仅核实口令,这回哨兵不仅对过口号还拿着肖像(sudoers)核对了这人模样。

组管理

在前面有介绍组的分类在这里再细分一下
组分类

  • 管理员组/普通用户组/系统用户组
  • 基本组:Linux中新建用户时,没有指定隶属于的组,系统会为这个用户建立一个同名的组,作为该用户的基本组(初始化的组)。
  • 附加组:方便给用户添加权限,除了初始化的组在后面添加的都是附加组(也称附属组)。举个例子~你在一家公司运维部了入职,组长需要给你申请一个系统管理账号,敲得飞快说着:新建了账号不具备使用系统的权限,所以得把你的账号添加到运维部管理组内,这样就能够正常工作了。刚上任同事就调到了开发组借用几天,组长说:你去把他账户从运维组移出(这样这位同事的账号就不具有使用运维组机器的权限了),添加到开发组,还真舍不得借这能小子,(待续)。

与组相关的配置文件

/etc/group

group.PNG

  • 第一列:组名
  • 第二列:组密码占位符(在/etc/ghadow中保存组的密码)
  • 第三列:组ID号(GID)
  • 第四列:组成员,不会显示初始化成员(跟组同名的成员)

/etc/gshadow

gshadow.PNG

  • 第一列:组名
  • 第二列:组密码(!表示密码被锁定)
  • 第三列:组管理员(为空表示组内成员都可管理此组)
  • 第四列:组成员列表

组操作

添加组
groupadd
-g #创建组指定组ID
-r #添加系统组

删除组
groupdel user_name
组必须为空才能删除,其次删除用户时系统会删除同名基本组

修改组的属性
groupmod [options] group_name
-g #修改组ID(GID)
-n #修改组名

为组设置密码,设置组的管理员,添加组成员
gpasswd [options] group_name
不添加选项,为组添加密码
-A #为组设置管理员(为空表示组内成员都可管理此组)
-a #为组添加成员(组管理员可以操作的命令)
-M #批量添加用户,用逗号隔开
-d #删除组成员(组管理员可以操作的命令)
-r #删除组密码
-R #限制成员访问组(把组内成员权限冻结?),会组密码设置为!,我好像没有找到恢复选项,那是不是要重新设定密码?,删除密码会把!删除掉

为用户修改附加组(用户切换到其他组以其他组身份工作,那你创建文件或目录属组就成了你修改的附加组,切换时会提示你输入组密码,只在当前shell生效)
newgrp group_name
exit退出当前shell

为组添加成员。显示组成员列表
groupmems(有空再补充)

标签: none

讨论讨论讨论!