linux-文件权限

  • 2022 年 8 月 24 日
  • 笔记

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

字段分别是:

  • 登录用户名
  • 用户密码
  • 用户账户的UID(数字形式)
  • 用户账户的组ID(GID)(数字形式)
  • 用户账户的文本描述(称为备注字段)
  • 用户HOME目录的位置
  • 用户的默认shell

root用户账户是Linux系统的管理员,固定分配给 它的UID是0。Linux为系统账户预留了500以下的UID值。有些服 务甚至要用特定的UID才能正常工作。为普通用 户创建账户时,大多数Linux系统会从500开始, 将第一个可用UID分配给这个账户。/etc/passwd文件中的密码字段都被设置成了x。绝大多数Linux系统都将用户密码保存在另 一个单独的文件中(叫作shadow文件,位置 在/etc/shadow)。只有特定的程序(比如登录程 序)才能访问这个文件。

二、/etc/shadow文件
/etc/shadow文件对Linux系统密码管理提供了更多 的控制。只有root用户才能访问/etc/shadow文 件,这让它比起/etc/passwd安全许多。

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

  1. 与/etc/passwd文件中的登录名字段对应的登录名
  2. 加密后的密码
  3. 自上次修改密码后过去的天数密码(自1970 年1月1日开始计算)
  4. 多少天后才能更改密码
  5. 多少天后必须更改密码
  6. 密码过期前提前多少天提醒用户更改密码
  7. 密码过期后多少天禁用用户账户
  8. 用户账户被禁用的日期(用自1970年1月1日 到当天的天数表示)
  9. 预留字段给将来使用

添加新用户:
useradd可以一次性创 建新用户账户及设置用户HOME目录结 构。useradd 命令使用系统的默认值以及命令行 参数来设置用户账户。系统默认值被设置 在/etc/default/useradd文件中。可以使用加入了-D 选项的useradd 命令查看所用Linux系统中的这些 默认值。

这个例子列出的默认值如下:

  1. 新用户会被添加到GID为100 的公共组;
  2. 新用户的HOME目录将会位 于/home/loginname;
  3. 新用户账户密码在过期后不会被禁用;
  4. 新用户账户未被设置过期日期;
  5. 新用户账户将bash shell作为默认shell;
  6. 系统会将/etc/skel目录下的内容复制到用户的 HOME目录下;
  7. 系统为该用户账户在mail目录下创建一个用 于接收邮件的文件。

useradd 命令允许管理员创建一份默认的HOME目录配置,然后把它作 为创建新用户HOME目录的模板。这样就能自动 在每个新用户的HOME目录里放置默认的系统文件。


创建用户test并建立home目录。

删除用户:
如果你想从系统中删除用户,userdel 可以满足 这个需求。默认情况下,userdel 命令会只删 除/etc/passwd文件中的用户信息,而不会删除系 统中属于该账户的任何文件。如果加上-r 参数,userdel 会删除用户的HOME 目录以及邮件目录。然而,系统上仍可能存有已 删除用户的其他文件。这在有些环境中会造成问 题。

usermod
usermod 命令是用户账户修改工具中最强大的一 个。它能用来修改/etc/passwd文件中的大部分字 段,只需用与想修改的字段对应的命令行参数就 可以了。

  • -l 修改用户账户的登录名。
  • -L 锁定账户,使用户无法登录。
  • -p 修改账户的密码。
  • -U 解除锁定,使用户能够登录
    -L 选项尤其实用。它可以将账户锁定,使用户无法登录,同时无需删除账户和用户的数据。要让 账户恢复正常,只要用-U 选项就行了。

passwd
更改用户密码。-e 选项能强制用户下次登录时修改密码。

chpasswd
chpasswd 命 令能从标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设 置。你也可以用重定向命令来将含 有userid:passwd 对的文件重定向给该命令。

chsh
chsh 命令用来快速修改默认的用户登录 shell。使用时必须用shell的全路径名作为参数, 不能只用shell名。

chfn
chfn 命令提供了在/etc/passwd文件的备注字段中 存储信息的标准方法。chfn 命令会将用于Unix的 finger 命令的信息存进备注字段,而不是简单地存入一些随机文本(比如名字或昵称之类的), 或是将备注字段留空。

chage
管理用户账户的有效 期。
chage 命令的日期值可以用下面两种方式中的任 意一种:

  • YYYY-MM-DD格式的日期
  • 代表从1970年1月1日起到该日期天数的数值

chage 命令中有个好用的功能是设置账户的过期日期。


组权限允许多个用户对系统中的对象(比如文 件、目录或设备等)共享一组共用的权限。

/etc/group文件
/etc/group文件包含系统上用到的每个组的信息。

系统账户用的组通常会分配低于500的GID值,而 用户组的GID则会从500开始分配。
/etc/group文件有4个字段:

  • 组名
  • 组密码
  • GID
  • 属于该组的用户列表

用户账户列表某种意义上有些误导 人。你会发现,在列表中,有些组并没有列 出用户。这并不是说这些组没有成员。当一 个用户在/etc/passwd文件中指定某个组作为 默认组时,用户账户不会作为该组成员再出 现在/etc/group文件中。

groupadd

usermod -G shared test 将test用户加到shared组

groupmod
可以修改已有组的 GID(加-g 选项)或组名(加-n 选项)

文件权限

第一个字段的第一个字符代表了对象的类 型:

  • ‘-‘代表文件
  • d 代表目录
  • l 代表链接
  • c 代表字符型设备
  • b 代表块设备
  • n 代表网络设备

之后有3组三字符的编码。每一组定义了3种访问 权限:

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

若没有某种权限,在该权限位会出现单破折线。

这3组权限分别对应对象的3个安全级别:

  • 对象的属主
  • 对象的属组
  • 系统其他用户

  • rwx :文件的属主
  • r-x :文件的属组
  • r-x :系统上其他人

默认文件权限
umask 命令用来设置所创建文件和目 录的默认权限。

第一位代表了一项特别的安全特性,叫作粘着位。后面的3位表示文件或目录对应的umask 八进制值。八进制模式的安全性设置先获取这3个rwx 权限的 值,然后将其转换成3位二进制值,用一个八进 制值来表示。在这个二进制表示中,每个位置代 表一个二进制位。因此,如果读权限是唯一置位 的权限,权限值就是r– ,转换成二进制值就是100 ,代表的八进制值是4。


创建的文件的八 进制权限是644。
对文件 来说,全权限的值是666 (所有用户都有读和写 的权限);而对目录来说,则是777 (所有用户 都有读、写、执行权限)。文件一开始的权限是666 ,减去 umask 值022 之后,剩下的文件权限就成了644。

chmod
改变文件和目录的安全性设置。
格式是:
chmod options mode file
mode 参数可以使用八进制模式或符号模式进行安 全性设置。比如chmod 760 newfile

符号模式
[ugoa…][[+-=][rwxXstugo…]
第一组字符定义了权限作 用的对象:

  • u 代表用户
  • g 代表组
  • o 代表其他
  • a 代表上述所有

后面跟着的符号表示你是想在现有权限基础上增加权限(+),还是在现有权限基础上 移除权限(-),或是将权限设置成后面的值 (=)。,第三个符号代表作用到设置上的权限。
X :如果对象是目录或者它已有执行权限, 赋予执行权限。
s :运行时重新设置UID或GID。
t :粘着位。
u :将权限设置为跟属主一样。
g :将权限设置为跟属组一样。
o :将权限设置为跟其他用户一样。

chown
改变文件的属主.令也支持同时改变文件的属 主和属组。

chgrp
改变文件的默认属组

以下转自://blog.csdn.net/mChenys/article/details/84136801
SUID权限
当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID,简称SUID。
作用:

  • SUID权限仅对可执行文件有效
  • 执行者对于该可执行文件需要具有x权限
  • 在执行过程中,调用者会暂时获得该文件的拥有者权限
  • 该权限只在程序执行的过程中有效


实际上这2个可执行文件的所有者是root,但是我们依然可以在普通账号下使用这两个命令,这是因为普通账号在使用这2个命令的时候会暂时获得其拥有者的权限。
SUID权限中的s有大小写之分,如果强行给普通文件添加s权限,那么现实的是大写的S,因为普通文件没有x权限,这样显示的suid其实没什么用,因为它并不是可执行文件。

只有给文件添加了x权限后,suid才有效。

SGID权限
当s出现在文件的所属组x权限位置上时,表示所属组有SGID的权限。

作用:

  • 既可以作用于目录,也可以作用于可执行文件
  • 只要父目录有SGID权限,所有的子目录都会递归继承
  • 执行者对于该可执行文件需要具有x权限
  • 在执行过程中,调用者会暂时获得该文件的所属组权限

下面演示对目录和文件设置SGID权限

同样SGID的s权限也是分大小写的,当g权限组没有x权限的时候,设置SGID后就会变成大写的S,这点跟SUID一样。

SBIT权限
当t出现在其他组的x权限位置时,表示其他组具有SBIT的权限。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。


权限t也有大小写之分,大写说明没有x权限,小写说明有x权限,这点和权限s是一样的。


SUID/SGID/SBIT权限设置
和rwx权限一样通过chmod命令设置,s、t也有两种设置方法:

1、符号表示:SUID: u+s ,SGID: g+s,SBIT: o+t
2、数字表示:SUID=4,SGID=2,SBIT=1,将原来的三位数扩展为四位数即可,把它们放在权限数字的最开头。例如设置SUID,可以写成4777,设置SGID可以写成,2777,设置SBIT可以写成1777;如果同时设置就是数字之和,例如suid,sgid和sbit都设置的话就是7777