首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux用户、组、权限和文件

Linux用户、组、权限和文件

作者头像
黑白天安全
发布2020-04-14 15:14:41
11.6K0
发布2020-04-14 15:14:41
举报

Linux 的安全性

  • Linux安全系统的核心时用户账户。每个能进入Linux系统的用户都会被分配唯一的用户账户,用户对系统中各种对象的访问权限取决于他们登陆系统时用的账户。
  • 用户权限是通过创建用户时分配的用户ID(User ID,通常缩写为UID)来跟踪的。UID是数值,每个用户都有唯一的UID,但在登录系统时用的不是UID,而是登录名。登录名是用户用来登录系统的最长八字符的字符串(字符可以是数字或字母),同时会关联一个对应的密码。

/etc/passwd文件

Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。这个文件就是 /etc/passwd文件,它包含了一些与用户有关的信息。如下:

  • root用户账户是Linux系统的管理员,固定分配给它的UID是0。就像上例中显示的,Linux系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户。这些账户叫作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。所有运行在后台的服务都需要用一个系统用户账户登录到Linux系统上。
  • 在安全成为一个大问题之前,这些服务经常会用root账户登录。遗憾的是,如果有非授权的用户攻陷了这些服务中的一个,他立刻就能作为root用户进入系统。为了防止发生这种情况,现在运行在Linux服务器后台的几乎所有的服务都是用自己的账户登录。这样的话,即使有人攻入了某个服务,也无法访问整个系统。
  • Linux为系统账户预留了500以下的UID值。有些服务甚至要用特定的UID才能正常工作。为普通用户创建账户时,大多数Linux系统会从500开始,将第一个可用UID分配给这个账户(并非所有的Linux发行版都是这样)。 你可能已经注意到/etc/passwd文件中还有很多用户登录名和UID之外的信息。/etc/passwd文件的字段包含了如下信息:
  • 登录用户名
  • 用户密码
  • 用户账户的UID(数字形式)
  • 用户账户的组ID(GID)(数字形式)
  • 用户账户的文本描述(称为备注字段)
  • 用户HOME目录的位置
  • 用户的默认shell(用户登陆shell,/bin/bash表示可以登陆,/sbin.nologin表示不被授权)

注意:/etc/passwd是一个标准的文件,我们可以使用编辑器来编辑它。一般来说root的用户uid为0,如果我们把一个普通用户的uid修改为0的话,那么它只要用普通用户的用户名和密码登陆就可以切换到root用户了,所以说这样做是不好的,及其危险的!

值得注意的是/etc/passwd文件中的密码字段都被设置成了X,这并不代表说所有用户的密码都是相同的!在早些年的Linux上,/etc/passwd文件里有加密后的用户密码。但是很多程序都要访问/etc/passwd文件来获取用户的权限,这样肯定会造成安全隐患。而且随着密码破解工具的不断强大,/etc/passwd文件中的密码更加的危险。 现在的Linux系统都将用户密码爆出在另外一个单独的文件夹中,这个文件就叫shadow文件,路径是/etc/shadow。只有特定的程序,比如我们要登陆Linux系统的时候才能访问这个文件。

/etc/shadow 文件

/etc/shadow文件是存储系统账户密码的文件,只有root用户才能够访问它,比如我现在用一个普通用户,它能访问/etc/passwd但是它不能访问/etc/shadow

/etc/shadow文件为系统上的每一个用户账户都保存了一条记录,如下:

parrot:$6$ee8g5J/xT4b8FDeS$plJpruIUbsNjQA9WdkxtJZ/4IOaB6XtVIyMScr4KtYocTwp3YMYrz6e/KxQuWIZ6yNHL.klGQtwXHovmuJ34I.:18345:0:99999:7:::

在/etc/shadow文件中的每条记录都有9个字段:

  • 用户名
  • 经过加密后的密码
  • 最后一次修改密码后过去的天数(从1970年1月1日开始计算)
  • 多少天后才能更改密码
  • 多少天后必须更改密码
  • 密码过期几天进行警告
  • 密码过期之后禁用多少天用户账户
  • 账号失效时间距离1970年1月1日的天数间隔
  • 预留字段给将来使用

在字段二密码位置,如果是*表示用户被禁用了,!表示用户密码为初始化,也就是空密码

/etc/group 文件

与用户账户类似,组的信息也保存在系统的一个文件中,在/etc/group文件中包含了系统上用到的每个组的信息。如下:

在了解之前/etc/passwd文件分配的格式之后,我们也不难理解/etc/group的格式,系统账户用的组通常都会分配低于500的GID,用户组的GID则会采用500以上开始分配。

  • 组名
  • 组密码
  • GID
  • 组成员

wheel组

在Linux中wheel就是类似于一个管理员的组。通常在Linux下即使我们有了管理员,也不推荐用root用户登录。一般情况下用普通用户登录就可以了,在需要root权限执行一些操作时,再su登录成为root用户。但是,任何人只要知道了root的密码,就都可以通过su命令来登录为root用户,这无疑为系统带来了安全隐患。所以,将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户了,然后可以修改配置文件使得只有wheel组内的用户可以切换到root用户。

"auth required pam_wheel.so use_uid" 表示禁止非wheel组用户切换到root。

添加新用户

在Linux中使用useradd来新添加用户,可以一次性创建新用户账户及设置用户的HOME目录结构。useradd系统默认值在/etc/default/useradd文件中。

新建用户之后,会为用户设置一些默认值:系统会将/etc/skel目录下的内容复制到用户的HOME目录下、为该用户在mail目录下创建一个介绍邮件的文件、将bash shell作为默认shell、在/etc/passwd,/etc/shawod,/etc/group文件夹中新增用户信息

useradd命令参数:

-c comment           给新用户添加备注
-d home_dir          为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date       用YYYY-MM-DD格式指定一个账户过期的日期
-f inactive_days     指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁用,1表示禁用这个功能
-g initial_group     指定用户登录组的GID或组名
-G group ...         指定用户除登录组之外所属的一个或多个附加组
-k                   必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-m                   创建用户的HOME目录
-M                   不创建用户的HOME目录(当默认设置里要求创建时才使用这个选项)
-n                   创建一个与用户登录名同名的新组
-r                   创建系统账户
-p passwd            为用户账户指定默认密码
-s shell             指定默认的登录shell
-u uid               为账户指定唯一的UID

例子:

#创建用户
useradd zhangsan                          //创建一个张三的用户
useradd -u 666 -g liuliuliu lisi           //创建一个lisi的用户设置它的UID为666并且添加到liuliuliu组中
useradd  -s /sbin/nologin laowang  //创建一个老王的用户并且不给他登陆系统的权限,默认是/bin/bash  (对老王没有恶意)

删除用户

如果你想从系统中删除用户,可以使用userdel来删除用户

userdel -r  laowang
//这里带上-r参数能够删除passwd、shadow、group文件中的用户信息和home目录和邮箱
//如果不带-r参数的话只是删除passwd、shadow、group文件中的用户信息

在有大量用户的环境中使用-r参数时要特别小心。你永远不知道用户是否在其HOME目 录下存放了其他用户或其他程序要使用的重要文件。记住,在删除用户的HOME目录之 前一定要检查清楚!

修改用户

一些修改用户的命令

usermod       修改用户账户的字段,还可以指定主要组以及附加组的所属关系
passwd        修改已有用户的密码
chpasswd      从文件中读取登录名密码对,并更新密码
chage         修改密码的过期日期
chfn          修改用户账户的备注信息
chsh          修改用户账户的默认登录shell

usermod可以用来修改/etc/passwd文件中的大部分字段,它还有一些参数

  • -l 修改用户账户的登录名
  • -L 锁定账户,使得用户无法登陆
  • -p 修改账户的密码
  • -U 解除用户锁定
  • -s 修改用户登陆的shell
  • -g 修改账户所在组
  • -G 给账户添加附加组 usermod -d /hong/xiaohong zhangsan ##更改zhangsan的家 usermod -u 666 zhangsan ##修改zhangsan的UID usermod -l laowang zhangsan ##修改zhangsan的用户名为laowang(原来张三是老王假扮的!) usermod -L laowang ##锁定账户(发现老王的嫌疑) usermod -U laowang ##解锁账户(老王技高一筹,用话语蒙骗过关!她和xiaohong没有一腿)

修改密码

修改密码的话可以使用passwd和chpasswd

##普通修改密码
passwd laowang        ##修改laowang的密码
##批量修改密码,先创建一个带有用户密码的文本文件
vim user_pass.txt
xiaohong:123456
laowang:66666
zhangsan:250250
然后使用chpasswd批量修改
chpasswd  <  user_pass.txt

组管理命令

groupadd  laowangliuliuliu   ##创建一个laowangliuliuliu的组
groupdel  laowangliuliuliu   ##删除laowangliuliuliu组
groups    zhangsan          ##查看zhangsan所属组的信息
groupmod  -n   jen  zhangsan  ##修改zhangsan组名为jen
groupmod  -g   666  jen    ##修改jen的GID为666
groupmems -a   jen   -g   laowang   ##将jen用户添加到laowang组中(变坏了啊!)

区分基本组和附加组

  • 基本组:创建用户的时候系统会同时创建一个和这个用户名同名的组,这个组就是基本组,不可以把用户从基本组中删除。
  • 附加组:除了基本组之外,用户所在的其他组,都是附加组。用户是可以从附加组中被删除的。一个用户可以隶属于多个附加组。但是一个用户只能有一个基本组。

理解文件权限

除了用户有权限之外,文件也是有权限的!ls 命令可以用来查看Linux系统上文件、目录和设备的权限 如: ls -l

前面信息由10个字符组成:例如:

-rwxr-xr-x
  • 第一位表示文件类型;
  • 2~4位表示文件所有者的权限:u权限(user);
  • 5~7位表示文件所有者所属组成员的权限:g权限(group);
  • 8~10位表示所有者所属组之外的用户的权限:o权限(other);

2~10位的权限综合有时成为:a权限(all) 输出结果的第一个字段就是描述文件和目录的权限的信息,含义为:

  • — 代表文件
  • d 代表目录
  • l 代表连接
  • c 代表设备
  • b 代表块设备
  • n 代表网络

在后面有三组字符,代表了3种访问权限(咋这么多对象啊我的天!)

  • r 代表对象是可读
  • w 代表对象是可写
  • x 代表对象是可执行

Linux权限码:

权 限    二进制值    八进制值    描 述
---      000        0          没有任何权限
--x      001        1          只有执行权限
-w-      010        2          只有写入权限
-wx      011        3          有写入和执行权限
r--      100        4          只有读取权限
r-x      101        5          有读取和执行权限
rw-      110        6          有读取和写入权限
rwx      111        7          有全部权限

用数字表示法表示:r 、 w 和x分别用4、2、1来表示,没有授权则为0。例如:

原始权限        转为数字            数字表示法
rwxrwxr-x      (421)(421)(401)     775
rwxr-xr-x      (421)(401)(401)     755
rwx------      (421)(000)(000)     700   #这就是老王的,自己一个人玩!

针对文件:

  • r 表示可以读取文件
  • w 表示可以对文件内容做修改
  • x 表示文件可执行

针对目录:

  • r 表示可以列出目录内容(可以使用ls),前提是得有 x 权限,因为如果你都不能进入这个目录,你怎么列出该目录的内容
  • w 表示可以在目录中增删改查,前提是得有 x 权限,因为如果你都不能进入这个目录,你怎么增删改查
  • x 表示可以进入目录,但不一定能读取目录内的内容。要想读取目录的内容,需要有 r 权限,要想修改,需要有 w 权限!

※目录的权限比较特殊,可以看到,x 权限是目录最基本的权限,因为如果你都不能进入该目录,那读取内容和增删改查就更无从所起了。还有一个就是当你对目录拥有 rwx 权限的时候。倘若目录中有一个文件,该文件对你的权限是没有 w 权限的,但是因为你先匹配到该目录的权限,可以对目录中的文件修改,所以你可以强制修改该文件,保存退出!

由上可以知道laowang分析一下(全面解剖老王的个人品质)

  • 是一个目录
  • 文件所属主权限,可读可写可执行
  • 所属组没有权限
  • 系统上其他人也没有用权限
  • 权限码解读
    • rwx------
    • 转为数字 (421)(000)(000)
    • 数字表示法 700

这样的话我们肯定不爽了,就只能laowang自己一个人玩,组的人也不带上一起玩吗?独乐乐不如众乐乐。 那么我们就可以使用chmod来改变老王自私的行为。 例如,我们要组成员可以在laowang里面增删改查,搞跟一堆事情。那么我们要能进入目录,就是要添加 x 权限,可以修改就是添加 w 权限,还可以看那就要添加 r 权限。直接改吧!

chmod 770 laowang
或者
chmod g=rwx laowang

那现在我要削弱老王自己看自己的东西怎么办,也是可以使用chmod来修改

chmod u-r laowang
文件所属者所属组一个例子
drwxr-xr-x 2 laowang laowang   4096 03-18 11:56 xiaohong

小红所属者是老王,所属组是老王组,哇!这就太不好了吧!我也不懂,但是还是要救失足少女的是吧,可以使用命令chown修改所属者,chgrp修改所属组

 chown xiaohong xiaohong/
 chgrp xiaohong xiaohong/
 ##在查看一下,让小红做回自己
 ls -l
 drwxr-xr-x 2 xiaohong xiaohong  4096 03-18 11:56 xiaohong

umask值

什么是umask?当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、 [HOME]/.bash_profile或[HOME]/.profile中设置umask值。

umask值 文件 目录
0       6    7
1       6    6
2       4    5
3       4    4
4       2    3
5       2    2
6       0    1
7       0    0

一般来说新建文件的默认值是0666,新建目录的默认值是0777 如果将全线的掩码设置为0002的话则每个新建的文件的默认权限为0666-0002=0644,而目录的权限为775。

查看umask值
直接umask

我们知道umask的值为0022后就可以计算出新创建文件和目录的权限了

drwxr-xr-x    =   0777 - 0022 = 755  #目录
-rw-r--r--    =   0666 - 0022 = 644  #文件

我们可以修改umask值来改变新创建文件和目录的权限

umask 0002
drwxrwxr-x   =   0777 - 0002  =  775   #目录
-rw-rw-r--   =   0666 - 0002  =  664   #文件

可以看到umask值设置的越小,给的权限就会越大

Linux 文件系统

Linux在路径名中不使用驱动器盘符。在Windows中,PC上安装的物理驱动器决定了文件的路径名。Windows会为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储其中的文件。例如在D盘下有一个视频,路径为:

D:\myFile\video\Comic.mp4

这种Windows文件路径表明了文件test.doc究竟位于哪个磁盘分区中。Linux则采用了一种不同的方式。Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录(virtual directory)。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照访问它们的目录路径一一列出,这点跟Windows类似。

注意:Linux是使用正斜线(/)而不是反斜线()在文件路径中划分目录。在Linux中, 反斜线用来标识转义字符,要是用在文件路径中的话会导致各种各样的问题

在Linux中,假如老王在他家放了一些影片录像,那么他的路径可能为:

/home/laowang/Desktop/SomeFilms.avi

这里表明了SomeFilms.avi位于Desktop目录,Desktop又位于laowang目录中,laowang则在home目录中,它这里并没有提供任何信息表明它存放在那个物理磁盘上面。

Linux虚拟目录中比较复杂的部分是它如何协调管理各个存储设备。在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器中。

何为挂载呢?Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

  • 如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。
  • 挂载,指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。
  • 并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。

举个例子,我们想通过命令行访问某个 U 盘中的数据,图 1 所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。

可以看到,目前 U 盘和 Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。 接下来,我们在根目录下新建一个目录 /sdb-u,通过挂载命令将 U 盘文件系统挂载到此目录,挂载效果如图:

常见Linux目录名称

目 录          用 途
/             虚拟目录的根目录。通常不会在这里存储文件
/bin          二进制目录,存放许多用户级的GNU工具
/boot         启动目录,存放启动文件
/dev          设备目录,Linux在这里创建设备节点
/etc          系统配置文件目录
/home         主目录,Linux在这里创建用户目录
/lib          库目录,存放系统和应用程序的库文件
/media        媒体目录,可移动媒体设备的常用挂载点
/mnt         挂载目录,另一个可移动媒体设备的常用挂载点
/opt         可选目录,常用于存放第三方软件包和数据文件
/proc        进程目录,存放现有硬件及当前进程的相关信息
/root        root用户的主目录
/sbin        系统二进制目录,存放许多GNU管理员级工具
/run         运行目录,存放系统运作时的运行时数据
/srv         服务目录,存放本地服务的相关文件
/sys         系统目录,存放系统硬件信息的相关文件
/tmp         临时目录,可以在该目录中创建和删除临时工作文件
/usr         用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
/var         可变目录,用以存放经常变化的文件,比如日志文件

本文由 jen 撰写

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑白天实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux 的安全性
  • /etc/passwd文件
  • /etc/shadow 文件
  • /etc/group 文件
  • wheel组
    • 添加新用户
      • 删除用户
        • 修改用户
          • 修改密码
            • 组管理命令
              • 区分基本组和附加组
                • 文件所属者所属组一个例子
            • 理解文件权限
            • umask值
            • Linux 文件系统
            • 常见Linux目录名称
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档