基本操作

首选我们梳理一下 Linux 下的用户、用户组、文件权限等基本知识,然后后面通过一个案例来实际演示一下权限设置的一些操作。

首先 Linux 系统中,是有用户和用户组的概念的,用户就是身份的象征,我们必须以某一个用户身份来操作一个系统,实际上这就对应着我们登录系统时的账号。而用户组就是一些用户的集合,我们可以通过用户组来划分和统一管理某些用户。

比如我要在微信发一条朋友圈,我只想给我的亲人们看,难道我发的时候还要一个个去勾选所有的人?这未免太麻烦了。为了解决这问题,微信里面就有了标签的概念,我们可以提前给好友以标签的方式分类,发的时候直接勾选某个标签就好了,简单高效。实际上这就是用户组的概念,我们可以将某些人进行分组和归类,到时候只需要指定类别或组别就可以了,而不用一个个人去对号入座,从而节省了大量时间。

在 Linux 中,一个用户是可以属于多个组的,一个组也是可以包含多个用户的,下面我以一台 Ubuntu Linux 为例来演示一下相关的命令和操作。

用户和用户组

​ 首先查看所有用户,命令如下:

cut -d':' -f 1 /etc/passwd

结果:

​ 这里一行就是一个用户名,由于太多,部分就省略了,实际上这个命令就是从密码文件中把用户名单独列出来了。

​ 然后查看所有用户组,命令也是类似的:

cut -d':' -f 1 /etc/group

结果:

​ 结果基本是类似的,因为每个用户在被创建的时候都会自动创建一个同名的组作为其默认的用户组。

这里我是使用 ubuntu 这个账号来登录的,下面我来看下 ubuntu 这个账号是属于哪些组。

功能

​ 在Linux中 useradd 命令用来创建或更新用户信息。

​ useradd 命令属于比较难用的命令 (low level utility for adding users),所以 Debian 系的发行版中建议管理员使用 adduser 命令。其实 adduser 命令只是一个调用了 useradd 命令的脚本文件。

​ 本文将详细分析群组和家目录相关的选项。并且以实例的方式介绍常用的 useradd 命令写法。

语法和基本选项

注意:本文并不是一个完整的文档,所以仅列出部分常用的选项进行说明。

useradd [option] username

[option]:

-d 指定用户登入时的目录。

-g 初始群组。

-G 非初始群组。

-m 自动创建用户的家目录。

-M 不要创建用户的家目录。

-N 不要创建以用户名称为名的群组。

-s 指定用户登入后所使用的shell。

​ 查看一个用户所属组的命令格式如下:

groups

​ 这里就是 groups 命令加上用户名就能查看该用户名所属的组了,如果不加用户名的话就默认是当前用户。

例如查看 ubuntu 这个用户所属于的组,命令如下:

groups ubuntu

结果:

ubuntu : ubuntu adm cdrom sudo dip plugdev lxd lpadmin sambashare

​ 还不少,这个用户被分配到了很多组下,比如同名的组 ubuntu,还有 sudo 组,另外还有一些其他的组。

其中 sudo 组比较特殊,如果被分到了这个组里面就代表该账号拥有 root 权限,可以使用 sudo 命令。

了解了怎样查看用户所属的组,我们也应该反过来了解如何查看一个用户组里面包含哪些用户啊。

​ 查看某个用户组下所有用户命令如下:

members

​ 不过这个命令不是自带的,需要额外安装 members 包,命令如下:

sudo apt-get install members

​ 例如查看 sudo 用户组下的所有用户,即拥有 root 权限的用户:

members sudo

​ 结果:

ubuntu hadoop

​ 可以看到拥有 root 权限的用户有两个,ubuntu 和 hadoop,当然不同的机器结果肯定是不一样的。

接下来介绍一个比较有用的命令,就是 id 命令,它可以用来查看用户的所属组别,格式如下:

id

​ 例如查看 ubuntu 用户的信息,就是这样:

id ubuntu

结果:

uid=500(ubuntu) gid=500(ubuntu) groups=500(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)

​ 这里有一个 gid,作为主工作组,后面还有个 groups,它列出了用户所在的所有组。主工作组只有一个,而后者的数量则不限。可以看到用户组的结果和使用 groups 命令看到的结果是一致的。

​ 接下来我们再来了解一下如何创建一个用户和怎样为用户分配组别。

​ 添加一个用户命令格式如下:

sudo useradd

​ 比如我要添加一个用户 cqc,命令就可以这么写:

sudo useradd cqc

​ 这里使用的命令前面都带有 sudo,因为毕竟是系统级别的操作。

​ 添加一个组的命令格式如下:

sudo groupadd

​ 格式是类似的,后面跟一个组的名称就可以了,例如我要为我的实验室创建一个用户组,那么就可以使用如下命令:

sudo groupadd lab

​ 创建完了用户和组,那得把它们关联起来吧,关联的意思就是把某个用户加入到某个组里面,命令格式如下:

sudo useradd

​ 或者使用 usermod 命令:

sudo usermod -G

​ 如果要添加多个组的话,可以通过 -a 选项指定多个名称:

sudo usermod -aG

​ 例如我要将 cqc 用户添加到 sudo 用户组中,命令就是:

sudo useradd cqc sudo

​ 或:

sudo useradd -G sudo cqc

​ 这样就为用户和用户组做好关联了。

细说用户组

​ 首先我们要搞清楚,什么是初始群组?简单来说在 /etc/passwd 文件中,每行的第四个字段指定的就是用户的初始群组。用户登录后立即就拥有了初始群组中的权限。

​ 下面我们通过不同的命令来查看群组选项的用法:

sudo useradd tester1

​ 没有使用任何群组相关的参数,默认在创建用户 tester1 的同时会创建一个同名的群组。用户 tester1 的初始群组就是这个新建的群组。

sudo useradd tester2 -N

​ 这次我们使用了 -N 选项,即不要生成与用户同名的群组。查看下 /etc/passwd 文件,发现 tester2 用户的初始群组ID是100。这个100是哪来的?有ID为100的群组吗?其实100作为 -N 的默认值是写在配置文件中的。不管有没有ID为100的群组,都是这个值。当然我们也可以通过修改配置文件来改变这个默认值!

sudo useradd tester3 -g sudo

​ sudo 是一个非常有权势的群组,我决定把 tester3 加入到这个群组。好,现在去查看一下 /etc/passwd 和 /etc/group 文件,看看有没有新的群组被创建? tester3 的初始群组又是谁?这次没有创建与 tester3 同名的群组。用户 tester3 的初始群组变成了 sudo。

sudo useradd tester4 -G sudo

​ 和上一条命令相比我们只是把小写的g替换成了大写的G。但结果可相差太多了,请您一定要好好的检查 /etc/passwd 和 /etc/group 文件。因为这次不仅创建了群组 tester4,它还是用户 tester4 的初始群组。和tester1 的唯一不同是 tester4 被加入了 sudo 群组。

​ 在实际的使用中,tester3 和 tester4 的场景都是比较常见的,需要根据实际情况进行区分。

细说家目录

​ Useradd 命令对用户家目录的处理让人困惑,下面我们将通过实验来了解家目录相关的不同选项的使用方法:

sudo useradd tester1

​ 让我们重新看看创建用户 tester1 这条命令。它不会为用户 tester1 创建名为 tester1 的目录作为家目录,但是我们打开 /etc/passwd 文件,发现 tester1 的记录中居然包含了家目录 /home/tester1。

tester1:x:1005:1005::/home/tester1:

​ 这让人不可思议,但这条命令确实是这么实现的。

sudo useradd -m tester5

​ 若要在创建用户的同时创建用户的家目录,必须指定 -m 选项。

sudo useradd -d /home/abc tester6

​ 我们希望自己指定家目录,此时不生成目录 abc

sudo useradd -d /home/abcd -m tester7

​ 此时生成目录 abcd,并且目录下默认存在文件

常见用例

Case 1: 创建一个带有家目录并且可以登录 bash 的用户

sudo useradd -m -s /bin/bash tester1

Case 2: 指定创建用户家目录的路径

sudo useradd -m -d /home/xxx tester2

​ /home/xxx目录会被创建。

Case 3: 创建用户家目录且能登录bash的用户,所属组,同时填写用户密码

useradd -m -s /bin/bash -d /home/test/ -G root -p xxxxxx tester3

Case 4: 创建一个没有家目录且不能登录的用户

sudo useradd -s /sbin/nologin tester3

Case 5: 创建时把用户加入不同的用户组

sudo useradd -m -G xxx,sudo tester4

注意过个组名使用逗号分隔,不能有空格。

linux区分用户的权限级别可用,Linux用户及权限管理相关推荐

  1. linux网络测速qerf,最新可用linux/centos 7上网络测速|测试网速脚本

    最新可用linux/centos 7上网络测速|测试网速脚本!centos 7上测试网速的一个小工具speedtest! Speedtest.net强大而知名的全球宽带网络速度测试网站,采用Flash ...

  2. 构建高可用linux和鸟哥,构建高可用Linux服务器

    <构建高可用Linux服务器(第3版)>是Linux运维领域公认的经典畅销书,是国内51CTO.IT168等知名网站和多位资深运维专家共同推荐的运维工程师必备的工具书! "酒哥& ...

  3. linux区分用户的权限级别可用,如何限制Linux内核级别的特权用户访问?

    我在 learning Linux Kernel Programming找到了这个答案,我的问题更具体针对Linux内核的安全功能.我想知道如何限制特权用户或进程对其他进程和文件的访问权限,而不是ro ...

  4. linux怎么看一个端口是否可用,LINUX中查看某个端口是否被占用的方法

    LINUX中查看某个端口是否被占用的方法 发布时间:2020-07-23 13:55:09 来源:亿速云 阅读:64 作者:小猪 这篇文章主要讲解了LINUX中查看某个端口是否被占用的方法,内容清晰明 ...

  5. linux 设置变量在脚本之外可用,linux – 在ssh上运行脚本时,环境变量不可用

    假设我有两个主机:A和B,用户a和b. B是安装了Cygwin的 Windows机器,如果这很重要的话. B被配置为从A到SSH访问而没有密码(它包含A的公共RCA密钥),因此我可以通过以下方式从A运 ...

  6. Linux的逻辑卷状态不可用,linux – 逻辑卷在引导时处于非活动状态

    所以我最终设法解决了这个问题.检测逻辑卷存在一个问题(bug),这是某种竞争条件(可能在我的情况下,这种情况发生在KVM内部).这在 following discussion中有所涉及.在我的特殊情况 ...

  7. 在SharePoint 2010中创建网站的权限级别

    转:http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能,使我们对权限的设置又提高了一个层 ...

  8. linux区分用户权限级别的命令,认识Linux命令--用户、权限管理

    用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理. 在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同 ...

  9. linux根-文件系统-目录管理-文件管理-用户及权限详解-用户组-用户管理-权限管理...

    一 .Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上. 目录提供了管理文件的一个方便而有效的途径. Linux使用标准的目录结构,在安装的时候,安装 ...

最新文章

  1. Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例
  2. mui汉字图标_MUI从入门到项目实战(三)增加自定义icon图标
  3. Java字符串String比较不要用==原因
  4. 万字长文总结八大经典内部排序算法
  5. 经典C语言程序100例之四二
  6. java-基础-ArrayList剖析
  7. 判断个十百千位之后是否大于20 java——CSDN博客
  8. AppDelegate.h
  9. emailjava中怎么校验_Java使用注解实现参数统一校验功能
  10. AOE网与关键路径简介
  11. C++中cin的常用用法
  12. C4996 'sprintf': This function or variable may be unsafe.
  13. 28本大数据/数据分析/数据挖掘电子书合集免费下载!
  14. 黎活明写给程序员的忠告
  15. php 上传图片后反转,PHP想象将图像从CMYK转换为RGB反转图像
  16. pytorch与torch的关系
  17. 倒计时c#/unity
  18. 吴恩达神经网络和深度学习
  19. 常用流程图符号和基本流程图
  20. 微前端在得物客服域的实践/那么多微前端框架,为啥我们选Qiankun + MF

热门文章

  1. 安装Windows+Ubuntu18.04双系统(双盘)及grub引导修复
  2. 请给我发邮件,不要发微信
  3. 关于Google浏览器添加QQ电脑管家广告过滤插件出现2345主页拦截问题
  4. 2021年低压电工考试题库及低压电工模拟试题
  5. java getfield_Field getField(String name)
  6. 引入非线性激励函数的作用
  7. 虚拟轮杆实现触摸屏模拟游戏手柄
  8. 计算机网络之(2):TCP 相关知识——累积确认,三次握手,四次挥手,滑动窗口,超时重传、快速重传
  9. cura 4.8 加插件_不能自己加,只能使用市场的
  10. Java面向对象编程+jdbc连接MySQL+日志Log4j 《项目搜搜移动大厅》