1、Linux系统的安全模型

1.1、安全3A模型

Authentication:认证
Authorization:授权
Accouting|Audition:审计

1.2、用户


用户(user)是登录Linux系统的一种认证机制;
Linux系统识别用户靠的是UID,而非username,username只是便于用户使用的一种手段;类似于命令的别名。

Linux系统的用户分为两大类,三小类:系统用户和普通用户;系统用户可分为管理员和运行系统访问的系统用户。
系统的管理员用户的username默认为root,UID为0;
其他用户的UID为1-65536;这是系统默认创建用户的UID范围,如果指定UID的话,那么是可以超出1-65535的。
系统用户: 1-499, 1-999 ( CentOS7);对守护进程获取资源进行权限分配。这是使用useradd -r UID USERNAME创建系统用户默认的范围。
登录用户:  500+, 1000+( CentOS7);用于用户的交互式登录。


1.3、组group

Linux系统的组:

    Groupname/GID


管理员组: 组名同用户名root, GID同UID为0。


普通组:
    系统组: 1-499, 1-999( CENTOS7)

    普通组: 500+, 1000+( CENTOS7)

组的类别:

    用户的主要组(primary group);用户必须属于一个且只有一个主组;    
    默认创建的用户,他的组名同用户名,且仅包含一个用户,也叫做他的私有组。
    用户的附加组(supplementary group):一个用户可以属于零个或多个辅助组。




1.4、Linux安全上下文


    运行中的程序:进程 (process),若一个进程以进程发起者的身份运行,那么进程所能够访问资源的权限取决于进程的运行者的身份。

root: /bin/cat
sunwuk: /bin/cat


1.5、Linux用户和组的主要配置文件:

/etc/passwd:用户及其属性信息(名称、 UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性


1.6、/etc/passwd文件格式


在这个文件中一共有7个字段:

    login name:登录用名(wang)    
    passwd:密码 (x)
    UID:用户身份编号 (1000)
    GID:登录默认所在组编号 (1000)
    GECOS:用户全名或注释
    home directory:用户主目录 (/home/wang)
    shell:用户默认使用shell (/bin/bash)
[root@centos7x ~]#cat /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin


1.7、/etc/shadow文件格式


/etc/shadow共计9个字段:

    用户名:username;    
    用户密码:一般用sha512加密;
    
    最近一次密码修改时间:从1970年1月1日起到密码最近一次被更改的时间;
    
    最短使用期限:密码再过几天可以被变更( 0表示随时可被变更);
    最长使用期限:密码再过几天必须被变更( 99999表示永不过期);
    警告时长:密码过期前几天系统提醒用户(默认为一周);
    非活动时长:密码过期几天后帐号会被锁定;
    失效期:从1970年1月1日算起,多少天后帐号失效;
    
    Reserved Field:保留字段;
注意:
    这些字段中与密码相关的字段的单位统统是以天为单位的。
    例如第三个字段——最近一次密码修改的时长,就是密码修改那一刻距离Unix元年的天数。
    最短使用期限:从最近一次密码修改后那一刻,最少得使用几天后才可以修改密码;0表示没有限制。
    最长使用期限:从最近一次密码修改后那一刻,最长可以使用这个账户几天,当超过这个天数就必须要修改密码,否则超过非活动时长规定的天数后,用户就会被锁定。当前了警告时长是指在最长使用期限之前的前几天,系统会警告用户修改密码。
    失效期:是指从UNIX元年后算起,多少天后用户的账户失效;他的单位也是天。如果将这个时间设置为1,那么这个账户就立马失效了。如果将最近一次密码修改的时间改为0,那么用户的账户也是立马失效的。

[root@centos7x ~]#cat /etc/shadow
root:$6$0jCWSv2C$TsQf4bk71lWjOWBCYoLQD/uVIfFGsr7FNNWgr/9la3blOoFpO8cynNEBgr7RqxrobOr6.KTnE6F5Lw5SBBnW70:17485:0:99999:7:::
bin:*:17485:0:99999:7:::
daemon:*:17485:0:99999:7:::



1.8、group文件格式


group文件的格式是4个字段:

    组名:组密码:组ID以这个组为附加组的用户列表,多个用户以“,”为分隔符。


root@centos7x ~]#cat /etc/group
root:x:0:
bin:x:1:
admins:x:1014:natasha,harry


1.9、/etc/gshadow文件格式


group文件的格式是4个字段:

    组名:组密码:组管理员以这个组为附加组的用户列表,多个用户以“,”为分隔符。


[root@centos7x ~]#cat /etc/gshadow
root:::
bin:::
daemon:::
admins:!::natasha,harry


1.10、用户及组的配置文件修改


  • 由于用户在创建了之后,会自动的修改这四个配置文件,这四个配置文件是有特定的格式;

  • 为了保证系统能稳定的运行,不建议手动的修改这4个文件;建议的方式是使用用户及组管理的相关命令(将在后面介绍);

  • 或者是使用:vipw和vigr进行passwd文件和group文件的修改;在修改后使用pwck和grpck命令进行格式的检查。



2、用户和组管理命令

(1)用户管理命令

useradd
usermod
userdel


(2)组帐号维护命令

groupadd
groupmod
groupdel


(3)其他命令;

    用户相关:passwd, su, id, finger, chfn, chage, chsh;
    组 相 关:gpasswd, newgrp, groupmems, groups;
    权限相关:见下节。




2.1、用户创建: useradd



语法:

    useradd [options] LOGIN

选项:

    -u UID;    
    -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;
    -m 创建家目录,用于系统用户;
    -M 不创建家目录,用于非系统用户;


用户创建的默认值设定: /etc/default/useradd文件;

所以显示或更改默认设置;

    useradd -D    
    useradd –D -s SHELL
    useradd –D –b BASE_DIR
    useradd –D –g GROUP



新建用户的相关文件和命令:

    /etc/default/useradd:设置新建用户的默认配置;
    /etc/login.defs:新建用户的默认


2.2、用户属性修改


语法:

    usermod [OPTION] login

选项:

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


2.3、删除用户


语法:

    userdel [OPTION]... login


选项:

    -r: 删除用户家目录;



2.4、查看用户ID信息:id命令


id [OPTION]... [USER]

-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用


2.5、su命令:切换用户或以其他用户身份执行命令




语法:

    su [options...] [-] [user [args...]]


切换用户的方式:

    su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录;    
    su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换;


root用户su至其他用户无须密码;非root用户切换时需要密码;



换个身份执行命令:

    su [-] UserName -c 'COMMAND


选项: 

    -l --login
    su -l UserName 相当于 su - UserName
    普通用户使用su命令就相当于su root。



2.6、设置及修改用户密码


修改指定用户的密码,仅root用户有权限修改别的用户的密码。

 passwd [OPTIONS] UserName


修改自己的密码:passwd;



常用选项:

    -l:锁定指定用户;   
    -u:解锁指定用户;
    -e:强制用户下次登录修改密码;
    -n mindays: 指定最短使用期限;
    -x maxdays:最大使用期限;
    -w warndays:提前多少天开始警告;
    -i inactivedays:非活动期限;
    --stdin:从标准输入接收用户密码;
        echo "PASSWORD" | passwd --stdin USERNAME


2.7、修改用户密码策略


语法:

    chage [OPTION]... LOGIN

选项:

    -d LAST_DAY:格式可以是YYYY-MM-DD,或者是一个整数,表示距离UNIX元年的天数;将这个值改为0,那么下次用户登录时就必须要更改密码,即用户密码已经过期。
    -E --expiredate EXPIRE_DATE
    -I --inactive INACTIVE
    -m --mindays MIN_DAYS
    -M --maxdays MAX_DAYS
    -W --warndays WARN_DAYS
    –l 显示密码策略


示例:

chage -d 0 tom 下一次登录强制重设密码
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom


[root@centos7x ~]#chage -l xixi
Last password change: Nov 17, 2017
Password expires: never
Password inactive: never
Account expires: never
Minimum number of days between password change: 0
Maximum number of days between password change: 99999
Number of days of warning before password expires: 7


2.8、用户信息查看及修改命令


chfn:指定个人信息;
    清除用户的finger信息:
        [root@centos7x ~]#chfn -f "" -o '' -p '' -h ''  chen
        Changing finger information for chen.
        Finger information changed.
        
chsh:指定shell;

finger [USER_NAME]:查看用户的finger信息;






2.9、创建组


语法:


   groupadd [OPTION]... group_name


选项:

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


2.10、修改和删除组


组属性修改:


语法:

    groupmod [OPTION]... group


选项:

    -n group_name: 新名字
    -g GID: 新的GID


组删除:

    groupdel GROUP



2.11、更改组密码


语法:

 gpasswd [OPTION] GROUP



选项:

    -a user 将user添加至指定组中    
    -d user 从指定组中移除用户user
    -A user1,user2,... 设置有管理权限的用户列表



2.12、更改和查看组成员


语法:

    groupmems [options] [action]

options:

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



2.13、临时切换主组


newgrp命令:
    如果用户本不属于此组,则需要组密码;


2.13、查看用户所属组列表


语法:

    groups [OPTION].[USERNAME]...