zoukankan      html  css  js  c++  java
  • Linux 入门记录:十一、Linux 用户基础

    一、用户、组

    1. 用户

    当我们使用 Linux 时,需要以一个用户的身份登录,一个进程也需要以一个用户的身份运行。用户限制使用者或进程可以使用或不可以使用哪些资源。

    2. 组

    组用来方便地管理用户。

    • 每个用户拥有唯一 uid,操作系统实际使用的是用户 ID,而不是用户名
    • 每个用户属于一个主组,属于一个或多个附属组
    • 每个组拥有一个 gid
    • 每个进程以一个用户身份运行,并受该用户可访问的资源限制
    • 每个可登陆用户拥有一个特定的 Shell

    二、用户

    用户 ID 为 32 位,从 0 开始, 但是为了和旧系统兼容,用户 ID 限制在 60000 以下。Linux 用户分为以下三种:

    • root 用户(ID 为 0 的用户为 root 用户)
    • 系统用户(ID 范围 1 ~ 499),专门为使用某些程序或服务的用户,没有 Shell
    • 普通用户(ID 为 500 以上)

    系统中每个文件都有一个所属用户及所属组。

    使用 id [username] 命令可以显示当前用户的信息。使用命令 passwd [username] 可以修改当前用户密码。指定用户名可以显示特定用户的信息和密码。

    下图中,普通用户 mingc 的 uid 为500,gid 为 500。

    每个用户在创建以后,默认会创建一个与该用户同名的主组(gid),并且该用户属于该组。

    后面的 groups 是附属组。

    三、相关文件

    这里有关用户的(配置)文件有 3 个:

    • /etc/passwd - 该用户文件用于保存用户信息
    • /etc/shadow - 该密码文件保存用户密码(加密的)
    • /etc/group    - 组文件保存了组信息

     1. 看看 /etc/passwd 文件用户信息:

    其中,每一行都是一个用户信息,多个字段之间用冒号 ":" 分隔,格式为:

    用户名:密码:用户ID:组ID:描述信息:用户目录:登陆用的Shell
    

    “密码”显示 "x" 表示用户密码保存在 /etc/shadow 密码文件里。

    上图中:

    mingc 用户(就是我了),uid 为 500(在 500 以上)表示普通用户,我的用户目录是 /home/mingc,使用的 Shell 是 /bin/bash,就是大家都用的 Bash 了。

    apache 用户,uid 为48(在 1 ~ 499 之间)表示系统用户,他的用户目录是 /var/www 目录,使用的 Shell 是 /sbin/nologin,即没有 Shell。这个系统用户显然是用来专门使用 Apache 服务的。

    uid 为 0 的自然是 root 用户了。

    2. 再看下 /etc/shadow 密码文件信息:

    其中,每一行都是一个用户密码信息,多个字段之间用冒号 ":" 分隔,格式为:

    用户名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

    “加密口令”显示星号 "*" 表示账号被锁定,两个感叹号 "!!" 表示密码已过期,"$6$" 开头表示加密类型是 SHA-512 加密。

    详细请参考这里:Linux 下 /etc/shadow 文件

    3.  /etc/group 组信息:

    其中,每一行都是一个组信息,多个字段之间用冒号 ":" 分隔,格式为:

    组名:组密码:组ID:组用户
    

    “密码”显示 "x" 表示密码保存在 /etc/gshadow 组密码文件里。

    “组密码”现在几乎不用了,以前旧的系统上没有附属组的概念,一个用户只能属于一个组,但很多时候需要用户属于多个组,只要用户知道要换的那个组的“组密码”,就可以切换所属组。但现在有了附属组的概念,所以这个“组密码”几乎不用了。留着是为了向后兼容。

    四、查看登录用户

    • 命令 whoami 显示当前用户
    • 命令 who 显示有哪些用户已经在登录系统
    • 命令 w 显示有哪些用户已经在登录并且在干什么

    Linux 中有个约定俗成的习惯,命令越长,显示出来的信息越少,命令越短,显示出来的信息越多。这三个哲学命令就是这样的:

    五、创建新用户

     命令 useradd 用来创建一个新用户:

    useradd username

    这个命令会执行以下操作:

    1. 在 /etc/passwd 用户文件中添加用户信息
    2. 如果使用 passwd [username] 命令创建密码,则将该密码保存在 /etc/shadow 密码文件中
    3. 为用户建立一个新的用户目录:/home/username
    4. 将 /etc/skel 中的文件拷贝到用户目录中,比如一些必要的说明文档
    5. 建立一个与用户名同名的组,该用户默认属于该组

    常用参数:

    -d    指定用户目录
    -s    指定登录Shell
    -u    指定用户ID(uid)
    -g    指定主组ID(gid)
    -G    指定附属组,组名或组id(最多 31 个,用逗号 "," 分割)

    也可以通过直接修改用户信息文件 /etc/passwd 的方式实现,但不建议

    六、修改用户信息

    命令 usermod 用来修改用户信息:

    usermod 参数 username

    常用参数:

    -l     新用户名
    -u     新用户ID
    -d     新的用户目录
    -g     所属主组
    -G     所属附属组
    -L     锁定用户使其不能登录
    -U     解除锁定
    

      

    七、删除用户

    命令 userdel 用来删除指定用户:

    userdel username      (会保留 /home 下的用户目录)
    userdel -r username   (同时删除用户目录)
    

      

    八、组

    几乎所有操作系统都有组的概念,通过组,我们可以更加方便地归类和管理用户。一般来讲,我们使用部门、职能和地理区域的分类方式来创建使用组。

    • 每个组都有一个组ID(gid)
    • 组信息保存在组文件 /etc/group 中
    • 每个用户都拥有一个主组,同时还可以拥有最多 31 个附属组

    九、创建、修改、删除组

    命令 groupadd 用来创建新组:

    groupadd groupname
    

    命令 groupmod 用来修改组信息:

    groupmod -n newname oldname     修改组名
    groupmod -g newid groupname     修改组ID(gid)
    

    命令 groupdel 用来删除组:

    groupdel groupname
    

    相关链接:Linux之用户、权限的管理

  • 相关阅读:
    TSQL循环打印一年中所有的日期(WHILE循环)
    给Table加字段的SQL
    [正则表达式]前台JS得到控件ID (该控件被其它控件包住了)
    1.SQL Server中批量更新Object的Owner 2.附加数据库
    转:动态LINQ的几种方法
    转:查看LINQ生成SQL语句的几种方法
    TrimZero方法
    Oracle关联更新语法(TSQL中的update...from)
    Table之间的空隙或Table与父控件之间的空隙怎么去掉?
    自动完成带来的麻烦
  • 原文地址:https://www.cnblogs.com/mingc/p/7587960.html
Copyright © 2011-2022 走看看