基本概念

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户

也就是说任何需要使用操作系统的用户,都需要一个系统账号,账号分为:管理员(root)账号与普通用户账号(非root)。

在Linux中,操作系统根据UID来判断用!根据UID来判断用户! 而不是用户名!只要id为0就是管理员,哪怕有多个id为0 的账号

  • 超级用户UID:0:root用户默认为0。
  • 系统用户UID:1-999:系统中系统服务由不同用户运行,更加安全,默认被限制登陆系统。
  • 普通用户UID:1000~:即管理员创建的用于日常工作而不能管理系统的普通用户。

注意UID一定是不能冲突的,管理员创建的普通用户UID从1000开始(即便前面有闲置的号码)

用户的配置文件:

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

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

关于passwd文件

使用cat passwd查看这个文件,下面是我的系统中的前几行

1root:x:0:0:root:/root:/bin/bash
2daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3bin:x:2:2:bin:/bin:/usr/sbin/nologin
4sys:x:3:3:sys:/dev:/usr/sbin/nologin
5sync:x:4:65534:sync:/bin:/bin/sync
6games:x:5:60:games:/usr/games:/usr/sbin/nologin
  • 第一个字段:用户名称
  • 第二个字段:密码标志
  • 第三个字段:UID(用户ID)
  • 第四个字段:GID(用户初始组ID)
  • 第五个字段:用户说明
  • 第六个字段:家目录
  • 普通用户:/home/用户名
  • 超级用户:/root
  • 第七个字段:登录之后的Shell

关于shadow——影子文件

1root@atomy-virtual-machine:/etc# ll /etc/passwd
2-rw-r--r-- 1 root root 2738 5月   6 12:02 /etc/passwd
3root@atomy-virtual-machine:/etc# ll /etc/shadow
4-rw-r----- 1 root shadow 1540 5月  10 18:51 /etc/shadow

可以看到passwd的权限是644,而shadow的权限是640,它的权限更小,在shadow中保存的是真正加密的密码串。而passwd中只有密码标志x。

查看一下这个文件

1root:$6$H4Mc4JCXAg9t7Udy$h7GPmOhOH..0db/S/c/5LwxbUCbejGQohT3W9RLoti7IcVrPrRDPPqGyIZHyTQ9X1ytLPX5Tehy63QP5VPrJn1:18757:0:99999:7:::
2daemon:*:18667:0:99999:7:::
3bin:*:18667:0:99999:7:::
4sys:*:18667:0:99999:7:::
5sync:*:18667:0:99999:7:::
6games:*:18667:0:99999:7:::
  • 第一个字段:用户名称
  • 第二个字段:加密密码
  • SHA512散列揭秘算法
  • 如果密码位为!!或者*代表没有密码,不能登录
  • 第三个字段:密码最后一次修改日期
  • 时间戳
  • 第四个字段:两个密码的修改间隔时间
  • 第五个字段:密码有效期
  • 第六个字段:密码修改到期的警告天数
  • 第七个字段:密码修改到期后的宽限天数
  • 0:代表密码过期后立即失效
  • -1:代表密码永不失效
  • 第八个字段:账号失效时间
  • 第九个字段:保留

补充:linux下时间戳换算

时间戳转日期

1root@atomy-virtual-machine:/# date -d "1970-01-01 16066 days"
22013年 12月 27日 星期五 00:00:00 CST

日期转时间戳

1root@atomy-virtual-machine:/# echo $(($(date --date="2021/05/01" +%s)/86400+1))
218748

用户管理命令

添加用户

添加账户——useradd

语法:

  • useradd [选项] 用户名
  • ubuntu下的添加账户:sudo useradd -m 用户名
  • sudo:表示以管理员身份执行
  • -m:表示在/home下添加用户目录

选项:

  • -u UID 自定义UID (默认系统递增)

  • -o 配合-u 选项,不检查UID的唯一性(不建议)

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

  • -c comment 指定一段注释性描述。

  • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。

  • -g 用户组 指定用户所属的用户组。

  • -G 用户组,用户组 指定用户所属的附加组。

  • -s Shell文件 指定用户的登录Shell。

  • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

补充:

创建账户的默认值设定位于: /etc/default/useradd文件中,该文件记录了创建用户账户时的默认信息,可通过修改该文件来修改创建账户时的信息。增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时系统会自动更新其他系统文件如/etc/shadow, /etc/group等。通常情况创建账户,账户ID会按照最大的值递增,但是递增的值必须在最大范围内。

修改用户密码——passwd

语法:

  • passwd [选项] 用户名
  • Ubuntu下:sudo passwd [选项] 用户名

选项:

  • -d 删除密码
  • -f 强迫用户下次登录时必须修改口令
  • -w 口令要到期提前警告的天数
  • -k 更新只能发送在过期之后
  • -l 停止账号使用
  • -S 显示密码信息
  • -u 启用已被停止的账户
  • -x 指定口令最长存活期
  • -g 修改群组密码
  • 指定口令最短存活期
  • -i 口令过期后多少天停用账户

修改用户信息——usermod

可以根据实际情况修改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

语法:usermod [选项] 用户名

选项:

  • -u:UID
  • -c:修改用户说明(就是备注/注释)
  • -G:修改用户所属的附加群组。
  • -L:锁定用户密码,使密码无效。
  • -U:解锁

修改用户说明:

1usermod -c "test user" testuser

把testuser加入到root组

1usermod -G root testuser

锁定用户

1usermod -L testuser

解锁用户

1usermod -U testuser

修改用户密码状态chage

chage [选项] 用户名

选项:

  • -d:指定密码最后修改日期(shadow 3字段)
  • -E:密码到期的日期(也就是账号失效时间,shadow 8字段),过了这天,此账号将不可用,0表示马上过期,-1表示永不过期
  • -I(大写的i):密码过后的宽限天数(shadow 7字段)
  • -l(小写的L):列出用户及密码的有效期
  • -m:两次密码修改间隔(shadow 4字段)
  • -M:密码有效期(shadow 5字段)
  • -W:密码过期前的警告天数(shadow 6字段)

删除用户——userdel

语法:

  • userdel 用户名
  • Ubuntu下sudo userdel用户名

选项:

  • -r :删除用户的同时删除用户家目录

我们使用如下操作:

1atomy@atomy-virtual-machine:~/桌面$ cd /home
2atomy@atomy-virtual-machine:/home$ ls
3atomy  wtest

home中是存在着我们新建的用户wtest的,此时删除它:

1atomy@atomy-virtual-machine:/home$ sudo userdel wtest

切换用户的时候,我们可以看见wtest是消失了的,但是当我们在此查看home文件夹下,发现还是存在着wtest文件夹的

1atomy@atomy-virtual-machine:/home$ cd /home
2atomy@atomy-virtual-machine:/home$ ls
3atomy  wtest

也就是说,我们在删除掉一个用户之后,需要将home目录下该用户的文件夹一并删除

1atomy@atomy-virtual-machine:/home$ sudo rm -rf /home/wtest
2atomy@atomy-virtual-machine:/home$ ls /home
3atomy

注:此处我是在atomy用户下操作的,而不是使用root权限操作。root下不用加sudo

不过上面繁琐的步骤只需要在userdel时加上-r选项就行了。

切换用户——su

语法:su [选项] 用户名

选项:

  • -:选项只使用-代表连带用户的环境变量一起切换
  • 一个用户切换为另一个用户,一定要带上-,连环境变量一起切换
  • -c:仅执行一次命令,而不切换用户身份
  • su -root -c "useradd user3"
  • 不切换成root,但是执行useradd命令添加user3用户

用户组

在Linux中,每个用户必须有一个主组(也叫初始组)。当创建账号时,系统会自动创建一个同名组作为该账户的主组。用户必须属于一个且只有一个主组。用户可以属于零个或者多个附加组。Linux下可以创建多个用户,可以用组来管理用户。

比如:

男生组boys下的用户有qiang、gang、hui

女生组girls下的用户有fang、yuan、ting

这样管理或者查找起来就方便和明确多了。

  • /etc/group:组及其属性信息
  • /etc/gshadow:组密码及其相关属性

关于/etc/group

  • 第一个字段:组名
  • 第二个字段:组密码标志
  • 第三个字段:GID
  • 第四个字段:组中附加用户
1root:x:0:
2daemon:x:1:
3bin:x:2:
4sys:x:3:
5adm:x:4:syslog,atomy

用户组管理命令

添加用户组

语法:groupadd [选项] 组名

选项:

  • -g GID:指定组ID

修改用户组

语法:groupmod [选项] 组名

选项:

  • -g GID:指定组ID
  • -n 新组名:修改组名

把组名boys修改为men

1groupmod -n men boys

删除用户组

语法:groupdel [选项] 组名

此命令从系统中删除组。

  1. 要想删除组,要确保该组不是主组,才能把这个组删掉。

  2. 倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

把用户添加入组或者从组中删除

语法:gpasswd [选项] 组名

选项:

  • -a 用户名:把用户加入组
  • -d 用户名:把用户从组中删除

Linux学习笔记:用户与用户组的更多相关文章

  1. Linux系列笔记 - 用户以及用户组命令

    一.前言 这一系列的随笔笔记,并不是详细的说明的命令的原理,只是简单的记录, 以备后期的查看以及复习 二.直接输入命令问题 有时候,我们在用 useradd groupadd等命令时,直接在终端输入的 ...

  2. Linux学习笔记---用户管理---帐号管理

    root管理 (1)新增用户:useradd -u 指定UID -g 指定GID -G 作为组员添加到某个组 -M 不创建主用户目录 -m 创建主用户目录 -c 用户信息说明列 -d 指定某个目录为主 ...

  3. Linux学习笔记---用户管理---组group

    组管理: (1)/etc/group 格式: 组名:密码:GID:组员

  4. Linux学习之用户管理命令与用户组管理命令(十五)

    Linux学习之用户管理命令与用户组管理命令 目录 用户管理命令 用户添加命令useradd 修改用户密码passwd 修改用户信息usermod 修改用户密码状态chage 删除用户userdel ...

  5. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  6. deepin linux学习笔记

    目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...

  7. 91 Testing Linux学习笔记

    91 Testing Linux学习笔记... 学习地址:91Testing 的Linux教程=====================学习网址:http://www.91testing.net/ar ...

  8. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  9. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  10. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

随机推荐

  1. [LeetCode每日一题]781. 森林中的兔子

    [LeetCode每日一题]781. 森林中的兔子 问题 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers 数组里. ...

  2. Day007 计算器

    计算器 public static void main(String[] args) { double[] num={0,1}; String oprater="a"; doubl ...

  3. Git解决中文乱码问题

    git status 乱码 解决方法: git config --global core.quotepath false git commit 乱码 解决方法: git config --global ...

  4. Asp.NetCore Web开发之Nlog日志配置

    接着讲基于ASP .net Core 的web开发,这节主要讲一下如何使用和配置Nlog进行日志记录. 日志在开发中的作用是很重要的,使用日志,程序出了错误可以及时捕获并记录下来,开发人员可以通过日志 ...

  5. File & Directory

    新开一节IO(Input/Output)的用法. 这节主要讲一下操作文件和文件目录的两个静态类:File 和 Directory. 在进入正题之前,先理解一下相对路径和绝对路径这两个概念: 绝对路径, ...

  6. Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路

    前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...

  7. 改善c++程序的150个建议(读后总结)-------0-9

    0. 不要让main 函数返回 void 入口函数main()返回类型应该为 int, 即程序结束时return 0 表示程序正常返回,函数结束时 return -1 值表示程序异常返回, 如果不显式 ...

  8. 【近取 key】Alpha 阶段任务分配

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 alpha阶段初始任务分配 我在这个课程的目标是 进一步提升工程化开发能力,积累团队协作经验,熟悉 ...

  9. [云计算] OpenStack 发展史

    传统数据中心面临的问题 无法管理,资源利用率不高 资源分配不合理 初始成本高 发展阶段 IDC 托管/租用 VPS(虚拟专用主机/OpenVZ/XEN) 虚拟主机 云主机 虚拟化 服务器虚拟化 KVM ...

  10. 查看 swappiness 值

    Swap的使用频率  发表于 2017-06-02 |  分类于 Linux |  评论数: 通过调整swappiness的值, 可以调整系统使用 swap 的频率 该值越小, 表示越大限度的使用物理 ...