Linux系统之用户和组

Linux系统之用户和组

1、什么是用户

用户:资源获取标识符,资源分配,安全权限模型的核心要素之一

2、没有用户,操作系统可否正常执行?

答案是肯定的

在Linux系统上,用户管理是基于用户名和密码的方式进行资源的分配,

Username/UID分为以下类别:

    管理员:root, 0
    普通用户:1-65535
        系统用户:1-499(CENTOS6), 1-999
            对守护进程获取资源进行权限分配
        登录用户:500(CENTOS6)+, 1000+
            交互式登录

Linux组:Groupname/GID

    管理员组:root, 0
    普通组:
        系统组:1-499, 1-999
        普通组:500+, 1000+

Linux组类别

    用户的主要组(主组):
        用户必须属于一个且只有一个主组
        组名同用户名,且仅包含一个用户:私有组
    用户的附加组(辅助组):
        一个用户可以属于零个或多个辅助组

用户在登录时要进行认证,认证成功后要进行资源的分配既授权,还要对资源的使用进行审计,就是我们所熟悉的3A

Authentication 认证
Authorization 授权
Accounting|Audition 审计

进程的安全上下文

进程对文件的访问权限应用模型
    进程的属主(发起者)与文件的属主是否相同;如果相同;则应用属主权限;
    否则,则检查进程的属组(发起者)是否属于文件的属组;如果是,则应用属组权限;
    否则,就只能应用other的权限;

下面来介绍下Linux用户和组的主要配置文件

1、/etc/passwd:用户及其属性信息(名称、UID、主组ID等)

Linux系统之用户和组

从图片上我们可以看到该文件是以":"为分隔符,分为的7个字段。如何知道每个字段的意思呢?

尝试使用man帮助文档:

首先确定该帮助文档在man的那个分段中

[root@centos7 ~]# whatis passwd
passwd (5)   - password file
passwd (1)   - update user's authentication tokens
sslpasswd (1ssl) - compute password hashes

由以上信息可知我们能够使用如下命令查看该文件7个的字段的意思:

[root@centos7 ~]# man 5 passwd

Linux系统之用户和组

man文档已经解释的很详细了,这里我在简单说明一下:

用户名:密码占位符:UID:GID:用户备注信息(多个以,隔开):家目录:默认shell

2、/etc/shadow

首先还是用whatis命令查看简要命令帮助

[root@centos7 ~]# whatis shadow
shadow (3)           - encrypted password file routines
shadow (5)           - shadowed password file

查看man文档

[root@centos7 ~]# man 5 shadow

我可以看到该配置文件的格式和/etc/passwd格式一样,都是用":"分割开的不同字段

 login name:登录名
 encrypted password:加密密码
 date of last password change:最近一次的密码修改时间(距离1970-01-01的时间)
 minimum password age:密码最短使用期限
 maximum password age:密码最长使用期限
 password warning period:警告区间
 password inactivity period:非活动区间
 account expiration date:账号过期期限
 reserved field:预留段

在这里我们简单介绍下加密解密机制

加密方法: 
    对称加密:如果加密、解密使用相同的密码称之为对称加密 DES,3DES,AES 
    非对称加密:DSA,RSA 
    单向加密:雪崩效应,定长输出,不可逆

这里我们着重开下/etc/shadow的第二个字段

格式如下:

$6$abcesd$fkdlagjdkalghio3qu4389qjtrkiejgr 
$6$xyzm./$878956ukijotrjiytoeutyvimyeuiore

$为分隔符

6表示加密算法 查看系统上支持的加密算法可以使用如下方法:

[root@centos7 ~]# sha   //输入sha,按两次TAB自动补全    
sha1sum    sha224sum  sha256sum  sha384sum  sha512sum 
以上分别对应2-6  即6为sha512算法
其中1对应的为md5算法

使用如下命令可以改变默认的加密算法:

[root@centos7 ~]# authconfig --passalgo=sha512(可以更改) --update

abce或xyzm:表示salt

最后一部分表示:加密后的密码

即该字段的整体意义为:$加密算法$8位盐$乱码

一个小的知识点

密码的复杂性策略

使用数字、大写字母、小写字母及特殊字符中至少3种

足够长

使用随机密码(没有规律的、非脑残的密码)

定期更换,不要使用最近曾经使用过的面

3、/etc/group

[root@centos7 ~]# whatis group
group (5)            - user group file

[root@centos7 ~]# man 5 group

Linux系统之用户和组

4、/etc/gshadow

[root@centos7 ~]# man gshadow

group name:It must be a valid group name, which exist on the system.
encrypted password
administrators
       It must be a comma-separated list of user names.
       Administrators can change the password or the members of the group.
       Administrators also have the same permissions as the members (see below).
 members
       It must be a comma-separated list of user names.
       Members can access the group without being prompted for a password.
       You should use the same list of users as in /etc/group.

对于Linux下的用户和组所涉及到的基本文件已经介绍完了,下面我们来介绍常用命令:

vipw和vigr:相当于用vim打开上述的四个文件进行编辑

[root@centos7 ~]# man vipw
[root@centos7 ~]# vipw /etc/passwd
[root@centos7 ~]# vipw -s /etc/shadow
[root@centos7 ~]# man vigr
[root@centos7 ~]# vigr /etc/group
[root@centos7 ~]# vigr -s /etc/gshadow

pwck和grpck:检查上述文件的正确性

[root@centos7 ~]# pwck
user 'ftp': directory '/var/ftp' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'saslauth': directory '/run/saslauthd' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'gnome-initial-setup': directory '/run/gnome-initial-setup/' does not exist
pwck: no changes
[root@centos7 ~]# grpck

useradd[options] LOGIN
    -u UID: [UID_MIN, UID_MAX]定义在/etc/login.defs
    -o 配合-u 选项,不检查UID的唯一性
    -g GID:指明用户所属基本组,可为组名,也可以GID
    -c "COMMENT":用户的注释信息
    -d HOME_DIR:以指定的路径(不存在)为家目录
    -s SHELL: 指明用户的默认shell程序
     可用列表在/etc/shells文件中
    -G GROUP1[,GROUP2,...]:为用户指明附加组,组必须事先存在
    -N 不创建私用组做主组,使用users组做主组
    -r: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000

默认值设定:/etc/default/useradd文件中

    显示或更改默认设置:
    useradd-D
    useradd–D -s SHELL
[root@centos7 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@centos7 ~]# man useradd
-b, --base-dir BASE_DIR
-e, --expiredate EXPIRE_DATE
-f, --inactive INACTIVE
-g, --gid GROUP
-s, --shell SHELL

usermod[OPTION] login

-u UID: 新UID
-g GID: 新基本组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,
                 则要同时使用- a选项,表示append;
-s SHELL:新的默认SHELL;
-c 'COMMENT':新的注释信息;
-d HOME: 新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;
       若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加!
-U: unlock指定用户,将/etc/shadow 密码栏的! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期;
-f INACTIVE: 设定非活动期限;

userdel[OPTION]... login
   -r: 删除用户家目录;

passwd[OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
passwd: 修改自己的密码;
常用选项:
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限;
--stdin:从标准输入接收用户密码;
echo "PASSWORD" | passwd--stdinUSERNAME

chage[OPTION]... LOGIN
-d LAST_DAY
-E, --expiredateEXPIRE_DATE
-I, --inactive INACTIVE
-m, --mindaysMIN_DAYS
-M, --maxdaysMAX_DAYS
-W, --warndaysWARN_DAYS
–l,显示密码策略
下一次登录强制重设密码
    chage -d 0 tom
    chage -m 0 –M 42 –W 14 –I 7 tom
    chage -E 2016-09-10 tom

groupadd[OPTION]... group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组;
    CentOS 6: ID<500
    CentOS 7: ID<1000

组属性修改:groupmod
groupmod[OPTION]... group
-n group_name: 新名字
-g GID: 新的GID;


组删除:groupdel

    groupdelGROUP


组密码:gpasswd
gpasswd[OPTION] GROUP
-a user: 将user添加至指定组中;
-d user: 从指定组中移除用户user
-A user1,user2,...: 设置有管理权限的用户列表


newgrp命令:临时切换基本组;
   如果用户本不属于此组,则需要组密码
    临时切换指定的组为基本组

groupmems[options] [action]
options:
-g, --group groupname更改为指定组(只有root)
Actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员
-l, --list 显示组成员列表

groups [OPTION].[USERNAME]… 查看用户所属组列表

[root@centos7 ~]# groups user1
user1 : user1 root new_mygrp
        主组  附加组

批量添加用户及其密码

user.txt
user1:x:10001:10001::/testdir/user1:/bin/csh
user2:x:10002:10002::/testdir/user2:/bin/tcsh
user3:x:10003:10003::/testdir/user3:/bin/bash

[root@centos7 ~]# newusers user.txt
[root@centos7 ~]# tail -3 /etc/passwd
user1:x:10001:10001::/testdir/user1:/bin/csh
user2:x:10002:10002::/testdir/user2:/bin/tcsh
user3:x:10003:10003::/testdir/user3:/bin/bash

passwd.txt
user1:123456
user2:redhat
user3:centos

[root@centos7 ~]# cat passwd.txt | chpasswd
[root@centos7 ~]# tail -3 /etc/shadow
user1:$6$bAKS54WgOC56WH$4vgt7VIkIqTzsZyDKt1s55oBGY04XRjuF8MHwsslt.9WuRzIJE/eLIPQhvwEKxPYQ84x6lF3gjE7HWQlpbm8i.:17017:0:99999:7:::
user2:$6$N27Zc/GayA$jYZqMIo58RnwnIP5ytiwyHONn1VxEGRZZNEYzu7x392zgnZa2aTpH9c2oVcr/W0Uo7X8oJU/DRlaQI63SLYTq1:17017:0:99999:7:::
user3:$6$UUFRnwBEJe$0yyxVFkxSxhRk40TDT/j6NfxwP7a/jPQnEhku/8Nqns42II6fNouiEi/GheQwTVJcDBWaYb4qePWy7qquhPVV.:17017:0:99999:7:::

注:新建用户的相关文件
/etc/default/useradd
/etc/skel/*
/etc/login.defs

原创文章,作者:sixijie,如若转载,请注明出处:http://www.178linux.com/28710