用户和组管理

用户和组管理
资源分派 安全3A
Authentication:认证
Authorization:授权
Accouting|Audition:审计

令牌token、identity(username/passwd)

linux用户:Username/UID
    管理员:root,0
    普通用户:1-60000自动分配
        系统用户:1-499,1-999
            对守护进程获取资源进行权限分配;
        登录用户:500+,1000+
            交互式登录:

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

linux安全上下文:
    运行中的程序:进程(process)

        以进程发起者的身份运行:
            root:/bin/cat
            user1:/bin/cat
        进程所能够访问的所有资源的权限取决于进程的发起者的身份;

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

linux用户和组相关的配置文件:
    /etc/passwd:用户及其属性信息(名称、UID、基本组ID等);
    /etc/group:组及其属性信息;
    /etc/shadow:用户密码及其相关属性;
    /etc/gshadow:组密码及其相关属性;

/etc/passwd:
    name:paaword:UID:GID:GECOS:directory:shell
    用户名:密码:UID:GID:GECOS:主目录:默认shell
        login name:登录用名(wang)
        passwd:密码 (x)
        UID:用户身份编号 (1000)
        GID:登录默认所在组编号 (1000)
        GECOS:用户全名或注释
        home directory:用户主目录 (/home/wang)
        shell:用户默认使用shell (/bin/bash)

/etc/group:
    group_name:password:GID:user_list
    组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号)
        群组名称:就是群组名称
        群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
        GID:就是群组的 ID
        以当前组为附加组的用户列表(分隔符为逗号)

/etc/shadow:
    login name:登录用名
    encrypted password:用户密码:一般用sha512加密
    date of last password change(最后修改口令的时间单位是天):从1970年1月1日起到密码最近一次被更改的时间
    minimum password age(密码最短有效期):
    maximum password age(密码最长有效期):
    password warning period(密码过期前几天系统提醒用户):
    password inactivity period(密码过期几天后帐号会被锁定密码活动周期):
    account expiration date(密码过期时间账号失效日期):
    reserved field(保留字段):

    登录名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段
        加密机制:
            加密:明文<-- -->密文
            解密:密文<-- -->明文

            单项加密:提取数据指纹(唯一特征码)
                哈希算法,原文不同,密文必不同
                相同算法定长输出,获得密文不可逆推出原始数据
                雪崩效应:初始条件的微小改变,引起结果的巨大改变
                md5:message digest,128bit
                sha1:secure hash algorithm,160bits
                sha224:224bits
                sha256:256bits
                sha384:384bits
                sha512:512bits

                雪崩效应:初始的条件的微小改变,将会引起结果的巨大改变;
                定长输出:
            更改加密算法:
            authconfig --passalgo=sha256 --update

        密码的复杂性策略:
            1、使用数字、大写字母、小写字母及特殊字符中至少3种;
            2、足够长:
            3、使用随机密码:
            4、定期更换;不要使用最近曾经使用过的密码;

/etc/gshadow:
    群组名称:就是群的名称
    群组密码:
    组管理员列表:组管理员的列表,更改组密码和成员
    以当前组为附加组的用户列表:多个用户间用逗号分隔

用户和组相关的管理命令:
    用户创建:useradd   一些创建用户的参考:rpm -q --scripts postfix
        useradd [options] LOGIN
            -u UID:[UID_MIN UID_MAX ],UID_MIN UID_MAX定义在/etc/login.defs文件中;
            -o:配合-u 选项,不检查UID的唯一性
            -g UID:指明用户的所属基本组,可以为组名,也可以为GID;
            -c "COMMENT":用户的注释信息
            -r:创建系统用户,centos6:ID小于500  centos7:ID小于1000
            -d /PATH/TO/HOME_DIR:指明家目录,一般不要指定为存在的目录下,否则会报错;
            -s SHELL:指明用户的默认shell程序,可用列表在/etc/shells文件中;
            -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:为用户指明附加组,组必须事先存在;
            -N:不创建私用组做主组,使用users组做主组
            -m:创建家目录,用于系统用户
            -M:不创建家目录,用于非系统用户
            -D:显示或 修改默认的设定值
                -s SHELL:
                -g:
                -f:
            新增用户的默认值的设定文件: /etc/default/useradd
                [root@localhost ~]# cat /etc/default/useradd
                 useradd defaults file
                GROUP=100
                HOME=/home
                INACTIVE=-1
                EXPIRE=
                SHELL=/bin/bash
                SKEL=/etc/skel            家目录的参考模板
                CREATE_MAIL_SPOOL=yes

            cp -r /home/wang/. /data/wanghome
            等同于 cp -r /home/wang/`ls -A` /data/wanghome
            注意*号不匹配隐藏文件
        新建用户的相关文件和命令
            /etc/default/useradd
            /etc/skel/*
            /etc/login.defs
            newusers passwd格式文件 批量创建用户
            chpasswd 批量修改用户口令

    组创建:groupadd
        groupadd [options] group
            -g GID:指明GID号,[GID_MIN GID_MAX  ],GID_MIN GID_MAX定义在/etc/login.defs文件中;
            -r:创建系统组,centos6:ID小于500  centos7:ID小于1000
        新建用户和组的一些默认配置文件:cat /etc/login.defs

    id:查看用户的相关ID信息
        id [OPTION]... [USERNAME]
        -u:显示UID
        -g:显示GID
        -G:显示GROUPS,显示用户所属的组的ID
        -n:name,显示名称,需配合ugG使用  -u -n  -g -n
            id -u root

    su:切换用户或以其他用户身份执行命令
        su [options...] [-] [user [args...]]

        - 用户:注意-前后都有空格字符
        注意使用-和不使用的区别:
        切换用户的方式:
            su UserName:非登录式切换,即不会读取目标用户的配置文件;不改变当前工作目录
            su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换;
        注意:root su至其他用户无需密码,非root用户切换时需要密码;

        换个身份执行命令:
            su [-] UserName -c 'COMMAND'

        选项:-l --login
        su -l UserName 相当于 su - UserName
        -l:和-用法相同

usermod:修改用户信息,用户属性修改
    usermod [options] LOGIN
        -u UID:新UID
        -g GID:新基本组
        -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;
            usermod -G "" wang  或者usermod -G "wang" wang  此命令用于清空附加组
        -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:设定非活动期限;

    给用户添加密码:passwd
    passwd [OPTIONS] UserName: 修改指定用户的密码
    passwd UserName:修改指定用户的密码;仅root用户权限
    passwd:修改自己的密码;

        常用选项:
            -d:删除指定用户密码
            -l:锁定指定用户
            -u:解锁指定用户
            -e:强制用户下次登录修改密码
            -f:强制操作
            -n mindays:指定最短使用期限
            -x maxdays:最大使用期限
            -w warndays:提前多少天开始警告用户修改密码
            -i inactive-days:非活动期限,密码过期后多少天允许登录使用
            --stdin:从标准输入接受用户密码;
                ehco "PASSWORD" | passwd --stdin USERNAME
                注意:/dev/null,bit buckets
                      /dev/zero,

    生成随机口令:openssl rand -base64 12
                cat /dev/urandom |tr -dc 'a-zA-Z0-9'|head -c12
    批量修改密码操作方法:
        newusers passwd格式文件 批量创建用户
        chpasswd 批量修改用户口令
        newusers:update and create new users in batch
        chpasswd:update passwords in batch mode   批量修改用户密码

    windowns查看密码信息
        C:\Users\bin>net accounts
        强制用户在时间到期之后多久必须注销?:     从不
        密码最短使用期限(天):                    0
        密码最长使用期限(天):                    42
        密码长度最小值:                          0
        保持的密码历史记录长度:                  None
        锁定阈值:                                从不
        锁定持续时间(分):                        30
        锁定观测窗口(分):                        30
        计算机角色:                              WORKSTATION
        命令成功完成。

userdel:删除用户        userdel [options] LOGIN
    -r:删除用户家目录和邮件;

groupmod:组属性修改
    groupmod [options] GROUP
        -n groupname:指定新名称
        -g GID:指定新的GID

组删除:groupdel    用户的主组不能删除
    groupdel [options] GROUP
    groupdel GROUP

组密码更改:gpasswd
    gpasswd [option] group
        -a user:将user添加至指定组中;
        -d user:从指定组中移除用户user,删除用户user的以当前组为组名的附加组;
        -A user1,user2,... :设置有管理权限的用户列表;
newgrp命令:临时切换基本组
    如果用户本不属于此组,则需要组密码;

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

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

修改用户属性:chage
    chage [options] LOGIN

    -d, --lastday LAST_DAY
    -E, --expiredate EXPIRE_DATE
    -I, --inactive INACTIVE
    -m, --mindays MIN_DAYS
    -M, --maxdays MAX_DAYS
    -W, --warndays WARN_DAYS
    -l 显示密码策略

其它命令:cgfn、finger、chsh

    chfn:提供使用者更改个人信息,change finger information,
        chfn 指令可用来更改执行 finger 指令时所显示的信息,这些信息都存放在/etc 目录里
    finger:user information lookup program
        用来查找并显示用户信息,系统管理员通过使用该命令可以知道某个时候到底有多少用户在使用这台Linux主机
    chsh:修改用户的登录shell
    -s:指定用户的登录shell
    -l:显示/etv/shells中的shell列表,然后退出

    getent:用来察看系统的数据库中的相关记录
    getent passwd|group|shadow|gshadow
    pwconv:命令用于开启用户的投影密码
    即将用户的密码在/etc/passwd的第二部分用x代替显示
    pwunconv:关闭用户的投影密码
    即将用户的密码在/etc/paawd文件中显示
    文件操作:
        vipw vi=nano /etc/passwd
        vigr vi=nano /etc/gpasswd
        pwck命令:检查密码相关信息
        pwck:verify integrity of password files
        grpck:verify integrity of group files

权限管理:
文件的权限主要针对三类对象进行定义:
owner:属主,u
group:属组,g
other:其它,o
每个文件针对每类访问者都定义了三种权限:
r:Readable
w:Writeadble
x:Excutable

文件:
    r:可使用文件查看类工具获取其内容;
    w:可修改其内容;
    x:可以把此文件提请内核启动为一个进程;
目录:
    r:可以使用ls查看此目录中文件列表;
    w:可在此目录中创建文件、也可删除此目录中的文件;
    x:可以ls -l查看此目录中文件列表元数据(须配合r),可以cd进入此目录;
    X 只给目录x权限,不给文件x权限

修改文件权限:
    chmod

    chmod [OPTION]... MODE[,MODE]... FILE...
    chmod [OPTION]... OCTAL-MODE FILE...
    chmod [OPTION]... --reference=RFILE FILE...

    1、chmod 640 文件或目录
    2、修改一类用户的权限:
        chmod u=rwx 文件或目录883
        chmod u=rwx,g=r-x 文件或目录
        chmod ug=rw- 文件或目录

        chmod a-x 文件或目录
        chmod +x 文件或目录

    3、chmod [OPTION]... --reference=RFILE FILE...
    参考RFILE文件的权限,将FILE的修改为同RFILE
        选项:
        -R:递归修改权限
  • a+X:其中X的含义:X 只给目录x权限,不给文件x权限

    修改文件的属主和属组:仅root可用
    修改文件的属主:chown
    chown [OPTION]... [OWNER][:[GROUP]] FILE...
    chown [OPTION]... --reference=RFILE FILE...
    选项:
    OWNER
    OWNER:GROUP
    :GROUP,冒号也可用 . 替换
    -R: 递归

    修改文件的属组:chgrp
        chgrp [OPTION]... GROUP FILE...
        chgrp [OPTION]... --reference=RFILE FILE...
            -R 递归

    文件或目录重建时的遮罩码:umask
    文件的默认权限:666-umask
    注意:如果某类的用户的权限减得的结果中存在x权限,则将其权限+1
    (所得结果某位存在执行(奇数)权限,则将其权限+1)
    目录的默认权限:777-umask

    umask:查看
    umask #:设定
        示例:umask 002
        umask u=rw,g=r,o=
    umask –S 模式方式显示
  • umask –p 输出可被调用
    root用户的默认值为0022
    非特权用户umask是 002
    文件默认权限为644
    目录默认权限为755
    新建的文件默认权限为 666-022=644
    新建的目录默认权限为 777-022=755
    文件: 666-umask 结果为偶数位的不变,奇数位的加1 列如666-125=541=642
    目录: 777-umask

    全局设置: /etc/bashrc 用户设置:~/.bashrc
        /etc/bashrc中包含默认的umask值的设置
    
    误删除git用户的家目录后,恢复家目录的方法
    mkdir /home/gir;cp -a /etc/skel/.[^.]* /home/git;chown -R git:git /home/git;chmod 700 /home/git
    cp /etc/skel /home/git;chown -R git:git /home/git;chmod 700 /home/git

linux文件系统上的特殊权限
SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
安全上下文
前提:进程有属主和属组,文件有属主和属组
(1)任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;
(2)启动为进程之后,其进程的属主为发起者,属组为发起者所属的组;
(3)进程访问文件时的权限,取决于进程的发起者:
(a)进程的发起者,同文件的属主,则应用文件属主权限;
(b)进程的发起者,属于文件的属组,则应用文件属组权限;
(c)应用文件“其它”权限;

SUID    可执行文件上SUID权限
    (1)任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;
    (2)启动为进程之后,其进程的属主为原程序文件的属主;ls -l `which passwd`
    (3)只适合二进制的可执行程序文件
    (4)SUID设置在目录上无意义
    权限设定:suid=4
        chmod u+s file...   或者chmod 4XYZ file..  其中XYZ表示原来文件的数字权限
        chmod u-s file...   或者chmod XYZ  file..  其中XYZ表示原来文件的数字权限
        需要注意的是因为权限的所有者位置权限显示为s或者S,s表示包含x权限,S表示不包含x权限

SGID
    可执行文件上SGID权限
        任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
        启动为进程之后,其进程的属组为原程序文件的属组
        权限设定:
        chmod g+s FILE...
        chmod g-s FILE...
    目录上的SGID权限
        默认情况下,用户创建文件时,其属组为此用户所属的基本组。
        一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组;
        通常用于创建一个协作目录
        权限设定
        chmod g+s DIR...   或者chmod 2XYZ file..  其中XYZ表示原来文件的数字权限
        chmod g-s DIR...   或者chmod XYZ  file..  其中XYZ表示原来文件的数字权限

Sticky  粘滞位 针对目录设置有意义,针对文件没有实际价值
    具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
    对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件;
    在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
    权限设定:
        chmod o+t DIR...    或者chmod 1XYZ file..  其中XYZ表示原来文件的数字权限
        chmod o-t DIR...    或者chmod  XYZ file..  其中XYZ表示原来文件的数字权限
        ls -ald /tmp
        ls -ald /var/tmp

SUID SGID STICKY
000
111

几个权限位映射:
    SUID:user占据属主的执行权限位:
        s:属主拥有x权限
        S:属主没有x权限
    SGID:group占据属组的执行权限位:
        s:属组拥有x权限
        S:属组没有x权限
    Sticky:other占据other的执行权限位:
        s:other拥有x权限
        S:other没有x权限

文件和目录权限的注意点:
    文件的删除权限是由所在的目录的权限决定的,
    进入目录的权限由目录的x权限控制

suid:继承二进制程序所有者的权限   功能:执行此文件的用户将临时继承此文件所有者的权限 su
sgid:继承二进制程序所有组的权限;功能:执行此文件的用户将临时继承此文件所属组的权限
      *作用于目录,此目录新建的文件继承目录的所属组
sticky:*作用于目录,此目录的文件只能被所有者和root删除    /tmp目录

设定文件特定属性
    chattr +i 不能删除,改名,更改
    chattr +a 只能追加内容
    lsattr 显示特定属性
    chattr +A  锁定atime

访问控制列表
    ACL:Access Control List,实现灵活的权限管理
    除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
    CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
    CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
    tune2fs –o acl /dev/sdb1
    mount –o acl /dev/sdb1 /mnt/test
  • ACL生效顺序:所有者,自定义用户,自定义组,其他人

    ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
    getfacl 可看到特殊权限:flags
    通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
    base ACL 不能删除
    setfacl -k dir 删除默认ACL权限
    setfacl –b file1清除所有ACL权限
    getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
    mask只影响除所有者和other的之外的人和组的最大权限
    Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
    用户或组的设置必须存在于mask权限设定范围内才会生效 setfacl -m mask::rx file
    --set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
    示例:
    setfacl --set u::rw,u:wang:rw,g::r,o::- file1
    备份和恢复ACL
  • 主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
    getfacl -R /tmp/dir1 > acl.txt
    setfacl -R -b /tmp/dir1
    setfacl -R --set-file=acl.txt /tmp/dir1
    setfacl --restore acl.txt
    getfacl -R /tmp/dir1

    setfacl - set file access control lists
        -m:--modify=acl        modify the current ACL(s) of file(s)
            setfacl -m u:wangbin:rw f1
            setfacl -m mask::r f1
        -M, --modify-file=file  read ACL entries to modify from file
        -X, --remove-file=file  read ACL entries to remove from file
        -x:--remove=acl        remove entries from the ACL(s) of file(s)
        -b:-remove-all        remove all extended ACL entries   清空所有setfacl设置的权限
            全部清除acl权限使用-b,清空部分acl权限使用-x
        -d, --default           operations apply to the default ACL
    
    getfacl file:查看file文件的setfacl设置的权限信息
        为多用户或者组的文件和目录赋予访问权限rwx
        mount -o acl /directory
        getfacl file |directory
        setfacl -m u:wang:rwx file|directory
        setfacl -Rm g:sales:rwX directory
        setfacl -M file.acl file|directory
        setfacl -m g:salesgroup:rw file| directory
        setfacl -m 7
        setfacl -x u:wang file |directory
        setfacl -X file.acl directory
    
                [root@localhost data]# setfacl -m u:wangbin:rw ens33
                [root@localhost data]# setfacl -m mask:r ens33
                [root@localhost data]# getfacl ens33
                # file: ens33
                # owner: root
                # group: root
                user::rw-
                user:wangbin:rw-        #effective:r--
                group::r--
                mask::r--
                other::r--
    
                [root@localhost data]# setfacl -m u:wangbin:rw ens33
                [root@localhost data]# getfacl ens33
                # file: ens33
                # owner: root
                # group: root
                user::rw-
                user:wangbin:rw-
                group::r--
                mask::rw-
                other::r--
    
        备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限
  • getfacl对目录操作时,不能使用绝对路径;
    [root@Magedu ~]# tar -cvf dir.tar /testdir/dir
    [root@Magedu ~]# getfacl -R testdir/dir > /root/acl.txt
    清除/testdir/dir中所有ACL权限
    [root@Magedu ~]# setfacl -b testdir/dir
    还原ACL权限
    [root@Magedu ~]# tar -xvf dir.tar -C /var/tmp
    [root@Magedu ~]# cp ac1.txt /var/tmp
    [root@Magedu ~]# cd /root
    setfacl --restore ac1.txt

        tar -cvf dir.tar /testdir/dir
        getfacl -R testdir/dir > /root/acl.txt
        setfacl -b testdir/dir
        tar -xvf dir.tar -C /var/tmp
        cp acl.txt /var/tmp
        cd /root
        setfacl --restort acl.txt
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章