linux设计账户的算法,linux中的用户与权限

Linux是一款支持多用户多进程的操作系统,为了实现对系统中资源的有效管理及分配,使用了登陆账户与对应账户权限的方式来限制每一个登陆Linux系统的使用者。

使用者在登陆Linux系统时,会先对使用者进行身份认证(authentication),通过系统账号和密码来实现。用户登陆成功时,则会按照之前设定好的账户权限为使用者授权,规定了其可以访问、使用系统中的哪些资源(authorization)。同时,为了防止已登陆的使用者恶意在系统上操作,影响其他用户的利益,还需要对所有登陆用户进行使用行为的监控(audition)。

Linux对系统中的所有用户都可以分别设定不同的权限,但当系统上的用户过多时,一个一个的操作显然是一件非常麻烦的事。我们可以将多个用户加入一个用户组中,统一对用户组设定权限来为组中的每一个用户授权。

但是以上说的都是一些逻辑的、便于人类理解的信息,但是计算机本身是无法理解用户名的,用户名对它来讲只是一段字符串。如何让计算机区分不同名字的用户?这时要引用uid的概念,每个用户通常情况下会对应一个独一无二的uid,方便计算机对这个用户进行识别;同理计算机也要使用gid来分辨不同的组。

======================================================================用户:

用户可以分为大致两类

管理员

普通用户;而普通用户中又可以分为两类

系统用户

登陆用户

用户的uid在计算机中用16位(bit)的二进制来表示,其中管理员的uid位0,系统用户的uid在红帽6,centOS6上位1~499,登陆用户为500-60000;而在红帽7,centOS7上分别为1~999,1000-60000.

系统是如何把用户名称与uid关联起来的呢?是通过名称解析库文件/etc/passwd进行解析

用户组分类方式比较复杂,通常有三种分组的方式

第一种:使用和用户近似的方式分组,即

管理员组

普通用户组

系统用户组

登陆用户组

第二种:

用户的基本组:任何一个用户都至少有、且只能有一个基本组。如果管理员不指定,通常在创建用户时系统会顺带创建一个和用户名字一样的基本组。

用户的附加组:用户除了基本组之外,还可以同时属于多个附加组

第三种:

用户的私有组:组名同用户名,并且只包含了一个用户

用户的公共组:组内包含了多个用户

组的标示gid也是用16位二进制数来表示,标识范围和用户uid相同,请参考上面uid的标识范围。组的名称解析库文件则是/etc/group.

=============================================================

早先用户的密码信息也是一并明文存储在/etc/passwd这个文件中的,但是这样的设计很不安全,所以,现在passwd中原来存放密码的位置只留了一个占位符“x”,而密码实际位置在/etc/shadow下,组的密码文件为/etc/gshadow。并且,这些密码都是单向加密后存放的,问题来了,什么是单向加密?(下面的内容略跑题,可跳至下一节继续浏览)

常用的加密方式通常有三种:

对称加密:加密与解密使用同一个密钥

非对称加密:加密和解密使用的是一对儿密钥,公钥(public key)与私钥(private key)

单向加密:使用某种算法将密码换算成一种数据特征码,只能加密,无法解密。

数据特征码有以下两个特点:

定长输出:无论原文件有多少个字符,输出的特征码长度都一致

雪崩效应:只要源文件做出细微的改变,特征码将会天翻地覆的改变,防止有人用                              特征码变化推敲源文件内容。

常用的单向机密方式有MD5 (message digest) 算法,可以输出128位的特征码,当然,特征码位数越多,源文件就越安全,所以centOS6以上版本已经默认使用sha(secure hash algorithm)算法,可以支持到512位。

=============================================================

下面来看一下/etc/passwd这个文件的内容 用:一共分隔了7列

3378619.htm

第一列是当前系统上所有用户的用户名

第二列是密码占位符

第三列是用户uid

第四列是用户基本组的gid

第五列是用户的一些备注、注释信息

第六列是用户的家目录路径

第七列是用户登陆账户时默认使用的shell

Linux会给每个新用户创建一个同名家目录,默认在/home下

接下来是/etc/shadow

3378619.htm

第一列是用户名

第二列是加密的特征码字段

第三列是用户上一次修改密码到今天的天数,默认从1970.1.1开始计算

第四列是用户密码最短使用天数:如果天数不够,用户自己改不了密码

第五列是用户密码最长使用天数:用户密码最多只能用这么多天。

第六列是用户密码的警告天数:密码在过期的提前几天开始警告用户

第七列是用户密码非活动天数:密码过期之后还能最多使用几天,到了之后会被禁用

第八列是用户账户过期天数:如果设置为30,则30天后账号会自动禁用

这其中比较复杂的是第二列,分三个字段,以$分割:

第一个字段是密码加密使用的算法,1代表md5,而6则是sha512,顺便介绍一下Linux中自带的算法命令:

md5sum   1

sha1sum   2

sha224sum   3

sha256sum    4

sha384sum    5

sha512sum    6

可以使用 echo “123456” | sha512sum    这样的命令来自行计算校验码。

第二个字段是salt,也就是杂质的意思。如果系统中某两个用户密码恰好一样,则他们的校验码也会一模一样,这样不安全,所以内核在生成校验码之前,会在密码前随机加上不同的salt,以生成不同的校验码。

第三个字段是密码加完salt字段后计算出来的校验码本身

然后请看/etc/group

3378619.htm

第一列是组名

第二列是密码占位符

第三列是gid

第四列是将这个组作为附加组的用户

接下来是/etc/gshadow

3378619.htm

第一列是组名

第二列是组密码

第三列是组管理者账户

第四列是将这个组作为附加组的用户

=============================================================

权限

Linux下,所有的文件都有自己的属主和属组,基本上谁创建了这个文件,谁就是这个文件的属主,而他所在的基本组则成了这个文件的属组。

一个文件的基本权限是这样的"rwxr-xr--",其中前三位是这个文件属主(user)的权限,其中r为只读,w为可写,x为可执行。中间三位是组(group)的权限,最后三位为(other)的权限。

对于目录而言

r读权限意味着可以使用ls查看该目录下的文件,但不能使用ls -l

w写权限意味着用户可以随意在目录下创建删除文件

x执行权限意味着用户可以用cd命令进入该目录

如果用户hadoop使用ls命令访问了/etc/fstab,如何判断用户是属主,还是属组,还是other呢?

linux系统下,所有进程是用发起者的身份运行,当用户使用ls命令时,会调用/bin/ls这个程序,接着启动一个“ls进程”,这个进程使用的是 hadoop的身份去访问该文件,这时文件会把用户先检查这个用户是不是自己的属主,如果不是,看看用户所在的组是不是自己的属组,如果还不是,则用other权限匹配。(所以linux下会创建很多普通账户来启用那些系统服务,这些服务也都是进程,这些普通账户即为系统账户,因为它们并不需要登陆系统)

=============================================================

用户、组还有权限管理的相关命令:

useradd创建用户

-u创建用户时指定uid

-g创建用户时指定基本组

-G指定用户的附加组,可是多个,用逗号隔开

-c指定用户的备注信息

-d指定用户的家目录路径,默认以/etc/skel目录做为模板复制,如果目标路径已存在,则不会复制该模板

-s指定用户的登陆系统的默认shall

-r创建系统用户

-M不为用户添加家目录

-D显示创建用户的一些配置信息并修改,结果将保存于/etc/default/useradd文件中,也可以直接编辑这个文件来修改

usermod修改用户属性

-c修改备注信息

-u修改uid

-g修改基本组

-G修改附加组,注意这里会覆盖原来的附加组

-aG追加修改用户附加组,不会覆盖原来的组

-d修改用户的家目录路径,原来家目录的文件不会被移动

-md修改用户家目录的路径,并复制原来家目录的文件到新家

-l修改用户名

-L锁定用户密码;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值