• 4.用户、组和权限


    1.Linux安全模型

    资源分派:

    • Authentication:认证,验证用户身份
    • Authorization:授权,不同的用户设置不同权限
    • Accouting |Audition:审计

    当用户登录成功时,系统会自动分配令牌token,包括:用户标识和组成员等信息

    1.1用户

    Linux系统中每个用户是通过uid来唯一标识。

    • 管理员root,0
    • 普通用户1-60000自动分配
      • 系统用户:centos6,1-499;centos7,1-999
      • 登陆用户:centos6,500+;centos7,1000+ 

    1.2用户组

    Linux系统中可以将用户加入一个或多个用户组中,用户组是通过gid来唯一标识的。

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

    1.3用户和组的关系

    • 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
    • 用户的附加组(supplementary group):一个用户可以属于零个或多个辅助组,附属组

    范例:

    [13:55:48 root@centos7 ~]#id postfix
    uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)

    1.4安全上下文

    Linux安全上下文Context:运行中的程序,即进程,以进程发起者的身份运行,进程所能够访问资源的权限由进程发起者的权限决定

    比如:分别以root和wang的身份运行cat /etc/shadow,得到的结果是不同的,资源能否被访问,是由运行着身份决定,而非程序本身

    范例:

    [14:02:41 root@centos7 ~]#su - wang
    Last login: Thu Apr  8 14:01:11 CST 2021 on pts/0
     Hi,dangerous!
    [14:02:47 wang@centos7 ~]$cat /etc/shadow
    cat: /etc/shadow: Permission denied
    [14:02:52 wang@centos7 ~]$exit
    logout
    [14:02:55 root@centos7 ~]#cat /etc/shadow
    root:$6$dxtFO.cqDIya8w4Z$TpE4lkJFlLEnwlZ9Megon97iAGqCUmukQBYsg3f3bLnKXwSRcX673CURpn1pc032lvuz5LXuykddfyWZuj86k/::0:99999:7:::
    bin:*:18353:0:99999:7:::
    daemon:*:18353:0:99999:7:::
    adm:*:18353:0:99999:7:::
    lp:*:18353:0:99999:7:::

    2.用户和组的配置文件

     2.1用户和组的主要配置文件

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

    2.2passwd文件格式

    [14:08:58 root@centos7 ~]#cat /etc/passwd | head -1
    root:x:0:0:root:/root:/bin/bash

    login name:登陆用户名(wang)

    passwd:密码(x)

    uid:用户身份编号(1000)

    gid:登陆默认所在组编号(1000)

    gecos:用户全名或注释

    home directory:用户家目录

    shell:用户默认使用shell

    2.3shadow文件格式

    登陆用户名

    用户密码:一般用sha512加密

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

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

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

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

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

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

    密码的安全策略

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

    范例:生成随机密码

    [14:09:49 root@centos7 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c 12
    CmsovRieC6h1[14:13:42 root@centos7 ~]#openssl rand -base64 9
    0RFgCdAOCLmL
    [14:13:58 root@centos7 ~]#

    2.4group文件格式

    [14:14:31 root@centos7 ~]#cat /etc/group | grep webs
    webs:x:1002:nginx,varnish

    群组名称

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

    gid:就是群组的id

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

    2.5gshadow文件格式

    群组名称

    群组密码

    组管理员列表:组管理员的列表,更改组密码和成员

    以当前组为附加组的用户列表:多个用户间用逗号分隔

    3用户和组管理命令

    用户管理命令

    • useradd
    • usermod
    • userdel

    组账号维护命令

    • groupadd
    • groupmod
    • groupdel

    3.1用户创建

    useradd 命令可以创建新的Linux用户

    格式

    useradd [option] login

    常见选项:

    -u uid

    -o 配合-u选项,不检查uid的唯一性

    -g gid 指明用户所属基本组,可为组名,也可以gid

    -c comment 用户的注释信息

    -d home_dir 以指定的路径(不存在)为家目录

    -s shell 知名用户的默认shell程序,可用列表在/etc/shells文件中

    -G 为用户知名附加组,组必须事先存在

    -N 不创建私用组做主组,使用users组做主组

    -r 创建系统用户

    -m 创建家目录,用于系统用户

    -M 不创建家目录,用于非系统用户

    范例:

    [14:28:50 root@centos7 ~]#useradd -r -u 49 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache2

    useradd命令默认值设定由/etc/default/useradd定义

    [14:28:55 root@centos7 ~]#cat /etc/default/useradd 
    # useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1 #对应/etc/shadow文件第7列,即用户密码过期的宽限期
    EXPIRE=   #对应/etc/shadow文件第8列,即用户账号的有效期
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes

    新建用户的相关文件

    • /etc/default/useradd
    • /etc/skel/*
    • /etc/login.defs

    批量修改用户口令

    echo username:passwd | chpasswd

    3.2用户属性修改

    usermod命令可以修改用户属性

    格式:

    usermod [option] login
    

    常见选项:

    -u uid 新uid

    -g gid 新主组

    -G group1;新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用 -a选项

    -s shell;新的默认shell

    -c 新的注释信息

    -d 新家目录不会自动创建,若要创建新家目录并移动原家数据,同时使用-m选项

    -l 新的用户名

    -L lock指定用户,在/etc/shadow密码兰增加!

    -U unlock指定用户,将/etc/shadow密码兰的!拿掉

    -e YYYY-MM-DD 知名用户账号过期日期

    -f 设定非活动期限,即宽限期

    3.3删除用户

    userdel可以删除Linux用户

    常见选项:

    -f 强制删除

    -r 删除用的家目录和邮箱

    3.4查看用户相关的ID信息

    id命令可以查看用户的uid,gid等信息

    id [option] [user]

    常见选项:

    -u 显示uid

    -g 显示gid

    -G 显示用户所属组的id

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

    [14:33:52 root@centos7 ~]#id
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [14:41:46 root@centos7 ~]#id -u
    0
    [14:41:47 root@centos7 ~]#id -g
    0
    [14:41:51 root@centos7 ~]#id -G
    0
    [14:41:57 root@centos7 ~]#id -n
    id: cannot print only names or real IDs in default format
    [14:42:00 root@centos7 ~]#id -nu
    root

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

    su:即switch user,命令可以切换用户身份,并且以指定用户的身份执行命令

    格式:

    su [options] [-] [user]
    

    常见选项:

    -l --login su -l username  相当于 su - username
    -c --command <command> 

    切换用户的方式:

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

    说明:root su至其他用户无须密码,非root用户切换时需要密码

    注意:su 切换新用户后,使用exit退回至旧的用户,而不要再用su 切换至旧的用户,否则会生成很多的bash子进程,环境可能会混乱

    换个身份执行命令:

    su [-] username -c 'COMMAND' 

    范例:

    [14:42:07 root@centos7 ~]#su wang
    [14:51:27 wang@centos7 root]$whoami
    wang
    [14:51:41 wang@centos7 root]$exit
    exit
    [14:51:43 root@centos7 ~]#su - wang
    Last login: Thu Apr  8 14:51:27 CST 2021 on pts/0
     Hi,dangerous!
    [14:51:51 wang@centos7 ~]$pwd
    /home/wang
    [14:51:54 wang@centos7 ~]$whoami
    wang
    [14:51:58 wang@centos7 ~]$

    3.6设置密码

    passwd可以修改用户密码

    格式:

    passwd [options] username 

    常见选项:

    -d 删除指定用户密码

    -l 锁定指定用户

    -u 解锁制定用户

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

    -f 强制操作

    -n 指定最短使用期限

    -x 最大使用期限

    -w 提前多少天开始警告

    -i 非活动期限

    --stdin 从标准输入接受用户密码,ubuntu无此选项

    范例:非交互式修改用户密码

    #此方式更通用,适用于各种Linux版本,如ubuntu
    [14:55:27 root@centos7 ~]#echo -e '123456
    123456' | passwd wang
    Changing password for user wang.
    New password: BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: passwd: all authentication tokens updated successfully.
    #适用于红帽系列的Linux版本
    [14:55:39 root@centos7 ~]#echo '123456' | passwd --stdin wang
    Changing password for user wang.
    passwd: all authentication tokens updated successfully.

    范例:设置用户下次必须更改密码

    [14:56:02 root@centos7 ~]#passwd -e wang
    Expiring password for user wang.
    passwd: Success
    [14:57:27 root@centos7 ~]#getent shadow wang
    wang:$6$ZO5Lohep$FcHn72Z7QFLo.g6NfJO9Ow0pzNDFgsxVw8zPBW/Mjc1b1XrsCJ/iR8SoUOnEjaw.dvkh8Ie4Uh3Nk5Peh.a8l.:0:0:99999:7:::
    [14:57:41 root@centos7 ~]#su - wang
    Last login: Thu Apr  8 14:51:51 CST 2021 on pts/0
     Hi,dangerous!
    [14:58:33 wang@centos7 ~]$exit
    logout
    [14:58:51 root@centos7 ~]#su lisi
    [14:58:54 lisi@centos7 root]$su - wang
    Password: 
    You are required to change your password immediately (root enforced)
    Changing password for wang.
    (current) UNIX password: 

    3.7修改用户密码策略

    chage 可以修改用户密码策略

    格式:

    chage [option] login
    

    常见选项:

    -d last_day 更改密码的时间

    -m min_days

    -M max_days

    -W warn_days

    -I INACTIVE 密码过期后的宽限期

    -l 显示密码策略

    [15:02:59 root@centos7 ~]#chage -l
    Usage: chage [options] LOGIN
    
    Options:
      -d, --lastday LAST_DAY        set date of last password change to LAST_DAY
      -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
      -h, --help                    display this help message and exit
      -I, --inactive INACTIVE       set password inactive after expiration
                                    to INACTIVE
      -l, --list                    show account aging information
      -m, --mindays MIN_DAYS        set minimum number of days before password
                                    change to MIN_DAYS
      -M, --maxdays MAX_DAYS        set maximum number of days before password
                                    change to MAX_DAYS
      -R, --root CHROOT_DIR         directory to chroot into
      -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS

    3.9 创建组

    groupadd 实现创建组

    格式:

    groupadd [option] group_name

    常见选项:

    -g 指明gid号

    -r 创建系统组

    范例:

    groupadd -g 48 -r apache
    

    3.11 删除组 

    groupdel 可以删除组

    格式:

    groupdel group

    常见选项:

    -f,--force 强制删除,即使是用户的主组也强制删除组

    3.12 更改和查看组成员

    groupmems 可以管理附加组的成员关系

    格式:

    groupmems [option] [action]
    

    常见选项: 

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

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

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

    -p,--purge 从组中清楚所有成员

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

    groups 可查看用户组关系

    格式:

    groups [option] [username]
    

    范例:

    [15:12:37 root@centos7 ~]#groupmems -l -g admins
    groupmems: group 'admins' does not exist in /etc/group
    [15:13:52 root@centos7 ~]#groupmems -l -g webs
    nginx  varnish 
    [15:13:58 root@centos7 ~]#groupmems -a wang -g webs
    [15:14:11 root@centos7 ~]#groupmems -l -g webs
    nginx  varnish  wang 
    [15:14:22 root@centos7 ~]#groupmems -d wang -g webs
    [15:14:42 root@centos7 ~]#groups wang
    wang : wang
    [15:14:47 root@centos7 ~]#

    4 文件权限管理

     4.1 文件所有者和属组属性操作

    4.1.1 设置文件的所有者 chown

    chown 命令可以修改文件的属主,也可以修改文件属组

    格式:

    chown [option]... [owner][:[group]] file

    用法说明:

    owner 只修改所有者

    owner:group 同时修改所有者和属组

    :group 只修改属组,冒号也可以用.替换

    --reference=rfile 参考指定的属性,来修改

    -R 递归修改

    范例:

    [15:29:40 root@centos7 data]#cp /etc/fstab f1.txt
    [15:29:48 root@centos7 data]#ll f1.txt 
    -rw-r--r--. 1 root root 595 Apr  8 15:29 f1.txt
    [15:29:55 root@centos7 data]#chown wang f1.txt 
    [15:30:02 root@centos7 data]#ll f1.txt 
    -rw-r--r--. 1 wang root 595 Apr  8 15:29 f1.txt
    [15:30:04 root@centos7 data]#chown :webs f1.txt 
    [15:30:13 root@centos7 data]#ll f1.txt 
    -rw-r--r--. 1 wang webs 595 Apr  8 15:29 f1.txt
    [15:30:15 root@centos7 data]#chown root.bin f1.txt 
    [15:30:30 root@centos7 data]#ll f1.txt 
    -rw-r--r--. 1 root bin 595 Apr  8 15:29 f1.txt

    4.1.2 设置文件的属组信息 chgrp

    chgrp 命令可以只修改文件的属组

    格式:

    chgrp [option] group file

    选项:

    -R 递归

    范例:

    [15:30:31 root@centos7 data]#ll f1.txt 
    -rw-r--r--. 1 root bin 595 Apr  8 15:29 f1.txt
    [15:32:21 root@centos7 data]#chgrp webs f1.txt 
    [15:32:28 root@centos7 data]#ll f1.txt 
    -rw-r--r--. 1 root webs 595 Apr  8 15:29 f1.txt

    4.2 文件权限

    4.2.1 文件权限说明

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

    owner 属主,u

    group 属组,g

    other 其他,o

    注意:用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向右查看其权限

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

    r Readable
    w Writable
    x excutable

    对文件的权限:

    r 可使用文件查看类工具,比如:cat,可以获取其内容
    w 可修改其内容
    x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)

    对目录的权限:

    r 可以使用ls查看此目录中的文件列表
    w 可在此目录中创建文件,也可删除此目录中的文件,而和被删除的文件权限无关
    x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
    x 只给目录x权限,不给无执行权限的文件x权限

    数学法的权限:

    4.2.2 修改文件权限 chmod

     格式:

    chmod [option] mode[,mode] file

    说明:

    MODE:who opt permission
    who:u,g,0,a
    opt:+,-=
    permission:r,w,x
    
    修改一类用户的所有权限
    u= g= o= ug= a= u=,g=
    
    修改指定一类用户某个权限
    u+ u- g+ g- o+ o- a+ a- + -
    
    -R 递归修改权限

    范例:面试题

    执行 cp /etc/issue /data/dir/ 所需要的最小权限?
    /bin/cp 需要x权限
    /etc/ 需要x权限
    /etc/issue 需要r权限
    /data 需要x权限
    /data/dir/ 需要xw权限

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

  • 相关阅读:
    Python3安装后无法使用退格键
    Python之汉诺塔递归运算
    Windows开机自动执行bat脚本
    [转]java设计模式
    java享元模式
    java外观模式
    java代理模式
    java装饰者模式
    java原型模式
    java建造者模式
  • 原文地址:https://www.cnblogs.com/tianakong/p/14631915.html
Copyright © 2020-2023  润新知