您的位置:新葡亰496net > 电脑系统 > 组和权限管理基础,用户和组及权限

组和权限管理基础,用户和组及权限

发布时间:2019-10-22 05:09编辑:电脑系统浏览(121)

    用户、组和权限管理基础

    用户组和权限管理

    linux是一个多用户,多任务的服务器操作系统

    一、USERS

    UID为0的用户为管理员用户,任何一个UID为0的用户,都可为管理员用户
    若系统没有了UID=0的管理员用户,则系统无法启动
    用户ID:

    管理员:root,UID为0
    系统用户:UID为1-499,1-999,对守护进程获取资源进行权限分配
    普通用户:UID为500-65535,1000-65535,交互式登录
    创建用户时指定UID时,可指定UID>65535的UID,即UID可指定为70000

    组(group)GID

    管理员组:root GID为0
    系统组:1-499,1-999(CENTOS7)
    普通组:500-65535,1000-65535

    liunx中,允许用户名和组名相同,windows中不允许用户和组同名

    • linux安全上下文:
      运行中的程序即进程,进程所能够访问资源的权限取决于进程的运行者的身份
    • linux组的类别:

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

    • passwd文件格式:

    login name:登录用名(danran)
    passwd:密码位(X)
    UID:用户身份编码(1000)
    GID:登录默认所在组编号(1000)
    GECOS:用户全名或注释即描述
    home directory:用户主目录(/home/danran)
    shell:用户默认使用shell(/bin/bash)

    • passwd配置文件格式描述:
      新葡亰496net 1

    name:passwd:UID:GID:GECOS:directory:shell

    修改用户的属性信息也可直接修改/etc/passwd配置文件
    如果删除用户的家目录,则在登录时会自动登录到/目录上,但不会禁止登录

    • shadow文件格式

    1、登录用名
    2、用户密码: 一般用sha512 加密,$6位sha512算法,$5位sha256算法,$1为md5加密
    3、从1970 年1 月1 日起到密码最近一次被更改的时间,单位day
    4、密码再过几天可以被变更(0 表示随时可被变更)
    5、密码再过几天必须被变更(99999 表示永不过期)
    6、密码过期前几天系统提醒用户(默认为一周)
    7、密码过期几天后帐号会被锁定
    8、从1970 年1 月1日算起,多少天账号失效

    新葡亰496net 2

    • !禁止用户登录

    锁定用户时,禁止用户登录和切换,但root用户不受限制可以正常切换,空口令可以登录

    • 密码加密:

    加密机制:

    加密:明文--> 密文
    解密:密文--> 明文

    单向加密:哈希算法(散列算法),原文不同,密文必不同,密码数据一致,加密过后的结果也是一样的
    哈希算法的特点:如果两个密码的数据一样,则加密处理后的结果也是一样的,因此用户密码在加密时又因为前面又加了一些随机的随机数,即加密过后第2个和第三个$$之间的数,因此口令跟随机数综合起来的结果也就不一致。加的随机数称之为salt(盐)

    新葡亰496net 3

    如果知道确定的salt随机数,则使用openssl命令推算密码口令,相同的算法及相同的密码,算出来的加密口令不一致,但是指定salt数据,则推算出来的md5数据则是完全一致的

    相同算法定长输出,获得密文不可逆推出原始数据
    雪崩效应:初始条件的微小改变,引起结果的巨大改变
    md5: message digest, 128bits
    sha1: secure hash algorithm, 160bits
    sha224: 224bits
    sha256: 256bits
    sha384: 384bits $5
    sha512: 512bits $6

    centos6加密算法为sha512,shadow文件中表示为$6,$1对应的加密算法是md5

    新葡亰496net 4

    • man authconfig | grep passwd 可查找支持更新的加密算法
      更改定义加密算法 authconfig --passalgo=sha256 -- update

    • 加密算法保存文件为 ==/etc/login.defs==

    • 口令有效期策略:

    ![](https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1497800534&di=5fa16992512d68a8d04fd2d822d1f7d4&imgtype=jpg&src=http://b.hiphotos.baidu.com/image/pic/item/3b87e950352ac65ca99fce2af1f2b21192138ad5.jpg)
    
    • 密码复杂性策略

    使用数字、大写字母、小写字母及特殊字符中至少3种
    足够长
    使用随机密码
    定期更换, 不要使用最近曾经使用过的密码

    • group文件格式

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

    • gshadow文件格式

    群组名称:就是群组名称
    群组密码:
    组管理员列表:组管理员的列表,更改组密码和成员
    以当前组为附加组的用户列表:(分隔符为逗号)

    • 新建用户的相关配置文件模板和命令

    vim /etc/default/useradd
    /etc/skel/* 存放用户系统环境
    /etc/login.defs 加密算法保存文件
    newusers passwd 格式文件 批量创建用户
    chpasswd 批量修改用户口令

    • 用户和组的配置文件

    /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
    /etc/grup:组及其属性信息
    /etc/shadow:用户密码及其相关属性
    /etc/gshadow:组密码及其相关属性
    /var/spool/mail:用户的邮件目录

    • 加密算法保存文件为 ==/etc/login.defs==

    • 命令:

      pwunconv:将用户密码从shadow文件中显示在passwd文件中,即取消密码映射,则/etc/shadow文件将自动消失
      pwconv:打开用户投影密码,将密码映射到/etc/shadow文件
      chfn 修改用户的描述信息
      finger:查看用户的描述信息(需安装finger*软件包)
      chfn danrna 修改danran用户描述信息
      finger danran 查看danran用户的描述信息
      chsh -s /bin/csh danran 修改danran用户的shell类型

    • 用户和组管理命令

    用户管理命令
    useradd
    usermod
    userdel
    组帐号维护命令
    groupadd
    groupmod
    groupdel

    • 用户创建useadd

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

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

    显示或更改默认设置:
    useradd -D
    useradd –D -s SHELL
    useradd –D –b BASE_DIR,更改默认家目录位置eg /app
    useradd –D –g GROUP

    • 用户属性修改:

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

        id [OPTION]... [USER]
            -u:  显示UID
            -g:  显示GID
            -G:  显示用户所属的组的ID
            -n:  显示名称,需配合ugG 使用
      
    • 创建组

        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
    groupdel GROUP

    删除附加组

    usermod -G "" tom 删除tom的附加组
    gpasswd -d tom bin 将tom从bin附加组删除

    • 更改组密码:
      组密码:gpasswd

        gpasswd [OPTION] GROUP    
            -a user:  将user 添加至指定组中   
            -d user:  从指定组中移除用户user   
            -A user1,user2,...:  设置有管理权限的用户列表   
      
    • newgrp 命令:临时切换主组

    如果用户本不属于此组,则需要组密码
    newgrp danran 将自己的主组临时变为danran

    • 更改和查看组成员

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

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

    新葡亰496net 5

    • su切换用户

    切换用户的方式:

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

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

    换个身份执行命令:

    su [-] UserName -c 'COMMAND'

    su - root 'cat /etc/shadow' 以root的身份执行cat命令

    选项:-l --login

    su -l UserName 于 相当于 su - UserName

    • 删除用户

    userdel [OPTION]... login

    -r: 删除用户 家目录

    • 设置密码

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

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

    echo " PASSWORD " | passwd --stdin USERNAME

    • 修改用户密码策略
    chage [OPTION]... LOGIN
        -d:最近一次修改时间
        -E:过期时间
        -I:非活动时间
        -m:最短使用期限
        -M:最长使用期限
        -W:警告时间
        –l 显示密码策略
            chage -l danran 列出用户口令策略的相关信息
    

    示例:

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

    • change:更改账号口令策略
    • getent:查看文件的记录信息,只查看文件中某个用户的全部信息

    getent passwd danran 查看passwd文件中danran用户的信息

    新葡亰496net 6

    • 将用户添加进组

    Gpasswd 组名 修改组密码
    Newgrp 用户 把该用户添加进组

    gpasswd -a dan danran 将danran用户添加进dan组里

    • 修改用户和组命令使用
    useradd 创建用户  eg  useradd danran(创建淡然用户)
    groupadd 创建组
    Userdel 删除用户
    Groupdel 删除组
    Passwd 修改用户密码
    ghpasswd 批量修改用户口令
    Gpasswd 修改组密码
    Finger 用来简单的查看系统上的用户信息   eg finger rich
    Useradd -c 描述信息 -d 指定家目录 -g 指定私有组 -G指定附加组 -s 指定shell环境    
        eg useradd -c       boss -d /user -u 1000 -G root -s /bin/bash
        -m:创建用户时,强制给用户创建目录
        -M:创建用户时,但不创建家目录
        -D:default,为useradd命令创建的用户指定新的默认值
    Useradd -r 增加系统用户
    Useradd -D 查看系统默认用户属性
    Useradd -D -s /bin/tsch 修改系统默认用户的登录属性
    Usermod 修改用户属性,参数同useradd一样,-
        -G GID:默认会覆盖原有的附加组,如果是添加,则同时使用-a选项
        -d /path/to/new_home:默认不会迁移用户的家目录,如果要迁移,则同时使用-m
        -l New_login_name:修改登录名称
    Usermod -l 修改用户账号的登录名
    Usermod -p 修改用户密码
    usermod -s /bin/csh danran  修改用户的默认shell    
    chsh -s /bin/bash danran   修改用户的默认shell   
    Groupmod -g 修改GID   eg groupmod -g 2000 test
    Groupmod -n 修改组名   eg groupmod -g test1 test
    Passwd -e 强制用户下次登录时修改密码
    Passwd -l 锁定用户
    Passwd -u 解锁用户
        锁定用户时,禁止用户登录和切换,但root用户不受限制可以正常切换 
    Passwd -d 删除用户密码
    Userdel 删除用户及passwd、shadow、group、gshadow四个文件,保留用户名文件和电子邮件
    Userdel -r 删除用户和用户的所有文件,包括用户名文件和电子邮件
    groupmems -g danran -l   查看danran组里的其他成员,即显示以danran为附加组的用户
    groupmems -g danran -d harry   将harry组从danran附加组里删除
    gpasswd -d harry danran    从danran附加组中删除harry组
    groups danran   列出danran用户的主组  
    gpasswd danran  修改danran组的密码    
    newgrp danran  将自己的主组临时变为danran    
        如果用户本身就属于danran附加组的成员,并shadow文件中记录了属于danran附加组,则不需要输入密码就可直接更换临时主组,但如果不属于附加组,则切换为danran主组需要输入danran组的密码    
    gpasswd -a dan danran    将dan用户添加进danran组里      
        成员更改组成员关系后,用户必须重新登录才能获得最近更改的组成员关系
    
    Chsh:修改用户默认shell
    Chfn:修改注释信息
    vipw:vim 编辑passwd文件
    vigr:vim 编辑group文件
    pwck:语法检查,检查用户文件格式
    grpck:语法检查,检查组文件格式
    newusers passwd     根据passwd格式文件批量创建用户
    

    前言:

    开始系统的学习linux已经有三周时间,最近学习了用户、组和权限管理的相关基础知识。我所学的大纲将这三部分内容划到一个章节来学习,因为刚开始学linux所以接触到的都是一些基础性的东西。可是虽说是基础知识,但是这三部分和在一起讲内容还是蛮多的,老师上课用的PPT就有洋洋洒洒接近六十页,对于初学者来说一时间接收这么多知识还是有点难以消化的。听了老师的课以后,课下我又对这部分内容归纳整理了一下,发现这部分内容虽然多但是很多知识都是成块的,只要合理的去总结归纳其实学起来比不难。
    我把这部分内容主要归纳成以下几个模块:

    1. 相关定义
    2. 配置文件模块:初步学习用户和组的相关知识,其实主要就是学习用户和用户组相关的配置文件,了解掌握了这些配置文件内容和作用基本上也就掌握了用户和用户组的知识。
    3. 命令模块:管理权限要用命令来下达,关于权限管理的主要命令我总结了14个,掌握了这些命令,权限管理对你来说就会比较容易理解了。
    4. 权限管理
    5. 默认权限
    6. 特殊权限
    7. ACL
      这样将知识拆开归纳学习就会让学习轻松很多,接下来就开看看我是怎么归纳的吧!

      一、相关定义

      ### 安全3A:linux的安全模型:

      Authentication:确认当前用户身份(通过用户名配合密码)
      Authozation:授予权限
      Accouting|Audition:审计,记录监控

      ### 用户:

      管理员:root , UID =0
      普通用户的UID=1-65535
      系统用户:1-499,1-999(CENTOS7)
      登录用户:500 ,1000 (CENTOS7)

      ### 组

      建立用户的意义在于便于分配权限。

    • 管理员组:root,GID=0
    • 普通组:
      系统组:1-499,1-999(CENTOS7)
      普通组:500 ,1000 (CENTOS7)

      二、配置文件

      ### 关于用户的配置文件:

      #### 1./etc/passwd:

      用户及属性信息(名称、UID、主的ID)
      username: x :uid:gid:comment : homedir:shell
      用户名:密码X:UID:GID :用户全名或注释:用户家目录(/home/wang):默认shell(/bin/bash)

      #### 2./etc/shadow:

      用户密码及相关属性
      username :password : passwordtime: min : warning : incative: account

    • 用户名

    • 用户密码:一般用sha512加密
    • 从1970年一月一日起到密码最近一次被更改的时间
    • 密码再过几天可以被更改(0表示随时可更改)
    • 密码有效期
    • 密码过期提示时间
    • 密码过期几天后会被锁定
    • 用户有效期

      #### 3./etc/default/useradd

    [root@CentOS7 ~]#cat /etc/default/useradd 
    # useradd defaults file  创建新用户默认配置文件
    GROUP=100   
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    

    介绍安全3A

    资源分派:

    Authentication:认证

    Authorization:授权

    Accouting|Audition:审计

    用户角色:超级用户,普通用户,程序用户

    二、文件权限

    • 文件权限
      新葡亰496net 7
    r(readable) w(writable) x(eXcuable) u(owner) g(group) o(other) a(all)
    执行 所有者 所属组 其他人 所有人
    4 2 1

    用户访问文件,按照匹配顺序依次匹配,如果普通用户文件的所有者和所属组其中一个有执行权限,-o没有-x权限,尽管root用户不属于该文件所有者和所有组,root用户依然可以借用-X执行权限

    • 删除文件,跟文件本身的权限没有关系,而跟目录本身有关系,因为文件名存储在父目录结构块中,
    • 目录权限:

    目录若只有读写权限,只能查看目录文件列表,不能访问文件和cd进目录(查看,删除),如果只有执行权限,可以cd进目录,但是不能ls列出文件列表,可以执行目录中的文件,执行是基础权限,若知道文件名,可以直接访问目录中的文件;写权限,需配合x权限才能生效,如果要删除目录下的文件,目录必须要有执行权限和写权限

    文件:
        r:  可使用文件查看类工具获取其内容
        w:  可修改其内容
        x:  可以把此文件提请内核启动为一个进程
    目录:
        r:  可以使用ls 查看此目录中文件列表
        w:  可在此目录中创建文件,也可删除此目录中的文件
        x:  可以使用ls -l 查看此目录中文件列表,可以cd 进入此目录
        X:递归修改目录执行权限时,只给所有的目录x 权限,而不给文件x执行权限,但是如果文件中有任何一个人有执行权限,则文件将会全部加上执行权限  
    
    • chmod 修改文件权限
    chmod [OPTION]... OCTAL-MODE FILE...
        -R:  递归修改权限
    chmod [OPTION]... MODE[,MODE]... FILE...
        MODE: 
            修改一类用户的所有权限:
            u= g= o= ug= a= u=,g=
        修改一类用户某位或某些位权限
            u  u- g  g- o  o- a  a-   -
    
    chmod [OPTION]... --reference=RFILE FILE...  参考RFILE 文件的权限,将FILE 的修改为同RFILE
    

    权限设置eg:

    chgrp sales testfile
    chown root:admins testfile
    chmod u wx,g-r,o=rx file
    chmod -R g rwX /testdir
    chmod 600 file
    chown mage testfile

    若用户没有任何权限,则设置权限为空,赋值权限也可直接赋八进制数字

    • 八进制权限:
    000 001 010 011 100 101 110 111
    --- --x -w- -wx r-- r-x rw- rwx
    0 1 2 3 4 5 6 7
    640:rw- r-- --- 755:rwx r-x r-x 7:--- --- rwx 0:--- --- ---
    • 文件属性操作
        chown  设置文件的所有者   
    chgrp  设置文件的属组信息   
    

    修改文件的属组和属主

    修改文件的属主:chown

    chown [OPTION]... [OWNER][:[GROUP]] FILE...
        用法:
            命令中的冒号可用. 替换
            -R:  递归
            chown [OPTION]... --reference=RFILE FILE...
                eg:chown -R danran:danran qq
                    chown -R danran.danran qq
    

    修改文件的属组:chgrp

    chgrp [OPTION]... GROUP FILE...
    chgrp [OPTION]... --reference=RFILE FILE...
        -R  递归
    
    用户属于某个附加组时,才能修改文件的属组为这个附加组
    
    • 新建文件或目录的默认权限

    umask掩码:从777或666中,将文件对应的权限位去掉,从而得出默认权限
    umask值:可以用来保留在创建文件权限
    新建FILE 权限: 666-umask

    如果所得结果某位存在执行(奇数)权限,则将其权限 1

    • umask值计算权限
      新葡亰496net 8

    新建DIR 权限: 777-umask
    非特权用户umask是002

    root 的umask是022
    umask: 查看umask值
    umask #: 设定umask值

    umask 002

    umask –S 模式方式显示

    新葡亰496net 9


    umask –p 输出可被调用

    新葡亰496net 10

    • umask全局设置: /etc/bashrc umask用户设置:~/.bashrc

    关于组的配置文件:

    用户user

    令牌token,identity

    登陆成功后拿到令牌。

    Linux用户:Username/UID

    管理员:root, 0

    普通用户:1-65535

    系统用户:1-499, 1-999(CentOS7)

    对守护进程获取资源进行权限分配

    登录用户:500 , 1000 (CentOS7)

    交互式登录

     

    三、文件系统的特殊权限

    • Suid 和 guid 的特殊权限及sticky位

    Suid 当在一个二进制文件上应用了suid后,那么任何人在执行该命令时临时拥有命令拥有人的权限,只能应 用在可执行文件上
    u s

    sgid 当在一个二进制文件上应用了sgid后,那么任何人在执行该命令时临时拥有命令拥有组的权限,只能应用在可执行文件上,如果在一个目录上应用了sgid后,那么任何人在该目录创建文件/目录的拥有组会继承目录本身的组
    g s

    Sticky 如果在一个目录上应用了sticky权限后,那么该目录中的文件仅文件拥有人和root用户能删除
    o t

    • SUID, SGID, Sticky

    三种常用权限:r, w, x user, group, other
    安全上下文
    前提:进程有属主和属组;文件有属主和属组

    (1) 任何一个可执行程序文件能不能启动为进程, 取决发起者对程序文件是否拥有执行权限
    (2) 启动为进程之后,其进程的属主为发起者, 进程的属组为发起者所属的组
    (3) 进程访问文件时的权限,取决于进程的发起者

    (a) 进程的发起者,同文件的属主:则应用文件属主权限
    (b) 进程的发起者,属于文件属组;则应用文件属组权限
    (c) 应用文件‘其他’权限

    • 可执行文件上的SUID权限

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属主为原程序文件的属主
    SUID 只对二进制可执行程序有效;SUID 设置在目录上无意义
    权限设定:

    chmod u s FILE...
    chmod u-s FILE...

    • 可执行文件上的SGID权限

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属主为原程序文件的属主
    权限设定:

    chmod g s FILE...
    chmod g-s FILE...

    • 目录上的SGID权限

    默认情况下,用户创建文件时,其属组为此用户所属的主组
    一旦某目录被设定了SGID ,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
    通常用于创建一个协作目录

    权限设定:

    chmod g s DIR...
    chmod g-s DIR...

    • Sticky位

    具有写权限的目录通常用户可以删除该目录中的任何文件,不管该文件的权限或拥有权
    在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
    sticky设置在文件上无意义

    权限设定:

    chmod o t DIR...
    chmod o-t DIR...

    • 权限位
    SUID:4 SGID:2 STICKY:1
    • 权限位映射:

    SUID: user, 占据属主的执行权限位

    s:属主拥有x权限
    S:属主没有x权限
    

    SGID: group, 占据属组的执行权限位

    s: group拥有x权限
    S: group没有x权限
    

    Sticky: other, 占据other 的执行权限位

    t: other 拥有x 权限
    T:other 没有x 权限
    
    • 设定文件的特殊属性

    chattr i 不能删除,改名,更改
    chattr a 只能追加内容
    lsattr 显示特定属性

    1./etc/group:

    组以及属性信息
    组名:组口令:GID:以当前组为附加组的用户列表

    组group

    Linux组:Groupname/GID

    管理员组:root, 0

    普通组:

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

    普通组:500 , 1000 (CENTOS7)

    其实在Linux中并不分成管理员组和用户组,主要分主组和附加组。

    CentOS7用户:username/uid

    四、ACL权限

    ACL访问控制列表:Access Control List ,实现灵活的权限管理
    除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
    CentOS7 默认创建的xfs 和ext4 文件系统具有ACL功能
    CentOS7 之前版本,默认手工创建的ext4 文件系统无ACL功能, 需手动增加

    tune2fs –o acl /dev/sdb1
    mount –o acl /dev/sdb1 /mnt/test

    • ACL 生效顺序:所有者,自定义用户,自定义组,其他

    getfacl 查看文件的acl属性
    setfacl设置文件的acl属性

    -m:创建cal
        u:用户
        g:组
        o:其他人
    -x:删除acl权限  
    -b:清除所有的acl设置
    -m:设置mask的值
    -b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
    -k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。
    -n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 
    --mask:重新计算有效权限,即使ACL mask被明确指定。
    -d,--default:设定默认的acl规则。 
    --restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。
    --test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。
    -R,--recursive:递归的对所有文件及目录进行操作。 
    -L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
    -P,--physical:跳过所有符号链接,包括符号链接文件。 
    --version:输出setfacl的版本号并退出。
    

    setfacl -x u:wang file |directory 删除wang用户的acl权限,删除不干净
    setfacl -k dir 删除默认ACL权限
    setfacl –b file1 清除所有ACL权限
    getfacl file1 | setfacl --set-file=- file2 复制file1的acl 权限给file2

    新葡亰496net 11


    setfacl -m u:danran:rwx passwd 对passwd文件添加danran用户rwx权限,

    • 用户或组的设置必须存在于mask权限设定范围内才会生效

    setfacl -m mask::rx file

    --set 选项会把原有的ACL 项都删除,用新的替代,需要注意的是一定要包含UGO 的设置,不能象-m 一样只是添加ACL就可以
    示例:

    setfacl --set u::rw,u:wang:rw,g::r,o::- file1

    为多用户或者组的文件和目录赋予访问权限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 利用编辑好的acl设置文件批量设置acl

    新葡亰496net 12


    • setfacl -m g:salesgroup:rw file| directory 创建某组的acl权限
    • setfacl -m d:u:wang:rx directory 对目录创建默认的acl权限,会作为目录下新建文件的默认权限

    新葡亰496net 13


    • setfacl -x u:wang file |directory 删除wang用户的acl权限,删除不干净
    • setfacl -X file.acl directory 根据acl权限文件批量删除acl权限

    • 备份和恢复ACL

    主要的文件操作命令cp和mv都支持ACL,只是cp 命令需要加上-p参数。但是tar 等常见的备份工具是不会保留目录和文件的ACL信息

    getfacl -R /tmp/dir1 > acl.txt 将tmp/dir1目录下所有文件的权限导入到act.txt文件中保存
    setfacl -R -b /tmp/dir1 删除/tmp/dir1目录下所有文件的权限
    setfacl -R --set-file=acl.txt /tmp/dir1 根据act.txt文件中记录的acl权限还原/tmp/dir1目录下所有文件的acl权限

    setfacl --set u::rw,u:wang:rw,g::r,o::- file1

    >为多用户或者组的文件和目录赋予访问权限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 利用编辑好的acl设置文件批量设置acl

    新葡亰496net 14


    • setfacl -m g:salesgroup:rw file| directory 创建某组的acl权限
    • setfacl -m d:u:wang:rx directory 对目录创建默认的acl权限,会作为目录下新建文件的默认权限

    新葡亰496net 15


    • setfacl -x u:wang file |directory 删除wang用户的acl权限,删除不干净
    • setfacl -X file.acl directory 根据acl权限文件批量删除acl权限

    • 备份和恢复ACL
      >主要的文件操作命令cp和mv都支持ACL,只是cp 命令需要加上-p参数。但是tar 等常见的备份工具是不会保留目录和文件的ACL信息
      >>getfacl -R /tmp/dir1 > acl.txt 将tmp/dir1目录下所有文件的权限导入到act.txt文件中保存
      setfacl -R -b /tmp/dir1 删除/tmp/dir1目录下所有文件的权限
      setfacl -R --set-file=acl.txt /tmp/dir1 根据act.txt文件中记录的acl权限还原/tmp/dir1目录下所有文件的acl权限
      setfacl --restore acl.txt 根据act.txt文件中记录的acl权限还原当前目录下所有文件的acl权限
      getfacl -R /tmp/dir1 查看当前目录下所有文件的ACL权限
    • ACL小结

    ACL 文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限), 而非传统的组权限
    getfacl 可看到特殊权限:flags
    通过ACL 赋予目录默认x 权限 , 目录内文件也不会继承x权限
    base ACL 不能删除,即默认的权限
    mask 只影响除所有者和other 的之外的人和组的最大权限
    Mask 需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

    2./etc/gshadow:

    组名:组口令:组管理员列表:以当前组为附加组的用户列表

    安全上下文

    Linux安全上下文

    运行中的程序:进程(process)

    以进程发起者的身份运行:

    root: /bin/cat

    sunan: /bin/cat

    进程所能够访问资源的权限取决于进程的运行者的身份

             超级用户:0,root有至高无上的权限,在进行管理及维护时使用

    3./etc/skel/*

    [root@CentOS7 ~]#ls -a /etc/skel/
    .  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
    

    创建新建用户的家目录的模版文件夹(新建用户的家目录里的文件是从这个文件夹中复制过来)
    其中没有可见文件,全是隐藏文件
    恢复用户家目录原始文件:
    手工创建家目录文件夹 cp -r /etc/skl/.[ ^.]* /home/test1
    自动生成家目录文件夹 cp -r /etc/skl/ /home/test1

    组的类别

    Linux组的类别

    用户的主要组(primary group)

    用户必须属于一个且只有一个主组(并且主组不能删除,除非组不是任何用户的主组)

    组名同用户名,且仅包含一个用户,私有组

    用户的附加组(supplementary group)

    一个用户可以属于零个或多个辅助组

    [root@localhost ~]#id  postfix
    
    uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
    

    查看用户的id和主组和附加组,一个组已经成为了某个账号的主组,这个组是不能删除的。

             普通用户:1000-65535,受到权限限制,一般在宿主目录下有完整权限

    三、命令

    用户和组的配置文件

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

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

    /etc/group:组及其属性信息

    /etc/shadow:用户密码及其相关属性

    /etc/gshadow:组密码及其相关属性

             程序用户:1-999,仅限于运行服务程序

    管理用户的命令:

    passwd文件格式

    login name:登录用户名(sunan)

    passwd:密码(x)

    UID:用户身份编号(1000)

    GID:登录默认所在组编号(1000)

    GECOS:用户全名或注释

    home directory:用户主目录(/home/wang)

    shell:用户默认使用shell (/bin/bash)

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

    查看/etc/passwd帮助,是在第5章。

    [root@localhost ~]#man 5 passwd
    
    PASSWD(5)             Linux Programmer's Manual            PASSWD(5)
    
    NAME
    
           passwd - password file
    
    DESCRIPTION
    
           The /etc/passwd file is a text file that describes user login
    
           accounts for the system.
    
    name:password:UID:GID:GECOS:directory:shell
    

    查看/etc/passwd的帮助,每个字段表示的意思如上面最后一行描述所示,字段间用冒号隔开,其中CECOS是用户全名或注释,其他的应该都是可以理解的。

    [root@localhost ~]#getent passwd
    
    root:x:0:0:root:/root:/bin/bash
    
    bin:x:1:1:bin:/bin:/sbin/nologin
    
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    
    [root@localhost ~]#cat /etc/passwd
    
    root:x:0:0:root:/root:/bin/bash
    
    bin:x:1:1:bin:/bin:/sbin/nologin
    
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    上面两条命令都能查看passwd内容,第一条命令方便点。

    [root@localhost ~]#getent passwd  sunan
    
    sunan:x:1000:1000:sunan:/home/sunan:/bin/bash
    

    想查看某个用户后面直接加上用户名即可,这就是上面说的方便。

    [root@localhost ~]#pwunconv
    
    [root@localhost ~]#getent passwd  sunan
    
    sunan:$6$5ROKagTj/2yRGbuE$zwaSMvClYng4.oIE0fY90cY2SWL4HoIzZ.3da8x0BE1wJSn64fAXbS1E9leXiYvQ04tgv/Hf9E2lAl7BTOW/N0:1000:1000:sunan:/home/sunan:/bin/bash
    

    使用上面命令是使/etc/shadow中的密码回归到/etc/passwd中,但是这样不安全,并且使得/etc/shadow文件丢失。同时对修改用户名,不建议在passwd中直接改,

    因为不止passwd中有用户名,shadow中也有,这样就需要改多个文件。尽量使用命令改用户名,这样涉及这个用户的所有文件都可以修改掉。

    [root@localhost ~]#cat /etc/shadow
    
    cat: /etc/shadow: No such file or directory
    
    [root@localhost ~]#pwconv        
    
    [root@localhost ~]#cat /etc/shadow
    
    root:$6$N23hSc6iqrrtt7A.$OL78oRDi5TwUd1fy6tnzQxeZIA3/jlU3WhGVynPTaymVsJdBftbL6jLGD2l41GLSWs4H0F1DaSV8C.deWCeDl1:17486:0:99999:7:::
    

    再回到系统默认的文件,执行pwconv即可。

    root@localhost ~]#vim /etc/passwd
    
    root:x:1000:0:root:/root:/bin/bash
    
    sunan:x:0:1000:sunan:/home/sunan:/bin/bash
    
    gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
    
    "/etc/passwd" 42L, 2168C written
    

    修改root UID为1000,sunan UID为0这样孙安就拥有了超级管理员权限。如果是root和sunan的UID都不为0了怎么办,这样就没人拥有管理员权限了,其实只要有一个终端还没退出管理员登陆,就可以形式管理员权限,因为在登录的时候就已经授予管理员权限了,只要不退出就一直拥有管理员权限。创建个快照,我们试一试没有管理员系统会发生什么。

    root@localhost ~]#vim /etc/passwd
    
    root:x:1000:0:root:/root:/bin/bash
    
    sunan:x:0:1000:sunan:/home/sunan:/bin/bash
    
    gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
    
    "/etc/passwd" 42L, 2168C written
    

    重启发现启动不了了,重启进入菜单选项,centos7上选择第一项按e键,进入编辑界面。

    新葡亰496net 16

    新葡亰496net 17

    在上图的最后添加 init=/bin/sh

    新葡亰496net 18

    最后的提示可以看到敲Ctrl x启动生效

    新葡亰496net 19

    上图可以看到文件系统是只读的,不能在 / 下面创建文件,通过命令把 / 改为可读写,这样就可以创建文件了。然后,修改/etc/passwd文件中的root的UID为0,exit退出重启即可。

    Centos6.9上:

    新葡亰496net 20

    在上面的最后空格添加 init=/bin/bash 然后敲回车

    新葡亰496net 21

    可以看到文件系统是只读的,不能在 / 下面创建文件,通过命令把 / 改为可读写,这样就可以创建文件了。

    新葡亰496net 22

    通过nano修改root的UID为0,exit退出重启。

    [root@localhost ~]#chfn sunan
    
    Changing finger information for sunan.
    
    Name [sunan]: sunan
    
    Office []: opt
    
    Office Phone []: 12
    
    Home Phone []: 12
    
    Finger information changed.
    
    [root@localhost ~]#getent passwd sunan
    
    sunan:x:1000:1000:sunan,opt,12,12:/home/sunan:/bin/bash
    

    chfn修改用户的信息说明,可以看到用户信息已经修改

            

    1.useradd:

    创建用户
    语法:useradd [选项] 用户名
    -u: 指定UID在 /etc/login.defs文件中,加 -o 不检查重复id
    -g :设定主组(指定的主组必须存在),默认创建并加入一个与用户名相同的组,同时指明GID
    -c :描述用户的注释信息
    -d :以指定的路径(不存在的目录)为家目录
    -s :制定用户默认shell类型
    -G :指明用户的附加组,组必须事先存在
    -N :不创建默认主组,以users作为该用户主组
    -r : 创建系统用户
    -D :显示或更改默认设置, 也就是这个文件下的信息/etc/default/useradd 创建新用户时的默认项目文件
    -D -s :更改默认shell类型
    -D -b:BASE_DIR
    -D -g:GROUP

    shadow文件格式

    登录用户名

    用户密码:一般用sha512加密

    从1970年1月1日起到密码最近一次被更改的时间

    密码再过几天可以被变更(0表示随时可被变更)

    密码再过几天必须被变更(99999表示永不过期)

    密码过期前几天系统提醒用户(默认为一周)

    密码过期几天后帐号会被锁定

    从1970年1月1日算起,多少天后帐号失效

    组的类别:

    2.usermod

    修改用户属性
    语法:usermod [OPTION] login
    -u : 新的UID
    -g:新基本组
    -G:新的附加组,原来的附加组将会被覆盖;若保留原有附加组,则要同时使用-a选项,表示append添加。
    -s:新的默认SHELL类型
    -c:新的注释信息
    -d:新的家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新的家目录并移动原家数据同时使用-m选项
    -l:新的名字
    -L:锁定指定用户,在/etc/shadow密码栏加!
    -U:解锁指定用户,将/etc/shadow密码栏的!拿掉
    -e yyyy-MM-DD:指明用户帐号过期时间
    -f:INACTICE设定非活动期限

    group文件格式

    群组名称:就是群组名称

    群组密码:通常不需要设定,密码是被记录在/etc/gshadow

    GID:就是群组的ID

    以当前组为附加组的用户列表(分隔符为逗号)

    记录一个问题:

    同学问为什么在/etc/group最后只能看到以这个组为附加组用户,不能看到以这个组为主组用户?

    答:/etc/group记录了 组名 组密码 组ID 附加组列表,以当前组为主组的用户是记录到/etc/passwd中的,通过对应组ID就可以找到这个以这个组为主组的用户。

             基本组:用户必须属于一个且只有一个主组

    3. userdel

    删除用户
    语法:userdel [OPTION] login
    -r:删除用户家目录

    gshdow文件格式

    群组名称:就是群组名称

    群组密码:(组默认没有口令)

    组管理员列表:组管理员的列表,更改组密码和成员(添加和删除用户账号)

    默认root账号是组管理员

    以当前组为附加组的用户列表:(分隔符为逗号) same as /etc/group

             附加组:一个用户可以属于零个或多个辅助组

    4.id

    查看用户相关的ID信息
    -u:显示UID
    -g:显示GID
    -G:显示用户所属组的ID
    -n:显示名称需配合ugG使用

    用户和组管理命令

    用户管理命令

    useradd

    usermod

    userdel

    组帐号维护命令

    groupadd

    groupmod

    groupdel

     

    5.su

    切换用户
    语法: su UserName:不完全切换,不读取目标用户的配置文件,不改变当前用户工作目录
    ​ su - UserName:完全切换,读取用户的配置文件,切换至家目录
    换个用户执行命令:su [-] UserName -c 'COMMAND'

    用户创建: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 不创建家目录,用于非系统用户

    [root@localhost ~]#useradd -u 1005 -o merry
    
    [root@localhost ~]#useradd -u 1005 -o lilei
    
    [root@localhost ~]#cat /etc/passwd | tail -2
    
    merry:x:1005:1005::/home/merry:/bin/bash
    
    lilei:x:1005:1006::/home/lilei:/bin/bash
    

    创建两个相同的id的用户可以看到UID相同但GID和家目录都不相同,得到的权限一样。这两个用户谁在前登陆显示谁。

    [root@localhost ~]#useradd -r -m -d /app/nginx nginx
    
    [root@localhost ~]#ls /app
    
    a     aaa.log  fstab       ls.out   new1win.txt  who.out    win.txt
    
    aa    a.txt    linux.txt   man.txt  newwin.txt   win1.txt
    
    aaaa  f        lost found  name     nginx        win22.txt
    

    -r默认不创建家目录,系统用户,-m强制创建家目录。有时候就是指定的1-500的uid,系统也认为是一个普通的用户,因为没有-r指定。

    [root@localhost ~]#useradd -r -m -d /app/zabbix -s /sbin/nologin zabbix
    

    设置一个服务使用的系统用户。

    用户和组的配置文件:

    6.passwd

    语法:passwd [OPTIONS] UserName 修改指定用户密码,仅root用户权限
    passwd:修改自己的密码
    -l:锁定指定用户
    -u:解锁指定用户
    -e:强制用户下次登录修改密码
    -n:mindays 指定最短使用期限
    -x:maxdays指定最大使用期限
    -w:warndays提前多少天开始警告
    组和权限管理基础,用户和组及权限。-i:inactivedays非活动期限
    --stdin:从标准输入接受用户密码

    [root@CentOS7 ~]#echo '199310' |passwd --stdin gentoo
    Changing password for user gentoo.
    passwd: all authentication tokens updated successfully.
    

    创建用户:useradd

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

    显示或更改默认设置

    useradd-D =cat /etc/default/useradd

    useradd–D -s SHELL

    useradd–D –b BASE_DIR

    useradd–D –g GROUP

             /etc/password

    7.chage:

    修改用户密码策略
    语法:chage [OPTION] LOGIN

    [root@CentOS7 ~]#chage gentoo
    Changing the aging information for gentoo
    Enter the new value, or press ENTER for the default
        Minimum Password Age [0]: 
        Maximum Password Age [99999]: 
        Last Password Change (YYYY-MM-DD) [2017-07-24]: 
        Password Expiration Warning [7]: 
        Password Inactive [-1]: 
        Account Expiration Date (YYYY-MM-DD) [-1]: 
    

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

    /etc/default/useradd

    /etc/skel/*

    /etc/login.defs

    newusers passwd格式文件批量创建用户

    将和/etc/passwd文件中一样的格式的内容保存到一个文件a.txt中

    newusers a.txt即可批量创建用户,即同时改变了那4个文件。

    chpasswd 批量修改用户口令

     在b.txt文件中存放用户名:密码的格式,chpasswd b.txt

                       用户名:密码:UID:GID:注释:宿主目录:默认shell

    管理组的命令:

    用户属性修改

    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: 指明用户账号过期日期

    -f INACTIVE: 设定非活动期限

    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root),1000(sunan)
    
    [root@localhost ~]#usermod -G "" sunn
    
    [root@localhost ~]#id sunn          
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn)
    
    [root@localhost ~]#usermod -aG root,sunan sunn
    
    [root@localhost ~]#id
    
    uid=0(root) gid=0(root) groups=0(root)
    
    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root),1000(sunan)
    
    [root@localhost ~]#usermod -G sunn sunn
    
    [root@localhost ~]#id sunn            
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn)
    

    上面是两种去除用户附加组的方法,一种是用空的去覆盖原来的附加组,另一种是使用主组去覆盖附加组,因为主组只能是主组不能是附加组,所以将附加组清空了。

    [root@localhost ~]#usermod -d /app/sunn -m /home/sunn
    
    [root@localhost /app/sunn]#ls -a /app/sunn
    
    .   .bash_history  .bash_profile  .cache   .mozilla
    
    ..  .bash_logout   .bashrc        .config
    

    其中的-d是指定家目录 -m是搬家。

             /etc/group

    8.groupadd

    创建组
    语法:groupadd [OPTION] GROUPNAME
    -g :GID指明GID号
    -r:创建系统组

    删除用户

    userdel[OPTION]... login

    -r: 删除用户家目录

                       组名:组密码:GID:以当前组为附加组的用户列表

    9.groupmod

    groupmod [OPTION] group
    -n:新名字
    -g:新GID

    查看用户相关的ID信息

    id [OPTION]... [USER]

    -u: 显示UID

    -g: 显示GID

    -G: 显示用户所属的组的ID

    -n: 显示名称,需配合ugG使用

    [root@localhost /app]#userdel sunn
    
    [root@localhost /app]#cd /home
    
    [root@localhost /home]#ll
    
    total 24
    
    drwx------  5 bb     sunan  4096 Nov 16 17:21 bb
    
    drwx------  3 gentoo gentoo 4096 Nov 15 08:58 gentoo
    
    drwx------  3 merry  lilei  4096 Nov 16 18:46 lilei
    
    drwx------  3 merry  merry  4096 Nov 16 18:46 merry
    
    drwx------. 5 sunan  sunan  4096 Nov 16 10:29 sunan
    
    drwx------  5   1002   1002 4096 Nov 16 15:48 sunn
    

    删除用户只是用户名没了,其他的一切还在。

    [root@localhost /home]#useradd -u 1002 sunn
    
    useradd: warning: the home directory already exists.
    
    Not copying any file from skel directory into it.
    
    Creating mailbox file: File exists
    
    [root@localhost /home]#ll
    
    total 24
    
    drwx------  5 bb     sunan  4096 Nov 16 17:21 bb
    
    drwx------  3 gentoo gentoo 4096 Nov 15 08:58 gentoo
    
    drwx------  3 merry  lilei  4096 Nov 16 18:46 lilei
    
    drwx------  3 merry  merry  4096 Nov 16 18:46 merry
    
    drwx------. 5 sunan  sunan  4096 Nov 16 10:29 sunan
    
    drwx------  5 sunn   sunn   4096 Nov 16 15:48 sunn
    

    创建一个相同名字的用户又可以找回原来用户了

    [root@localhost /home]#userdel -r sunn
    

    这样把家目录和邮箱也删除了,-r命令太危险。

    [root@localhost /home]#userdel -r -f  sunn
    
    userdel: user sunn is currently used by process 8453
    

    即使有进程正在使用也可以使用-f选项直接删除

             /etc/shadow

    10.groupdel

    跟组名,删除组

    切换用户或以其他用户身份执行命令

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

    切换用户的方式:

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

    su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换

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

    换个身份执行命令:

    su[-] UserName -c 'COMMAND'

    选项:-l --login

    su-l UserName相当于su - UserName

    [sunn@localhost ~]$su - root -c 'cat /etc/shadow'
    
    Password:
    
    root:$6$N23hSc6iqrrtt7A.$OL78oRDi5TwUd1fy6tnzQxeZIA3/jlU3WhGVynPTaymVsJdBftbL6jLGD2l41GLSWs4H0F1DaSV8C.deWCeDl1:17486:0:99999:7:::
    
    bin:*:17486:0:99999:7:::
    

    使用管理员权限不用多次切换。

                       用户名:密码:上次修改密码的天数:密码最短有效天数:提前多少天警告过期:过期多少天禁用:失效日期:保留字段

    11.gpasswd

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

    设置密码

     passwd[OPTIONS] UserName: 修改指定用户的密码,仅root用户权限

     passwd: 修改自己的密码

     常用选项:

    -l:锁定指定用户

    -u:解锁指定用户

    -e:强制用户下次登录修改密码

    -n mindays: 指定最短使用期限

    -x maxdays:最大使用期限

    -w warndays:提前多少天开始警告

    -iinactivedays:非活动期限

    --stdin:从标准输入接收用户密码

    echo "PASSWORD" | passwd—stdinUSERNAME

             /etc/gshadow

    12.newgrp

    临时切换主组
    切换主组以后新建立的文件的所属组改变

    用户相关的其它命令

     chfn指定个人信息

     chsh指定shell

     finger

                       组名称:组密码:组管理员列表:以当前组为附加组的用户列表

    13.groupmems

    更改和查看组成员
    语法:groupmems [OPTION]或[action]
    options:
    -g groupname :默认是当前用户的所属组,-g更改为指定组

    [root@CentOS7 ~]#groupmems -l -g admins
    harry  natasha 
    

    Actions:
    -a :指定用户加入组
    -d:从组中删除用户
    -p:从组中清除所有成员
    -l:显示组成员列表

    创建组

     groupadd[OPTION]... group_name

    -g GID: 指明GID号;[GID_MIN, GID_MAX]

    -r: 创建系统组

    CentOS 6: ID<500

    CentOS 7: ID<1000

    [root@localhost ~]#usermod -G sunan sunn
    
    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),1000(sunan)
    
    [root@localhost ~]#usermod -G root sunn
    
    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root)
    

    通过上面可以看到一个账号用于一个附加组的情况下,再添加附加组会导致原来的附加组被替换掉。解决办法添加-a(append)选项即可

    [root@localhost ~]#groups sunn
    
    sunn : sunn root sunan
    

    使用groups命令查看用户属于的所有组,其中第一个是主组,后面是附加组。

    [sunn@localhost ~]$newgrp  sunan
    
    [sunn@localhost ~]$id
    
    uid=1002(sunn) gid=1000(sunan) groups=1000(sunan),0(root),1002(sunn)
    

    切换主组命令 newgrp

     

    14.groups

    跟用户名,查看用户所属组列表

    修改和删除组

     组属性修改:groupmod

    groupmod[OPTION]... group

    -n group_name: 新名字

    -g GID: 新的GID

     组删除:groupdel

    groupdelGROUP

    [root@localhost /home]#groupdel sunn
    
    groupdel: cannot remove the primary group of user 'sunn'
    

    组下面存在以这个组为主组的用户,那么这个组不能删除。

    密码加密机制:

    批量创建用户:

    newuser.txt 格式和/etc/passwd相同

    更改组密码

     组密码:gpasswd

     gpasswd[OPTION] GROUP

    -a user 将user添加至指定组中

    -d user 从指定组中移除用户user

    -A user1,user2,... 设置有管理权限的用户列表

     newgrp命令:临时切换主组

    如果用户本不属于此组,则需要组密码

    [sunn@localhost ~]$newgrp aa
    
    Password:
    
    [sunn@localhost ~]$groups
    
    aa root sunan sunn
    

    如果用户本不属于此组,则需要组密码,组密码设定gpasswd。但是newgrp只能临时生效,没有写到配置文件中。

    注意:一般情况下,组是不设口令的,因为不安全,普通用户只要知道组口令就可以把自己加到组里面,拥有一些权限。组不设口令,就只能使用root添加了。

    sunn:!::
    
    [root@localhost ~]#gpasswd sunn
    
    Changing the password for group sunn
    
    New Password:
    
    Re-enter new password:
    
    [root@localhost ~]#getent gshadow sunn
    
    sunn:$6$ZMWfIRMv$jbirRff67fLIEd9/VxdrQnpz0xLGuRYl068Bj3QRtdO/46Xll1bLD6z92nvQT252UTb94mNmjC/q.uHNv.zP20::
    

    sunn组默认没有密码,通过gpasswd命令添加密码。

    [root@localhost ~]#getent gshadow aa
    
    aa:$6$FCDelTjwb4$r9SSfGGKi.fpb1ITJWczoeEUxHxlZMv7.CXT47hNDVLvGycLQ2IbSU9ZHy45WD4fPJTt9jqWMCZgeUu5XkDBC1::
    
    [root@localhost ~]#gpasswd -A sunn aa
    
    [root@localhost ~]#getent gshadow aa
    
    aa:$6$FCDelTjwb4$r9SSfGGKi.fpb1ITJWczoeEUxHxlZMv7.CXT47hNDVLvGycLQ2IbSU9ZHy45WD4fPJTt9jqWMCZgeUu5XkDBC1:sunn:
    

    组默认没有管理员,使用gpasswd -A添加管理员。

    [sunn@localhost ~]$gpasswd -a sunan aa
    
    Adding user sunan to group aa
    
    [sunn@localhost ~]$
    

    因为sunn用户是aa组的管理员这样sunn用户就可以向aa组添加成员了。

     

    批量修改口令:

    cat pass.txt | chpasswd pass.txt格式是username : password

    更改和查看组成员

    groupmems[options] [action]

    options:

    -g, --group groupname更改为指定组(只有root)

    Actions:

    -a, --add username 指定用户加入组

    -d, --delete username 从组中删除用户

    -p, --purge 从组中清除所有成员(清空的是附属组,主组不能清除)

    -l, --list 显示组成员列表

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

    [root@localhost /home]#groups sunn
    
    sunn : sunn
    
    [root@localhost /home]#groupmems  -l -g root
    
    Gentoo
    

    显示用户所属组,显示组中用户。

    用户和组管理命令:

    四、权限管理

    文件权限

    文件属性

    -rw-------. 1 root root 1914 Nov 7 17:46 anaconda-ks.cfg

    文件类型、selinux或acl、文件权限、连接数、文件所有者、文件所属组、文件大小、文件最后被修改时间、文件名

    文件属性操作

    chown设置文件的所有者

    chgrp设置文件的属组信息

             创建用户:useradd [options] LOGIN

    文件权限:

    1. r 读权限:查看内容 文件类型
    2. w 写权限:可以修改文件内容,写文件与删除文件没关系
      删除文件既是对该目录的修改。
      目录中的文件能不能删除,与目录中的文件权限无关,与目录的权限有关.
    3. x 执行权限:是否可以运行,对root也有限效。
    4. X执行权限: X若是目录那么既 x权限,若文件原本有人有x权限那么 x权限若没人有x权限则不 任何权限

      ### 目录权限:

      r读权限:可以ls查看目录内的文件列表
      w写权限:可以创建或者删除目中的文件,但是要有x权限
      x执行权限:可以cd进入目录,可以看ls -l目录内文件元数据

      ### chown:

      修改文件的所属主
      语法:chown [option]...[OWNER] 或:[group] FILE
      OPTION : -R 递归
      OWNER
      OWNER:GROUP 改变文件的所有者和所属组
      :GROUP
      命令中的冒号可以用.代替
      chown username file

      ### chgrp

      修改文件的所属组
      语法: chgrp [OPTION] groupname file
      选项:-R 递归

      ### chomd :

      修改文件的权限
      用法:

    5. 模式法:chmod who opt per file
      chmod 命令
      who对谁操作: u g o a=all
      opt 什么操作: - =
      per权限:r w x

    [root@CentOS7 ~]#ll
    -rw-r--r--. 1 root root    0 Jul 24 16:23 f1
    [root@CentOS7 ~]#chmod o w f1
    [root@CentOS7 ~]#ll
    -rw-r--rw-. 1 root root    0 Jul 24 16:23 f1
    
    [root@CentOS7 ~]#ll f1
    -rw-r--rw-. 1 root root 0 Jul 24 16:23 f1
    [root@CentOS7 ~]#chmod u=rw,g=r,o= f1
    [root@CentOS7 ~]#ll f1
    -rw-r-----. 1 root root 0 Jul 24 16:23 f1
    

    用cp命令复制若覆盖了源文件那么只覆盖文件内容,保留文件的元属性
    chmod --reference=RFILE FILE
    参考RFILE文件的权限,将FILE修改为RFILE的权限模式

    [root@CentOS7 ~]#ll f1
    -rw-r-----. 1 root root 0 Jul 24 16:23 f1
    [root@CentOS7 ~]#chmod --reference=/etc/shadow f1
    [root@CentOS7 ~]#ll /etc/shadow
    ----------. 1 root root 1748 Jul 25 10:54 /etc/shadow
    [root@CentOS7 ~]#ll f1
    ----------. 1 root root 0 Jul 24 16:23 f1
    
    1. 数字法:
      chmod 数字 filename
    [root@CentOS7 ~]#ll f1
    ----------. 1 root root 0 Jul 24 16:23 f1
    0   0   0
    [root@CentOS7 ~]#chmod 751 f1
    [root@CentOS7 ~]#ll f1
    -rwxr-x--x. 1 root root 0 Jul 24 16:23 f1
      7  5  1
    

    修改文件的属主和属组

    修改文件的属主:chown

    chown[OPTION]... [OWNER][:[GROUP]] FILE...

    用法:

    OWNER

    OWNER:GROUP

    :GROUP

    命令中的冒号可用.替换

    -R: 递归

    chown[OPTION]... --reference=RFILE FILE...

    修改文件的属组:chgrp

    chgrp[OPTION]... GROUP FILE...

    chgrp[OPTION]... --reference=RFILE FILE...

    -R 递归

                       -u    指定uid

    五、默认权限

    umask
    新建文件和文件夹的默认权限
    umask:查看
    umask 跟数字:设定
    root的umask是002
    非特权用户的umask是022

    文件权限

    文件的权限主要针对三类对象进行定义

    owner: 属主, u

    group: 属组, g

    other: 其他, o

    每个文件针对每类访问者都定义了三种权限

    r: Readable

    w: Writable

    x: eXcutable

    文件:

    r: 可使用文件查看类工具获取其内容

    w: 可修改其内容

    x: 可以把此文件提请内核启动为一个进程

    目录:

    r: 可以使用ls查看此目录中文件列表

    w: 可在此目录中创建文件,也可删除此目录中的文件

    x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录

    X:只给目录x权限,不给文件x权限

                       -o    不检查uid的唯一性

    数字算法:

    umask 文件设定权限=666文件默认权限/777目录默认权限
    算法当中对于目录来讲:不存在执行权限不安全所以用777直接减umask就得到了目录权限。
    对于文件来讲:666-umask
    观察结果:有奇数那么对应奇数位置各加1,偶数不变
    真实作用:从对应位中将Umask指定权限去除
    文件默认权限 666 110 110 110
    umask设置权限 057 000 101 111
    新建文件权限 110 010 000 得620

    [root@CentOS7 ~]#umask
    0022
    [root@CentOS7 ~]#>f2
    [root@CentOS7 ~]#ll f2
    -rw-r--r--. 1 root root 0 Jul 25 16:02 f2
    [root@CentOS7 ~]#umask 057
    [root@CentOS7 ~]#umask 
    0057
    [root@CentOS7 ~]#>f3
    [root@CentOS7 ~]#ll f3
    -rw--w----. 1 root root 0 Jul 25 16:03 f3
    

    修改文件权限

    chmod[OPTION]... OCTAL-MODE FILE...

    -R: 递归修改权限

    chmod[OPTION]... MODE[,MODE]... FILE...

    MODE:

    修改一类用户的所有权限:

    u= g= o= ug= a= u=,g=

    修改一类用户某位或某些位权限

    u u-g g-o o-a a- -

    chmod[OPTION]... --reference=RFILE FILE...

    参考RFILE文件的权限,将FILE的修改为同RFILE

                       -g    指定基本组

    模式法:

    [root@CentOS7 ~]#umask 
    0022
    [root@CentOS7 ~]#umask u=rw,g=r,o=
    [root@CentOS7 ~]#umask 
    0137
    [root@CentOS7 ~]#>f6
    [root@CentOS7 ~]#ll f6
    -rw-r-----. 1 root root 0 Jul 25 16:11 f6
    

    权限设置示例

    chgrp sales testfile

    chown root:admins testfile

    chmod u wx,g-r,o=rx file

    chmod -R g rwX /testdir

    chmod 600 file

    chown mage testfile

    所有者可以执行chgrp命令,不能执行chown,因为你不能把你生成的文件变成别人的。同时要删除一个文件,必须要对文件所在的目录有写权限,不然删除不掉,

    因为文件名和节点对应信息在目录的数据中存放。

    读和写权限对root是不生效,但是执行权限对root生效。root比较特殊,只要是有执行权限就行不管是u g o上的,但其他用户就必须严格执行先后匹配顺序,先匹配了,后面的权限就不能再匹配了。

    文件能不能删不是 取决于文件本身,而是取决于文件的家目录。

                       -C    用户的注释信息

    umask -p :

    输出可被调用,/etc/bashrc是全局设置,~/.bashrc用户设置

    [root@CentOS7 ~]#umask -p
    umask 0137
    [root@CentOS7 ~]#umask -p >> .bashrc
    [root@CentOS7 ~]#cat .bashrc
    # .bashrc
    ...
    umask 0137
    

    新建文件和目录的默认权限

    umask值 可以用来保留在创建文件权限

    新建FILE权限: 666-umask

    如果所得结果某位存在执行(奇数)权限,则将其权限 1,偶数不变。

    新建的文件为了安全考虑,默认不加执行权限。

    新建DIR权限: 777-umask

    非特权用户umask是002

    root的umask是022

    umask: 查看

    umask #: 设定

    umask 002

    umask–S 模式方式显示

    umask–p 输出可被调用

    全局设置:/etc/bashrc用户设置:~/.bashrc

    [root@centos7 ~]#umask
    
    0022
    

    查看当前用户的umask值

    [sunan@centos7 ~]$umask 644
    
    [sunan@centos7 ~]$touch a
    
    [sunan@centos7 ~]$ll
    
    total 0
    
    -----w--w-. 1 sunan sunan 0 Nov 18 09:43 a
    

    设定用户的umask值,创建文件查看成功,但是只能临时生效,注销登陆失效。

    [sunan@centos7 ~]$umask
    
    0002
    
    [sunan@centos7 ~]$pwd
    
    /home/sunan
    
    [sunan@centos7 ~]$nano .bashrc
    
    umask 026
    
    [sunan@centos7 ~]$. .bashrc
    
    [sunan@centos7 ~]$umask     
    
    0026
    

    永久生效修改用户配置文件信息,添加umask 026执行生效,只是针对此用户生效,如果是需要其他用户生效,需要修改/etc/bashrc。

    [root@centos7 ~]#umask 145 ;touch f1
    
    [root@centos7 ~]#ll f1
    
    -rw--w--w-. 1 root root 0 Nov 18 09:54 f1
    

    可以看到将umask修改为145,默认创建的文件f1权限应该是521,但实际是622,因为文件默认没有执行权限,奇数 1。

    总结:其实真正的计算不是这样的,是用666的二进制与掩码的二进制记性计算

    110110110

    001100101     其中掩码中的0表示不关心,1表示从最大权限中去掉对应权限。

    110010010=622 只和文件有关系,和目录没关系,因为目录不用考虑安全问题。

                       -d      指定用户家目录

    umask -S 模式方式显示:

    [root@CentOS7 ~]#umask -S
    u=rw,g=r,o=
    

    Linux文件系统上的特殊权限

    SUID, SGID, Sticky

    三种常用权限:r, w, x user, group, other

    安全上下文

    前提:进程有属主和属组;文件有属主和属组

    (1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

    (2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组

    (3) 进程访问文件时的权限,取决于进程的发起者

    (a) 进程的发起者,同文件的属主:则应用文件属主权限

    (b) 进程的发起者,属于文件属组;则应用文件属组权限

    (c) 应用文件“其它”权限

                       -s     指定用户默认shell

    六、特殊权限

    前提:进程有属主和属组;文件有属主和属组

    (1) 任何一个可执行程序文件能不能启动为进程,取决发起者 对程序文件是否拥有执行权限

    (2) 启动为进程之后,其进程的属主为发起者,进程的属组为 发起者所属的组

    (3) 进程访问文件时的权限,取决于进程的发起者

    (a) 进程的发起者,同文件的属主:则应用文件属主权限

    (b) 进程的发起者,属于文件属组;则应用文件属组权限

    (c) 应用文件“其它”权限

    可执行文件上SUID权限

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属主为原程序文件的属主

    SUID只对二进制可执行程序有效

    SUID设置在目录上无意义

    权限设定:

    chmod u s FILE...

    chmod u-s FILE...

                       -G    指定用户附加组

    SUID 4

    作用在文件所有者上
    作用:作用在可执行的二进制程序上,将当前运行者身份切换成该程序所有者的身份,继承该文件所有者对该文件所具有的权限。
    作用在目录上,用户进入该目录集成该目录所属组所具有的权限。

    可执行文件上SGID权限

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属组为原程序文件的属组

    权限设定:

    chmod g s FILE...

    chmod g-s FILE...

                       -N    不创建私有组

    SGID 2

    作用在文件所属组上
    作用在目录上,目录中创建的新文件将自动集成目录的所属组。
    以上两个权限都只能提高权限

    目录上的SGID权限

    默认情况下,用户创建文件时,其属组为此用户所属的主组

    一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

    通常用于创建一个协作目录

    权限设定:

    chmod g s DIR...

    chmod g-s DIR...

    [root@centos7 ~]#chmod g s aaaa/
    
    [root@centos7 ~]#ll -d aaaa/   
    
    drwxr-sr-x. 2 root root 4096 Nov 18 14:21 aaaa/
    
     [root@centos7 ~]#chmod  0755  aaaa/
    
    [root@centos7 ~]#ll -d aaaa/
    
    drwxr-sr-x. 2 root root 4096 Nov 18 14:21 aaaa/
    
    [root@centos7 ~]#echo aaa>a.txt
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r--r--. 1 root root 4 Nov 18 14:24 a.txt
    
    [root@centos7 ~]#chmod g s a.txt
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r-Sr--. 1 root root 4 Nov 18 14:24 a.txt
    
    [root@centos7 ~]#chmod g x a.txt       
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r-sr--. 1 root root 4 Nov 18 14:24 a.txt
    
    [root@centos7 ~]#chmod 0654 a.txt
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r-xr--. 1 root root 4 Nov 18 14:24 a.txt
    

    使用数字能去掉文件的SUID和SGID,但不能去掉目录的SGID和SUID。man chmod给出了详细的解释。

                       -r     创建系统用户

    STICKY 1

    作用在文件other位

    • 粘滞位
    • 具有写权限的目录通常用户可以删除该目录的任何文件,无论文件的权限或用友权
    • 在目录设置Sticky,只有文件的所有者有或者root可以删除该文件
    • sticky设置在文件上无意义
      权限设定:
      chmod o t DIR
      chmod o-t DIR

      ### 防止误操作:

      chattr i 文件名 禁止该文件被删除、更改、改名
      ​ -i 解除锁定
      ​ a:只能追加内容,不能更改删减
      lsattr 文件名 显示特定属性

      七、ACL:特殊权限

      linux系统中只对文件设置了三种角色所有者、所属组和other所以指定权限的灵活性有限。复杂环境中对于文件来说设置的角色就不止三个了。ACL就能对文件设置更多的角色从而设置复杂的权限控制。
      ACL需要文件系统的支持,CentOS7版本之前默认手工创建的ext4文件系统无ACL功 能,需手动增加。
      CentOS7 默认创建的xfs和ext4文件系统具有ACL功能 。

      ### setfacl

      语法:setfacl -m u/g : user/group :权限 文件名/目录
      选项:
      -m:设置ACL权限
      -Rm:递归设定目录的ACL权限
      -X:删除指定用户
      -b:删除所有
      -k:删除指定目录的ACL权限
      -d :default 作用于目录新建文件默认权限
      getfacl file1 | setfacl --set-file=- file2 复制file1 的acl权限给file2
      ACL生效顺序:所有者,自定义用户,自定义组,其他人

      ### getacl

      跟文件,查看该文件的ACL相关权限。

      ### mask:

      mask通俗来说就是自定义用户或者自定义所属组权限的高压线,至作用于acl自定义的用户或者组。
      一旦设置ACL权限,那么文件显示的所属组权限既是mask限定的权限
      设定mask权限限定以后,如果更改用户的权限 mask权限限定会发生改变。
      备份和恢复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

    Sticky 位

    具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

    在目录设置Sticky 位,只有文件的所有者或root可以删除该文件

    sticky 设置在文件上无意义,因为删除文件要对文件所在目录有权限。

    目录上有rwxrwxrws权限,不能删除文件,不能对文件重命名,mv f1 f2不能重命名,因为重命名相当于删了重建。可以读文件,可以向文件中追加内容和清空文件内容。

    [root@centos7 ~]#ll -d /tmp
    
    drwxrwxrwt. 15 root root 4096 Nov 18 14:30 /tmp
    

    tmp目录是大家公用目录,能在里面创建文件但是不能删除别人建的文件。

    权限设定:

    chmod o t DIR...

    chmod o-t DIR...

    例如:ls-ld /tmp

    drwxrwxrwt 12 root root 4096 Nov215:44 /tmp

    [root@centos7 /aa]#ll /etc/shadow
    
    ----------. 1 root root 1346 Nov 18 12:35 /etc/shadow
    
    sunan:$6$yBIaPLgZ$AHxtOXkPE0HZVto5.2zSbYWU/EBk3Hy0NzJO/NQ1ZCKFC9XvuWoD9QW8nGZ8IWiVlDm6rj8E2eJnIDhxK8kyh0:17488:0:99999:7:::
    

    对于sunan用户对文件/etc/shadow没有任何权限为什么修改了文件的内容。

    [root@centos7 /aa]#ll /usr/bin/passwd
    
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    

    是因为特殊权限s的作用,使得运行它的用户临时自动继承它的所有者root的权限,他再通过passwd命令去修改/etc/shadow文件。

    [root@centos7 /aa]#chmod u s /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano
    
    -rwsr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    
    [root@centos7 /aa]#chmod u-s /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano      
    
    -rwxr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    
    [root@centos7 /aa]#chmod 4755 /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano       
    
    -rwsr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    
    [root@centos7 /aa]#chmod 755 /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano      
    
    -rwxr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    

    为nano命令添加和删除s权限。

    [root@centos7 /aa]#chmod u-x /bin/passwd
    
    [root@centos7 /aa]#ll /bin/passwd
    
    -rwSr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
    
    [root@centos7 /aa]#chmod u x /bin/passwd
    
    [root@centos7 /aa]#ll /bin/passwd
    
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
    

    去除x权限使得s变成了S,即s权限有问题了。

    SUID一般不去手动设置,是开发者设置好,只要知道是做什么的就行。

                       -e    指定失效时间

    特殊权限数字法

    SUID SGID STICKY

    000 0

    001 1

    010 2

    011 3

    100 4

    101 5

    110 6

    111 7

    chmod4777 /tmp/a.txt

                       -M   不创建主目录

    权限位映射

    SUID: user,占据属主的执行权限位

    s: 属主拥有x权限

    S:属主没有x权限

    SGID: group,占据属组的执行权限位

    s: group拥有x权限

    S:group没有x权限

    Sticky: other,占据other的执行权限位

    t: other拥有x权限

    T:other没有x权限

             相关文件:

    设定文件特定属性

    chattr i 不能删除,改名,更改(包括root)

    -i 去除属性。

    chattr a 只能追加内容

    nano不能追加,因为不知道你是不是在修改文件,即使你在最后加东西。

    echo sdfa>>a.txt 可以追加。

    chattr A  不会更新读时间

    lsattr 显示特定属性

    [root@centos7 /app]#groupmems  -l -g opts
    
    sun  sunny
    
    [sunny@centos7 /app/sharegroup]$ll
    
    total 0
    
    -rw-rw-r--. 1 sun   sun   0 Nov 18 15:00 sun
    
    -rw-rw-r--. 1 sunny sunny 0 Nov 18 15:01 sunny
    
    [sunny@centos7 /app/sharegroup]$echo new>>sun
    
    bash: sun: Permission denied
    

    虽然两个用户属于一个组,但是相互之间还是改不了文件,因为文件的所属组不一样。

    [root@centos7 /app]#chgrp opts sharegroup/sun*
    
    [root@centos7 /app]#cd sharegroup/
    
    [root@centos7 /app/sharegroup]#ll
    
    total 0
    
    -rw-rw-r--. 1 sun   opts 0 Nov 18 15:00 sun
    
    -rw-rw-r--. 1 sunny opts 0 Nov 18 15:01 sunny
    
    [root@centos7 /app/sharegroup]#su sun
    
    [sun@centos7 /app/sharegroup]$echo aa>>sunny
    
    [sun@centos7 /app/sharegroup]$cat sunny
    
    aa
    

    把文件的所属组改成一样就可以相互修改数据了。 但是用户每次新建的文件的所属组每次都会变成原来的组,这样需要每次都要修改文件的所属组。解决办法:只要在组权限上面天剑SGID权限即可解决。

    [root@centos7 /app]#chmod g s sharegroup/
    
    [root@centos7 /app]#ll
    
    drwxrws---. 2 root opts  4096 Nov 18 15:14 sharegroup
    
    [sun@centos7 /app/sharegroup]$touch sun1
    
    [sun@centos7 /app/sharegroup]$ll
    
    total 4
    
    -rw-rw-r--. 1 sun   sun  0 Nov 18 15:14 a
    
    -rw-rw-r--. 1 sun   opts 0 Nov 18 15:00 sun
    
    -rw-rw-r--. 1 sun   opts 0 Nov 18 15:16 sun1
    
    -rw-rw-r--. 1 sunny opts 3 Nov 18 15:09 sunny
    

    g s权限后,所有新建的文件的所属组就变成了opts。一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

    通常用于创建一个协作目录

    注意:SUID和SGID、Sticky只是针对普通的用户生效,对root无效。

                       /etc/skel  模板文件

    访问控制列表

    ACL:Access Control List,实现灵活的权限管理

    除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

    新葡亰496net,CentOS7  默认创建的xfs和ext4文件系统具有ACL功能

    CentOS7  之前版本,装完系统有新建的分区,即默认手工创建的ext4文件系统无ACL功能,需手动增加

    tune2fs –o acl/dev/sdb1

    mount –o acl/dev/sdb1 /mnt/test

    ACL生效顺序:所有者,自定义用户,自定义组,其他人

    为多用户或者组的文件和目录赋予访问权限rwx

    mount -o acl /directory

    getfacl file |directory

    setfacl -m u:wang:rwx file|directory

      -m:设置后续的参数给文件用。 

    setfacl -Rm g:sales:rwX directory

      -R:递归赋予属性

    setfacl -M file.acl file|directory

    setfacl -m g:salesgroup:rw file| directory

    setfacl -m d:u:wang:rx directory

    setfacl -x u:wang file |directory

    setfacl -X file.acl directory

    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::rxfile

    --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

    [root@centos7 /app]#setfacl  -m u:sun:rw f1
    
    [root@centos7 /app]#getfacl f1
    
    # file: f1
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sun:rw-
    
    group::r--
    
    mask::rw-
    
    other::r--
    

    mask:除了属主和other的其他的用户的最高权限不能超过mask。

    同时设置group的权限不能使用chmod  g 权限 f1这种方式,这种方式设置的是mask权限,要使用setfacl -m group::x f1这种形式。

    [root@centos7 /app]#echo u:sun:rwx > sun.acl
    
    [root@centos7 /app]#cat sun.acl
    
    u:sun:rwx
    
    [root@centos7 /app]#touch d2
    
    [root@centos7 /app]#setfacl  -R -M sun.acl d2
    
    [root@centos7 /app]#getfacl d2
    
    # file: d2
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sun:rwx
    
    group::r--
    
    mask::rwx
    
    other::r--
    

    通过文件创建权限 -M选项的作用。

    [root@centos7 ~]#setfacl -R -m sunan:rw /app/html
    
    [root@centos7 ~]#getfacl /app/html/c.html       
    
    getfacl: Removing leading '/' from absolute path names
    
    # file: app/html/c.html
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sunan:rw-
    
    group::r--
    
    mask::rw-
    
    other::r--
    
    [root@centos7 ~]#touch /app/html/b.html
    
    [root@centos7 ~]#getfacl !$
    
    getfacl /app/html/b.html
    
    getfacl: Removing leading '/' from absolute path names
    
    # file: app/html/b.html
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    group::r--
    
    other::r--
    

    事实表明上面创建的ACL权限只对设置ACL权限前生成的文件有效,对以后新的生成的文件无效。

    [root@centos7 ~]#setfacl -R -m d:sunan:rw /app/html
    
    [root@centos7 ~]#touch /app/html/d.html
    
    [root@centos7 ~]#getfacl !$
    
    getfacl /app/html/d.html
    
    getfacl: Removing leading '/' from absolute path names
    
    # file: app/html/d.html
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sunan:rw-
    
    group::r-x                      #effective:r--
    
    mask::rw-
    
    other::r--
    

    要相对以后的文件生效需要加上d选项。

    [root@centos7 ~]#getfacl -R /app/html/ >/app/html.acl
    
    getfacl: Removing leading '/' from absolute path names
    
    [root@centos7 ~]#setfacl  -Rb /app/html          清空ACL权限
    
    [root@centos7 ~]#setfacl  -R  --set-file=/app/html.acl /app/html/  恢复ACL权限
    
    [root@centos7 /app]#setfacl --restore html.acl   这样恢复更简单些
    

                       ~/.bash_profile:用户每次登录时执行

                       ~/.bashrc:     每次进入新的Bash环境时执行

                       ~/.bash_logout: 用户每次退出登录时执行

                       /etc/bashrc:全局初始配置文件

                       /etc/profile 全局初始配置文件

     

             修改用户: usermod [OPTION] login

                       -u    新uid

                       -g    新基本组

                       -G    新附加组,若要保留原有附加组使用-a选项

                       -s     新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     删除用户家目录

     

             查看用户相关信息:

                        id [OPTION]... [USER]

                           -u: UID

                                -g: GID

                                -G: Groups

                                -n: Name

     

             用户切换: su [options...] [-] [user [args...]]

     

             用户密码设置: passwd [OPTIONS] UserName

                       -l: 锁定指定用户

                       -u: 解锁指定用户

                       -e: 强制用户下次登录修改密码

                       -n mindays:  指定最短使用期限

                       -x maxdays :最大使用期限

                       -w warndays :提前多少天开始警告

                       -i inactivedays :非活动期限

                       --stdin :从标准输入接收用户密码

     

             用户密码策略: chage [OPTION]... LOGIN

     

             创建组:groupadd [OPTION]... group_name

             组修改:groupmod

             组删除:groupdel

             组密码:gpasswd

     

    权限管理:

    • 权限是OS用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行怎样的操作。
    • 每个进程都是以某个用户身份运行,所以进程的权限与该用户的权限一样,所以用户的权限越大,该进程拥有的权限就大。

    新葡亰496net 23

     

    文件属性操作:

             修改文件属主:

                       chown [OPTION]... [OWNER][:[GROUP]] FILE...

            

             修改文件属组:

                       chgrp [OPTION]... GROUP FILE...

     

    文件权限主要针对三类对象进行定义:

             属主(u)、属组(g)、其他(o)

     

    文件的三种权限:

    新葡亰496net 24

     

    文件权限操作:

    新葡亰496net 25

     

    修改文件权限:

             chmod [OPTION]... OCTAL-MODE FILE...

    umask值 可以用来保留在创建文件权限

     

    特殊权限:

    新葡亰496net 26

    SUID: user, 占据属主的执行权限位

       s:  属主拥有x 权限

       S :属主没有x 权限

    SGID: group, 占据属组的执行权限位

       s: group 拥有x 权限

       S :group 没有x 权限

    Sticky: other, 占据other 的执行权限位

       t: other 拥有x 权限

       T :other 没有x 权限

     特殊权限八进制表示:

      SUID = 4

      SGID = 2

      Sticky =1

    设定文件特定属性:

      chattr i  不能删除,改名,更改

      chattr a  只能增加

      lsattr

     

    默认权限:

    • 每一个终端都拥有一个umask属性,来确定新建文件、目录的默认权限
    • umask使用数字权限方式表示,如:022
    • 目录的默认权限是:777-umask
    • 文件的默认权限是:666-umask
    • 一般,普通用户的默认umask是002,root用户的默认umask是022

    l  也就是说对于普通用户来说

     新建文件的权限是:666-002 = 664

     新建目录的权限是:777-002 = 775

    • 命令umask用以查看设置umask值

        umask 022

     

    访问控制列表:

    ACL :Access Control List ,实现灵活的权限管理

      除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

     RHEL7.0 默认创建的xfs 和ext4 文件系统有ACL 功能。

     RHEL7.X 之前版本,默认手工创建的ext4 文件系统无ACL功 功能。需手动增加

     tune2fs –o acl /dev/vdb1

     mount –o acl /dev/vdb1 /mnt

     ACL 生效 顺序:所有者,自定义用户,自定义组,其 他 人访问控制 列表 

      为多用户或者组的文件和目录赋予访问权限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 d:u:wang:rx directory

    • setfacl -x u:wang file |directory

    • setfacl -X file.acl directory

     ACL 文件上的group 权限是mask  值(自定义用户,自定义组,拥有组的最大权限), 而非 传统的组权限

     getfacl 可看到特殊权限:flags

     chmod -R a X /d1 只给目录x 权限,不给文件x 权限

     默认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 --set-file=acl.txt /tmp/dir1

    #getfacl -R /tmp/dir1

     

    本文由新葡亰496net发布于电脑系统,转载请注明出处:组和权限管理基础,用户和组及权限

    关键词: