• 运维基础-用户和组管理


    什么是用户?
    用户需要用账号来访问系统,服务和信息。系统中每个进程都使用一个特定的用户运行。每个文件都属于一个特定的额用户所有。
    对文件和目录的访问会收到用户的限制。根据运行进程相关联的用户可确定该进程可以访问的文件和目录

    id命令用于显示当前已登录用户的信息。也可以将用户名作为id命令的参数,来获取她的基本信息

    [root@localhost ~]# id
    uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [root@localhost ~]# id root
    uid=0(root) gid=0(root) 组=0(root)

    若要查看与某一文件或目录相关联的用户,可以使用ls -l命令(第三列显示用户名)

    [root@localhost ~]# ls -l /tmp/
    总用量 892
    -rw-r--r--. 1 root  root    1596 8月  20 19:21 anaconda.log
    drwx------. 2 zhang zhang     25 8月  21 09:49 firefox_zhang
    drwxr-xr-x. 2 root  root      18 8月  20 19:07 hsperfdata_root
    -rw-r--r--. 1 root  root     581 8月  20 19:21 ifcfg.log
    -rwx------. 1 root  root     836 8月  20 19:18 ks-script-DypRd9
    -rw-r--r--. 1 root  root       0 8月  20 19:20 packaging.log
    -rw-r--r--. 1 root  root       0 8月  20 19:20 program.log
    -rw-r--r--. 1 root  root       0 8月  20 19:20 sensitive-info.log

    使用ps命令可以查看进程信息。默认仅显示当期shell中的进程。添加a选项可以查看与终端相关的所有进程。若要查看进程相关联的用户,在命令中加u选项

    [root@localhost ~]# ps au
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root      12565  0.1  2.3 324024 44344 tty1     Ssl+ 02:55   1:12 /usr/bin/X :0 -background none -no
    zhang     55253  0.0  0.1 116688  2932 pts/0    Ss   05:57   0:00 bash
    root      55322  0.0  0.1 220852  3328 pts/0    S    05:57   0:00 su
    root      55330  0.0  0.1 116692  3248 pts/0    S+   05:57   0:00 bash
    root      63929  0.0  0.1 116576  3388 pts/1    Ss   14:08   0:00 -bash
    root      64171  0.0  0.0 151064  1816 pts/1    R+   14:22   0:00 ps au

    以上命令的输出是使用名称来显示用户,但是操作系统内部是按照UID来标识用户的。默认情况下,本地用户名称和编号的映射被存储在/etc/passwd中

    username:password:UID:GID:GECOS:/home/dir:shell
    username:是UID到名称的一种映射,便于用户使用
    password:以前是以加密格式保存密码的位置,现在密码存在在/etc/shadow中
    UID:用户的ID,标识用户的标号
    GID:组的ID
    GECOS该字段可以是任意文本,通常包含用户的实际姓名
    /home/dir 用户的个人数据和配置文件所处的位置
    shell 用户登录是运行的程序

    什么是组:

    与用户一样,组也有自己的名称和编号(GID)。本地组在/etc/group中定义

    组可以用来协助管理者访问

    管理本地用户账号

    创建,修改,锁定,删除,本地定义的用户账号

    useradd创建用户

    不带选项运行时,useradd username会为/etc/passwd 中的所有字段设置合理的默认值,在默认情况下,useradd命令不会设置任何有效的密码,用户必须要等设置了密码才可以登录

    useradd --help 可以显示用于覆盖默认值的基本选项,在多数情况下,相同的选项可以用户usermod命令,可以对现有的用户进行修改

    usermod修改现有用户

    usermod --help 可以显示用户修改账号的基本选项,一些常见的选项包括

    [root@localhost ~]# usermod --help
    用法:usermod [选项] 登录
    
    选项:
      -c, --comment 注释            GECOS 字段的新值
      -d, --home HOME_DIR           用户的新主目录
      -e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE
      -f, --inactive INACTIVE       过期 INACTIVE 天数后,设定密码为失效状态
      -g, --gid GROUP               强制使用 GROUP 为新主组
      -G, --groups GROUPS           新的附加组列表 GROUPS
      -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,
                                    并不从其它组中删除此用户
      -h, --help                    显示此帮助信息并推出
      -l, --login LOGIN             新的登录名称
      -L, --lock                    锁定用户帐号
      -m, --move-home               将家目录内容移至新位置 (仅于 -d 一起使用)
      -o, --non-unique              允许使用重复的(非唯一的) UID
      -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码
      -R, --root CHROOT_DIR         chroot 到的目录
      -s, --shell SHELL             该用户帐号的新登录 shell
      -u, --uid UID                 用户帐号的新 UID
      -U, --unlock                  解锁用户帐号
      -Z, --selinux-user  SEUSER       用户账户的新 SELinux 用户映射

    userdel删除用户

    userdel username可以将用户从/etc/passwd 中删除,但是默认情况下保留的家目录不变

    userdel -r username   同事删除用户的家目录

    id显示用户信息,包括用户的UID和组成员

    id username 将显示username的用户信息,包括用户UID编号和组成成员

    [root@localhost ~]# id zhang
    uid=1000(zhang) gid=1000(zhang) 组=1000(zhang),10(wheel)

    passwd设置密码

    passwd username可用于设置用户的初始密码或者更改该用户的密码

    root用户可以将密码设置为任何值,即使密码不符合规范,也是会成功更新

    普通用户的长度必须至少8个字符,切不可以是词语,用户名或者以前使用过的相似的密码

    UID范围:

    特定UID编号和编号范围可供RHEL用户特殊的目的

    UID 0始终分配至超级用户root

    UID 1-999 是系统用户,

    UID 1000+可供分配给普通用户的范围

    练习:

    添加用户alex

    [root@localhost ~]# useradd alex

    通过检查/etc/passwd 文件确认alex已经添加

    [root@localhost ~]# tail -2 /etc/passwd
    zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
    alex:x:1001:1001::/home/alex:/bin/bash

    使用passwd命令初始化alex的密码

    [root@localhost ~]# passwd alex 
    更改用户 alex 的密码 。
    新的 密码:
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。

    管理本地组账号

    创建,修改,删除本地定义的组账户

    管理补充组:组必须存在后,用户才能添加到其中

    groupadd 创建组

    groupadd groupname 如果不带选项,将使用/etc/login.defs文件中指定范围内的下一个可用GID

    -g GID用户指定具体的GID

    -r 选项将使用/ect/login.defs文件中有效系统GID编号范围内的GUID创建系统组

    groupmod 修改现有的组

    -n 选项用户将现有的组名的GID映射,指定到新的名称

    -g 用于指定新的GID

    groupdel删除组

    如果组是任意现有用户的主要组,不能被删除,与userdel一样,先检查所有的文件系统,确保没有任何遗留由该组拥有的任何文件

    usermod变更组成员

    组成员可以通过用户管理进行控制,通过usermod -g groupname更改用户的主要组

    通过usermod -aG groupname username将用户添加到补充组

    可以分配一个普通用户到管理员组

    [root@localhost ~]# gpasswd -A alex wheel

    不像usermod命令必须要root运行,gpasswd可以让一个普通用户运行,但是用户仅能够添加和删除除他们以管理员分配的组成员

    [root@localhost ~]# gpasswd -a zhang wheel
    正在将用户“zhang”加入到“wheel”组中

    练习:

    创建名为shakespeare,组ID为30000的补充组

    [root@localhost ~]# groupadd -g 30000 shakespeare

    创建名为artists的补充组

    [root@localhost ~]# groupadd artists

    查看/etc/group文件,已确定shakespeare和artists已经添加成功

    [root@localhost ~]# tail -5 /etc/group
    tcpdump:x:72:
    zhang:x:1000:
    alex:x:1001:
    shakespeare:x:30000:
    artists:x:30001:

    将alex用户添加到作为补充组的shakespeare中

    [root@localhost ~]# usermod -G shakespeare alex

    确认已使用id命令添加了alex

    [root@localhost ~]# id alex
    uid=1001(alex) gid=1001(alex) 组=1001(alex),30000(shakespeare)

    用户密码管理

    在shadow文件中手工锁定账号,设置密码时效策略

    阴影密码和密码策略

    在很早以前,加密的密码被存储在刻度的/etc/passwd文件中,

    现在密码哈希中存储的三段信息

    $1$gCjLa2/Z$6Pu0EK0AzfCjxjv2hoL0B/
    1、1.哈希算法。数字1表示MD5哈希,数字6表示SHA-512哈希
    2、gCjLa2/Z,用户加密哈希的加密盐,使用加密盐可以防止两个密码在相同的用户在/etc/shadow中拥有相同的条目
    3、6Pu0EK0AzfCjxjv2hoL0B/ 表示已经加密过的哈希

    用户尝试登陆时,系统在/etc/shadow中查询用户的条目,将用户的salt和键入的未加密密码组合,在使用指定的哈希算法加密。如果结果与已知加密哈希匹配,则用户输入了正确的密码,反之输入错误

    * centos7 支持两种强大的新的密码哈希算法SHA-256和SHA-512.

    /etc/shadow采用以冒号分割的9个字段

    name:password:lastchange:minage:maxage:warning:inactive:expire:blank
    name:登录名称,必须是系统中的有效账户名
    password:已加密密码,密码字段的开头为感叹号时,表示改密码已经被锁定
    lastchange:最近一次修改密码的日期
    minage:可以更改密码前的最少天数
    maxage:可以更改密码前的最多天数
    warning:密码即将到期的警告期,表示为天数
    inactive:账户在密码到期后保持活动的天数
    expire:账户到期日期,以距离1970年1月1日的天数表示
    blank:预留字段,供以后使用
    chage -m 0 -M 90 -W 7 -I 14 username
    chage -d 0 username 将强制在下次登录时更新密码
    chage -l username 将列出用户名的当前设置
    chage -E YYYY-MM-DD 将在指定日期后账户过期

    注意:

    date命令可以用来计算未来的日期

    [root@localhost ~]# date
    2018年 08月 22日 星期三 15:20:02 CST
    [root@localhost ~]# date -d "+45days"
    2018年 10月 06日 星期六 15:20:05 CST

    限制访问:

    通过chage命令可以设置账户过期,到了该日期无法以交互方式登录系统。usermod命令可以通过-L参数锁定账户

    [root@localhost ~]# usermod -L alex

    用户离开公司时,管理员可以通过usermod命令锁定账户并使其过期

    必须使用距离1970年1月1日的天数来指定

    [root@localhost ~]# usermod -L -e 1 alex

    可以通过usermod -U username进行解锁,如果账户已经过期,务必也要更改到期日期

    * 百度查找nologin shell

    通过su sudo给普通用户提权

    获得超级用户的访问权限,一超级用户的身份运行命令管理Linux系统

    root用户

    大多数操作系统具有某种类型的超级用户,即具有系统全部权限的用户,在centos7中,该用户就是root用户。该用户的特权高于文件系统的一半特权。用户管理系统

    要执行安装或者删除软件操作,以及管理目录等任务,必须将特权升到root用户

    大多数设备都仅受root控制,但是也有些设备并非如此。例如usb等移动设备一般用户就可以控制

    无限制的特权也会带来很多问题。root用户具有破坏系统的无限制权限:删除文件和目录,删除用户账户,添加后门等。如果root账户泄露,则其他人就有可能拥有系统的管理控制权限

    警告:

    在Linux系统上建议不要直接以root身份登录,如果需要神犬可以用su或者sudo

    利用su切换用户

    su命令可以让用户切换至另一个账号,如果没有指定用户名,则使用root账户,当普通用户调用时,系统将提示输入要切换的目标账号的密码:

    而root用户调用时,不需要密码

    [root@localhost ~]# su zhang
    [zhang@localhost root]$ id zhang
    uid=1000(zhang) gid=1000(zhang) 组=1000(zhang),10(wheel)
    [zhang@localhost root]$ su
    密码:
    [root@localhost ~]# id root
    uid=0(root) gid=0(root) 组=0(root)

    命名 su username会启动non-login shell ,而命令su -username则启动login shell,

    主要的区别是:su - 会将shell环境设置为该用户身份完全一样,而su仅以该用户身份使用当前环境变量设置启动shell。

    练习:

    锁定alex账户

    [root@localhost ~]# usermod -L alex

    尝试以alex用户登录

    [root@localhost ~]# su - alex

    解锁alex用户

    [root@localhost alex]# usermod  -U alex

    更改alex密码策略,没90天需要更改密码

    [root@localhost alex]# chage -M 90 alex 
    [root@localhost alex]# chage -l alex
    最近一次密码修改时间                    :8月 22, 2018
    密码过期时间                    :11月 20, 2018
    密码失效时间                    :从不
    帐户过期时间                        :1月 02, 1970
    两次改变密码之间相距的最小天数        :0
    两次改变密码之间相距的最大天数        :90
    在密码过期之前警告的天数    :7

    确定未来180天后的日期

    [root@localhost alex]# date -d "+180days"
    2019年 02月 18日 星期一 15:42:16 CST

    设置用户在该日期过期

    [root@localhost alex]# chage -E 2020-12-12 alex
    [root@localhost alex]# chage -l alex
    最近一次密码修改时间                    :8月 22, 2018
    密码过期时间                    :11月 20, 2018
    密码失效时间                    :从不
    帐户过期时间                        :12月 12, 2020
    两次改变密码之间相距的最小天数        :0
    两次改变密码之间相距的最大天数        :90
    在密码过期之前警告的天数    :7
    [root@localhost alex]# 
  • 相关阅读:
    洛谷——P1141 01迷宫
    洛谷——P1781 宇宙总统
    洛谷——P1608 路径统计
    洛谷——P1144 最短路计数
    洛谷—— P1162 填涂颜色
    python(22)- 递归和函数式编程
    android驱动例子(LED灯控制)
    Android之SDK、NDK、JNI和so文件
    NDK 与 JNI 的关系
    Android之NDK开发
  • 原文地址:https://www.cnblogs.com/52-qq/p/9518126.html
Copyright © 2020-2023  润新知