用户组和权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户组和权限相关的知识,希望对你有一定的参考价值。

  • 理解linux的安全模型
  • 理解用户账号和组群账号的目的
  • 用户和组管理命令
  • 理解并设置文件权限
  • 默认权限
  • 特殊权限
  • ACL
  • 安全3A

    • 资源分派
      Authentication : 认证
      Authorization : 授权
      AccoutingAudition : 审计

    1. 用户user

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

    2. 组 group

    • 目的是为了授权
    • gid 只是当前工作主工作组的展示, 而groups 包含了用户所在的所有组。
      Linux组:Groupname/GID
      管理员组:root,0
      普通组:
      系统组:1-499,1-999(centos7)
      普通组:500+,1000+(cenos7)

    3. 安全上下文

    Linux安全上下文
        运行中的程序:进程(procees)
        以进程发起者的身份运行:
            root:/bin/cat
            mage: /bin/cat
        进程所能够访问资源的权限取决于进程的运行者的身份    

    4. 用户和组的配置文件

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

    passwd文件格式

    login name: 登录用名
    passwd:     密码(x)
    UID:        用户身份编号(1000)
    GID:        登录默认所在组编号(1000)
    GECOS:      用户全名或注释
    home directory:用户主目录(/home/wang)
    shell:      用户默认使用shell(/bin/bash)
    • nologin shell 表示不能登陆 作为系统账户,给程序用

    • /etc/shadow中
      $1:md5加密算法   182bit
      $6:sha512加密算法  512bit 
      $...$ 表示盐(salt) 
    • shadow 文件格式:

      例:adong:$6$ThMn8HCsKSBbE0cr$rgsHimcyDkKyEcyZpRwBb3.HY59HJXTFJs/bUC93QuTaZm716AnlE6f5.NMX.weqPakNeotfGQilpwjImvYV4/::0:99999:7:::
      
      登录用名
      用户密码:一般用sha512加密
      从1970年1月1日起到密码最近一次被变更的时间
      密码再过几天可以被变更(0表示随时可以变更)
      密码再过几天必须被变更(9999表示永不过期)
      密码过期前几天系统提醒用户(默认为一周)
      密码过期几天后账号会被锁定
      从1970年1月1日算起,多少天后失效
    • openssl rand -base64 12 生成base64编码随机口令
    • 在cat /etc/login.defs文件中 定义了加密算法

    文件操作

    vipw =vi /etc/passwd   检查文件格式是否正确
        -s 更改shadow
    vigr = vi /etc/group 
         -s 更改gshadow 
    
    pwck 检查/etc/passwd文件格式
    grpck 检查/etc/shadow 和 /etc/gshadow文件格式

    5. 用户和组管理命令

    新用户的相关文件和命令

    /etc/skel            为新建目录的模板文件夹
    /etc/login.defs      账号配置文件
    /etc/default/useradd 定义新建账户模板
    

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

    格式:user1:x:2000:2000:test user1:/home/user1:/bin/csh
    创建users文件 users.txt
    newusers users.txt 可以批量创建用户

    chpasswd 批量修改用户口令

    格式:user1:passwd1
          user2:passwd2
    创建用户密码文件 passwd.txt
    cat passwd.txt | chpasswd 将用户密码输出
    • getent passwd|shadow|group|gshadow adong 查看用户信息

    6. 用户管理命令

    • 用户创建:useradd
      useradd [OPTINON] LOGIN
      -u 指定用户的UID
      -d 指定家目录的位置
      -c 指定备注的内容
      -s 指定shell程序文件名
      -G 指定用户加入某个普通组
      -g 指定用户的私有组(群组)
      -r 创建系统用户(服务账户)
      -M 不创建用户的家目录
      -m 创建用户的家目录(默认)
      -e 2014/7/25 用户过期时间
      -o 配合-u选项,不检查UID的唯一性
      例:useradd cyy -d /home/abc -c huaidan -u 2000  -s /sbin/nologin
                   指定家目录      备注   指定uid    指定 shell
      默认值设定:/etc/default/useradd
      显示或更改默认设置
      useradd -D
      useradd -D -s SHELL  (bin/bash)
      useradd -D -b BASE_DIR (/home/file)
      useradd -D -g GROUP  (组)   
    • 用户属性修改:usermod
      usermod [OPTION] login
      -u UID:修改用户ID
      -g GID:修改用户所属的组
      -s SHELL:新的默认SHELL
      -c ‘COMMENT‘:新的注释信息
      -d HOME:新家目录不会自动创建;若要创建新家目录并移动原家目录数据,同时使用-m选项
      -(a)G 修改用户所属的附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
      -l login_name:新的名字(为用户更改登录名称)
      -L lock指定用户,在/etc/shadow 密码栏的增加‘!‘   (锁定用户)
      -U unlock指定用户,将/etc/shadow 密码栏的‘!‘拿掉  (解锁用户)
      -e YYYY-MM-DD:指明用户账号过期日期
      -f INACTIVE 设定非活动期限
    • 删除用户:userdel
      userdel[OPTION]...login
      -r: 删除用户家目录
    • 删除用户附加组
      usermod -G "" username  
      usermod -G GROUP username 覆盖组

    7. 组账号维护命令

    • 创建组:groupadd

      groupadd [OPTION] ...group_name
        -g GID  指明GID号;[GID_MIN,GID_MAX]
        -r      创建系统组
                CentOS6:ID<500
                Centos7: ID<1000
    • 修改组:groupmod
      groupmod [OPTION]...groupmod
          -n group_name  改组名
          -g  GID:新的GID
    • 删除组:groupdel

      groupdel GROUP
      如果为用户的私有组,则在用户删除之前,无法删除组
    • 更改组密码:gpasswd
    gpasswd[option]group
        -a user 将user添加至指定组中
        -d user 从指定组中移除用户user
        -A user1,user2,... 设置有管理权限的用户列表
    newgrp:临时切换主组
        如果用户本身不属于此组,则需要组密码
    

    更改和查看组成员 groupmems

    groupmems [options] [action]
    options:
      -g,--group groupname 更改为指定组(只有root)
      -R,--root CHROOT_DIR 
    Actions:
      -a,--add username 指定用户加入组
      -d,--delete username 从组中清除成员
      -p,--purge 从组中清除所有成员
      -l,--list 显示组成员列表
    groups [OPTION].[USERNAME]...查看用户所属列表
    示例:
    查看有哪些用户属于sales组
    # groupmems -g sales -l
    linda  lisa 
    
    从sales组中删除lisa
    # groupmems -d lisa -g sales
    # groupmems -g sales -l
    linda
    
    添加用户到组里
    # id lxj2
    uid=1002(lxj2) gid=0(root) groups=0(root)
    # groupmems -a lxj2 -g sales
    # id lxj2
    uid=1002(lxj2) gid=0(root) groups=0(root),1238(sales)
    
    也可以使用usermod命令将用户添加到组里:
    usermod-AG将把用户添加到新的组中,这些组将用作他们的辅助组。
    使用usermod将用户linda和lisa添加到组销售,并将lori和bob添加到组账户:
    usermod -aG sales linda
    usermod -aG sales lisa
    usermod -aG account lori
    usermod -aG account bob

    练习

    • (1)创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution""
      [root@centos7 ~]#useradd -s /bin/csh -c ‘Gentoo Distribution‘ -G bin,root gentoo
      [root@centos7 ~]#getent passwd gentoo
      gentoo:x:1002:1002:Gentoo Distribution:/home/gentoo:/bin/csh
      [root@centos7 ~]#groups gentoo
      gentoo : gentoo root bin
      • (2)创建下面的用户、组和组成员关系
        名字为webs的组
        用户nginx,使用webs作为附加组
        用户varnish,使用webs作为附加组
        用户mysql,不可交互登录系统,且不是webs的成员,nginx,vamish,mysql密码都是magedu
        # groupadd webs
        # useradd -G webs nginx
        # useradd -G webs varnish
        # useradd -s /sbin/nologin mysql 
        # echo magedu | passwd --stdin nginx
        Changing password for user nginx.
        passwd: all authentication tokens updated successfully.
        # echo magedu | passwd --stdin varnish
        Changing password for user varnish.
        passwd: all authentication tokens updated successfully.
        # echo magedu | passwd --stdin mysql
        Changing password for user mysql.
        passwd: all authentication tokens updated successfully.
    • (3) 当用户docher对/testdir目录无执行权限时,意味着无法做哪些操作?
    1. 无法进入目录
    2.可以用ls查看列表,但是无法查看文件属性类型
    3.就算对目录中文件有rw权限,也无法查看和写入 >>(追加)也不行
    • (4) 当用户mongodb对/testdir目录无读权限时,意味着无法做哪些操作?
    1.可以进入目录,无法查看列表,可以查看ll file 详细信息
    2.可以执行目录内程序,cat file可以查看文件内容
    3.如果对文件有w权限,还可以通过>>写入文件

    9. 查看用户相关的ID信息

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

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

    su [username] 切换身份   不完全切换
        非登录式切换,即不会读取用户的配置文件,不改变当前工作目录
    su - [username] 完全切换
        登录式切换,会读取目标用户的配置文件,切换至家目录
    切换身份执行命令
        su - root -c ‘command‘ 
    root su至其他用户无须密码;非root用户切换时需要密码

    11. 设置密码

    passwd

    passwd[OPTIONS]UserName:修改指定用户的密码
    常用选项:
        -d:删除指定用户密码
        -l:锁定指定用户密码
        -u:解锁指定用户密码
        -e:强制用户下次登录修改密码
        -f:强制操作
        --stdin:从标准输入接收用户密码
            实例:echo "PASSWORD" |passwd --stdin USERNAME
    echo PASSWD | passwd --stdin USERNAME  &> /dev/null
    useradd USERNAME;echo PASSWD | passwd --stdin USERNAME;passwd -e USERNAME

    12. 修改用户密码策略

    chage[option]...login
        -d last_day
        -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-17 tom
    chage -E 2016-09-10 tom 

    用户相关的其他命令

    finger  user  查看用户信息
    chfn user     更改用户描述信息
    chsh -s       更改用户的shell
        例: chsh -s  /bin/nologin adong  
    chage [user]    更改用户口令有效期
    chage -l [user] 查看用户口令信息

    文件权限

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

    owner 属主,u
    group 属组,g 
    other 其他,o

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

    r   Readable
    w   Writable
    x   eXcutable

    文件

    r 可使用文件查看类工具获取其内容
        w 可修改其内容
        x 可以把此文件提请内核启动为一个进程

    目录

    r 可以使用ls查看此目录中文件列表
        w 可在此目录中创建文件,也可删除此目录中的文件呢
        x 可以使用ls -l 查看此目录中文件元数据(需配合r),可以cd进入此目录
        X 指给目录x权限,不给文件x权限(如果某个文件有执行权限,X会给其他所有者赋予权限)

    1. 修改文件的属主和属组

    修改文件的属主:chown

    chown [OPTION]...[OWNER][:[GROUP]]FILE...
      用法说明:
        OWNER        更改所有者
        OWNER:GROUP  更改所属组
        :GROUP       冒号也可用.替换
        chown[OPTION]...--reference=REILE FILE
        -R:递归

    修改文件的属组:chgrp

    chgrp[option]...group file
    chgrp[option]...--reference=reile file...
    -R  递归

    更改文件rwx权限:chmod

    1.模式法 
    u=rwx,g=rw,o=r file
    2.数字法
    rwxrw-r--  file
    111110100 转化为10进制764
    --- 0
    
    --x 
    001  1
    -w-
    010  2
    r--
    100  4
    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...
        参考refile文件的权限,将file的修改为同rfile

    chgrp修改文件的属组

    chgrp[OPTION]...GROUP FILE
        chgrp[OPTION]...--reference=REILE FILE
        -R 递归

    权限设置示例

    chgrp sales testfile
    chown root:admins testfile
    chmod -R g+rwx  testdir
    chmod 600 file
    chown mage testfile 

    面试题
    cp f1 dir/fff 需要的命令

    1.cp命令需要执行权限 
    2.f1需要读权限,所在文件夹需要执行权限,否则进不去,
    3.要拷贝的目标文件夹,至少要有执行和写权限

    以上是关于用户组和权限的主要内容,如果未能解决你的问题,请参考以下文章

    创建用户和用户权限

    oracle怎么创建用户和授予权限

    mysql用户和用户权限

    oracle怎么创建用户和授予权限?

    Linux系统之高级用户组和权限管理

    如何取消Access 用户和组权限