您的位置:首页 > 其它

用户和组的管理

2017-11-01 20:05 127 查看
用户与组的管理,主要包括三方面:用户账户,组账户,权限分配。
我们先从用户账户开始来讲。不论你用Windows还是Linux都需要用到用户账户,为什么需要用到用户账户呢?主要的方面为了保护自己账户的安全,咱们举个例子,如果你的计算机没有设置账号,任何人都能够登陆你的计算机,要是有人登录上去了,你的计算机可能中木马或者是你的一些信息遭到别人的监控。所以在用户登陆的时候,需要得到认证才能够登陆,比如现在常用的账号密码登陆。最早的时候是由Cisco开发并且建立了AAA认证体系:
Authentication:认证,核实使用者身份;
Authorization:授权,对已经核实身份的使用者进行资源分配;
Accounting:审计,监管资源被使用的情况;
这种认证体系如今主要是针对像Linux还有Windows这样多任务,多用户的操作系统设计的。(Windows算是仿多用户系统,你不能够在Windows中同时登陆多个用户)当然了。在Linux或者Windows系统中,用户是需要通过运行相关的程序才能够实现资源使用和完成相关任务的。

在Linux系统中,如果你通过某进程访问了当前用户的一个文件,你可以访问;如果你切换为另一个用户,你再通过相同的进程访问之前访问的文件时,你可能是访问不了的。原因是在这个文件上设置了一套安全上下文策略。也就是进程当进程试图访问资源的时候,安全上下文会比对进程的所有者和资源的所有者之间的关系:
首先,查看进程的所有者是否和资源的所有者为同一用户,如果是,就按照所有者拥有的权限来使用资源;
如果不是,则判断进程的所有者是否属于该资源所属组的成员;如果是,按照所属组的权限来使用资源;
如果不是,就按照最为普通的其他用户的权限来使用资源;
因此通过上面所说,我们可以给用户账户一个简单的定义:实现操作者和计算机交互式操作的基础,是操作者的身份在满足了验证条件之后的计算机系统中的映射。无论是在什么系统中,用户账户是有分类的:
超级用户(管理员):root(Windows中是Administrator)
普通用户:
系统用户(非登录用户):
为了保证安全,往往会让某些进程或服务必须以非管理员的用户身份运行;这类非管理员用户,称为系统用户;此类用户一般不允许登录到系统的;
登录用户
能够通过登录行为验证用户身份进而获得资源访问权限并可以对资源进行操作的用户,可以称为登录用户;

那么,用户账户有这么多分类,在计算机系统中是如何被分辨的呢?或者说它们是如何被标识的呢?在Linux系统中,它主要是通过用户登录名称(为操作者提供的简单易记的字符串标识)以及用户的数字ID(UID)(为计算机操作系统提供的标准的数字标识符号,范围0~2^32-1)。例如:
超级用户:
用户名:root
UID:0
普通用户:
系统用户:
UID范围:
CentOS 6-:1~499
CentOS 7+:1~999
登录用户
UID范围:
CentOS 6-:500+
CentOS 7+:1000+
注意:60000+的UID通常需要用户自定义标识;
在系统中用户账户分类这么多,那系统是如何识别出你登录的是这个账户呢?所以这里就需要进行名称解析:用户名<-->UID。也就是将用户名解析成系统能够识别的UID形式。主要是通过两个库来完成的:
用户名解析库:/etc/passwd
操作系统中的认证组件通过解析库实现认证机制,即验证登录用户是否为已经存在的用户;
用户的认证库:/etc/shadow
通过此前的解析库认定用户是存在的,再经过认证库的认证,来证明登录用户就是其声明的用户;
这些是用户名的解析、认证,其中默认的认证机制是密码机制;说道密码,我们不得不再啰嗦一下它的复杂性要求了:
1.尽量避免使用有规律的或者来源于字典中的字符串作为密码;
2.密码要足够长,一般不得少于6个字符;
3.密码要足够复杂,其中应该至少包括大写字母,小写字母,数字及其他符号中的三类;
4.不定期更换,每隔一段时间进行密码更换;
密码的复杂性对于保护用户的信息安全是很必要的,所以当你建立了一个账户时,还是尽量达到这些要求。

另一方面,在Linux中,密码是要经过单项加密算法处理保存到认证库中的。其中加密密码的算法主要有两种:MD(消息摘要算法)、SHA(安全的哈希算法)。其中主要用到的有MD5(Message Digest Version第5版)、sha1(160加密输出)、sha224、sha256、sha384、sha512(默认的加密算法)。当然了,密码不可能这么简单的就存储到认证库中,因为它太容易被破解了,因此还需要salt(通过随机算法计算得到的随机数),那么salt是怎么生成的呢?
/dev/random:
仅仅从熵池中返回随机数;如果熵池中随机数耗尽,进程会被阻塞;
/dev/urandom:
首先试图从熵池中返回随机数,如果熵池中随机数耗尽,则利用伪随机数生成器生成伪随机数;

所以经过上面的一系列操作,密码在认证库中的最终形态是:算法+salt+加密字符串;
算法:$1~$6
salt:$随机字符串
加密字符串:$单向加密的结果 算法:$1~$6

用户账户的一些内容就如上面所说,我们再来说一说组账户。组账户的内容和用户账户的内容是类似的,所以我们就来简单的说一下。我们先来给组账户一个定义:将具有某些相同或相似属性的用户联系在一起以便可以集中授权的容器。
组账户分类:
超级用户组
普通用户组
系统用户组
登录用户组
组账户的标识方法:
组账户名称:
组账户ID(GID):
超级用户组:0
系统用户组:
CentOS 6-:1~499
CentOS 7+:1~999
登录用户组:
CentOS 6-:500+
CentOS 7+:1000+
组名解析:
解析库:/etc/group
认证库:/etc/gshadow
组也需要使用密码加密保护,与上面用户账户所说的加密操作类似。

从上面所说,我们能够看出来,用户账户和组账户它们的内容是类似的,那么它们之间有什么关系呢?
在Linux中,每个用户必须至少属于一个组;
用户账户的GID标识被称为用户的主要组(基本组),Primary Group;每个用户必须要有主要组,而且只能有一个;
在主要组的基础之上,用户可以与其他的组账户存在逻辑关系,此类组称为用户的附加组(附属组,额外组),Addtion Group;对于用户来说,此类组可以没有,也可以有多个;

接下来我们来说一说与用户和组相关的命令:
1.groupadd
groupadd - 创建一个新组
格式:groupadd [Options...] group
常用选项:
-g GID:指定要创建的组的GID;
-r:将组创建为系统组,此时应该保证GID在系统组范围内;
[root@localhost qhdlink]# groupadd -g 808 -r mydisk
[root@localhost qhdlink]# tail -1 /etc/group
mydisk:x:808:


2.groupdel
groupdel - 删除一个组
格式:groupdel [Options...] group

注意:如果某个组是某个用户的主要组,则该组不能删除;
[root@localhost ~]# groupadd qqq
[root@localhost ~]# tail -1 /etc/group
qqq:x:5002:
[root@localhost ~]# groupdel qqq
[root@localhost ~]# tail -1 /etc/group
mydisk:x:808:


3.groupmod
groupmod - modify a group definition on the system
格式: groupmod [Options...] group
常用选项:
-g GID:修改指定组的GID;
-n GROUP_NAME:修改指定组的组帐户名称;

[root@localhost ~]# tail -1 /etc/group
qqq:x:5002:
[root@localhost ~]# groupmod -g 800 -n aaa qqq
[root@localhost ~]# tail -1 /etc/group
aaa:x:800:


4.useradd

useradd - 创建一个新用户或更新默认新用户信息
格式:useradd [选项] username
useradd -D [选项]
常用选项:

-c, --commentCOMMENT:为用户添加注释信息;
-d, --homeHOME_DIR:为用户指定家目录的路径;此目录不能事先存在;
-e, --expiredateEXPIRE_DATE:用户密码的过期的绝对时间;如:2018/01/01
-f, --inactiveINACTIVE:为用户指定密码使用达到最大时间之后的宽限期;
-g, --gidGROUP:为用户指明GID;如果不写此选项,系统会创建一个与用户名相同的组并且将之设置为诶此用户的主要组;
-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:为用户添加附加组;
-m, --create-home:必须为用户创建家目录;
-M:不为用户创建家目录;在创建系统用户时常用此选项;
-r, --system:创建系统用户;
-s, --shellSHELL:为用户指定默认的shell;
-u, --uidUID:为用户指定UID;

[root@localhost ~]# useradd test -c "This is a file" -d /home -e 2018/01/01 -f 5 -g 800 -G centos -r -s /bin/csh -u 800
[root@localhost ~]# id test
uid=800(test) gid=800(aaa) 组=800(aaa),1001(centos)
[root@localhost ~]# tail -1 /etc/passwd
test:x:800:800:This is a file:/home:/bin/csh


5.userdel
userdel - 删除用户账户和相关文件
格式:userdel [选项] username
常用选项:
-r, --remove:删除用户的同时删除用户的家目录及用户邮箱文件;
[root@localhost ~]# userdel sss
[root@localhost ~]# id sss
id: sss: no such user
6.usermod
usermod - 修改一个用户账户
格式:usermod [选项] username
常用选项:
-a,
与-G使用,不会让新添加的组把之前的组覆盖掉。
-c, --commentCOMMENT:修改用户的注释信息;
-d, --homeHOME_DIR:修改用户的家目录;
-e, --expiredateEXPIRE_DATE:修改用户密码过期的绝对日期;
-f, --inactiveINACTIVE:修改用户密码过期之后的宽限期;
-g, --gidGROUP:修改用户的主要组(GID);
-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用户的附加组为此列表中的组,如果同时使用了-a选项,则保留原有的附加组,将此列表中的组追加至用户的附加组列表;
-l, --loginNEW_LOGIN:修改用户的登录名;
-s, --shellSHELL:修改用户的登录shell;
-u, --uidUID:修改用户的UID;
-L, --lock:锁定用户;
-U, --unlock:解锁被usermod -L锁定的用户;

[root@localhost ~]# id test
uid=800(test) gid=800(aaa) 组=800(aaa),1001(centos)
[root@localhost ~]# tail -1 /etc/passwd
test:x:800:800:This is a file:/home:/bin/csh
[root@localhost ~]# usermod -aG root test -c "aaaa" -g 808 -s /bin/bash -u 799
[root@localhost ~]# id test
uid=799(test) gid=808(mydisk) 组=808(mydisk),0(root),1001(centos)
[root@localhost ~]# tail -2 /etc/passwd | head -1
test:x:799:808:aaaa:/home:/bin/bash


7.passwd
passwd - update user's authentication tokens
格式:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
常用选项:
-l, --lock:锁定用户;
-u, --unlock:解锁用户;
--stdin:通过标准输入接受密码,可以用于管道;
-d, --delete:删除用户的密码,也可以用于解除用户锁定;
-e, --expire:直接设置用户密码过期;
-n, --minimum DAYS:用户密码的最短使用时长;默认值为0;
-x, --maximum DAYS:用户密码的最长使用时长;默认值为99999;
-w, --warning DAYS:用户密码过期之前多少天开始发送警告信息;
-i, --inactive DAYS:用户密码过期之后的宽限期;
-S, --status:查看用户密码的状态信息;
[root@localhost ~]# echo 123456 | passwd --stdin test
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# passwd -i 5 test
调整用户密码老化数据test。
passwd: 操作成功
[root@localhost ~]# passwd -e  test
正在终止用户 test 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -n 6000 test
调整用户密码老化数据test。
passwd: 操作成功
[root@localhost ~]# passwd -w 7  test
调整用户密码老化数据test。
passwd: 操作成功
[root@localhost ~]# passwd -S test
test PS 1970-01-01 6000 7000 7 5 (密码已设置,使用 SHA512 算法。)[root@localhost ~]


8.chage
chage - 更改用户密码过期信息
格式:chage [选项] username
常用选项:
-d, --lastdayLAST_DAY
指定密码最后修改日期
-E, --expiredateEXPIRE_DATE
密码到期的日期,过了这天,此账号将不可用。0表示马上过期,-1表示永不过期。
-I, --inactiveINACTIVE
密码过期后,锁定账号的天数
-l, --list
列出用户以及密码的有效期
-m, --mindaysMIN_DAYS
密码可以更改的最小天数。为零代表任何时候都可以更改密码。
-M, --maxdaysMAX_DAYS
密码保持有效的最大天数。
-W, --warndaysWARN_DAYS
密码过期前,提前收到警告信息的天数。
[root@localhost ~]# chage -M 60 -m 7 -W 7 aaa
You have new mail in /var/spool/mail/root
[root@localhost ~]# chage -l aaa
Last password change : Mar 26, 2015
Password expires : May 25, 2015
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 60
Number of days of warning before password expires : 7


9.chsh
chsh - change your login shell == usermod -s
格式:chsh [-s shell] [-l] [-u] [-v] [username]
[root@localhost ~]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh


10.finger
finger — user information lookup program
格式:finger [-lmsp] [user ...] [user@host ...]

11.id
id - print real and effective user and group IDs
格式:id [OPTION]... [USER]
常用选项:
-u:显示用户的有效UID;
-g:显示用户的有效GID;
-n:显示名称;

[root@localhost ~]# id test
uid=799(test) gid=808(mydisk) 组=808(mydisk),0(root),1001(centos)


12.su
su - run a command with substitute user and group ID
格式:su [options...] [-] [user [args...]]
常用选项:
-, -l, --login:以后面的用户身份登录到系统;
-c "COMMAND":以前面指定的用户身份运行COMMAND;不进行身份登录切换;

[root@localhost ~]# su - qhdlink
上一次登录:三 11月  1 17:03:58 CST 2017pts/0 上
[qhdlink@localhost ~]$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息