Linux用户与用户组,文件权限及所有权

用户与组信息读取

  1. 查看当前生效用户身份 whoami 或 id -un
  2. 查看用户所属组 id -gnid -Gn
  3. 用户列表定义在 /etc/passwd 文件。实际的密码管理对应数据文件是 /etc/shadow 因为。/etc/passwd 是公共可以访问的,以勉密码hash被暴力破解。
  4. /etc/passwd 文件 每行一用户记录,格式为 用户名:用户密码:用户ID:组ID:备注:Home目录:默认shell
    • 用户密码一列,一般是填充x 字符。表示实际密码 hash是在 /etc/shadow 中。
    • 组ID 为用户所属默认组的ID,用户ID为0的用户为 root 用户,即使名称不是root
    • 登录shell可以为空,也可以是其他可执行程序,比如常见的 /bin/false
    • 虽然 /etc/passwd 是纯文本文件,可以直接编辑 ,但是直接编辑容易出错,出错会导致无法登录,可以使用 usermod (意为 modify a user account) 命令编辑修改其中信息。
    • usermod -c 'code talks' ubuntu 修改ubuntu 用户的备注栏为 code talks

用户和组管理

  1. 添加用户使用 useradd <user> 命令。(注意要创建用户主目录需要提供 -m 参数。默认主目录是 /home/,可以通过 -d 参数指定。)

  2. 通过 passwd <user> 为指定用户设置密码,用户登录之后可以自行更新自己密码。

  3. userdel <user> 提供 -r 参数则表示用户主目录也一同删除(值得注意的是被删除用户所拥有的文档保留在其他系统目录中的时候,完全删除账号可能引起错误,所以一般是禁用账号而不是删除它。)

  4. groupadd <group> 添加用户组。

  5. groupmod <group> 修改组信息。

  6. groupdel <group> 删除组,注意由于同userdel 一样的原因,一般不建议删除用户组。

  7. gpasswd <group> 设置组密码,一般不需要。

  8. passwd -d或 --delete <user> 删除删除指定用户密码,这样对应用户便无法登录。

  9. passwd -e或 --expire 使用户密码马上过期。

usermod 使用说明

基本语法 usermod [options] 用户名 用户名指是的登录名。

  1. -c,--comment <comment> 修改用户备注栏。
  2. -d,--home <home_dir> 为用户指定新的主目录,如果同时指定了 -m,--move-home 选项,原来主目录中的内容会移到过去。
  3. -e,--expiredate <expire_date> 指定用户的过期日期(格式为:YYYY-MM-DD),空值表示删除过期时间。
  4. -f,--inactive <inactive> 指定账号密码过期之后的到禁用账号的过滤天数。值为-1的话,禁用此功能。
  5. -g,--gid <group> 指定用户所属默认组,要求组已经创建。
  6. -G,--groups 指定所属组列表,也要求组已经创建,不在此列表上的组将退出,如果是要表示加入新的组的功能,需要使用 -a,--apend 选项。
  7. -l,--login <new_login> 为用户指定新的登录名,用户主目录及邮件目录等都不会变化 ,如果需要可以手动修改。
  8. -L,--lock 锁定用户密码,实际上是在用户密码hash前添加了 ! 符号。(注意这只是禁用了密码登录,没有禁用已经配置的ssh登录)
  9. -U,--unlock 解锁用户密码。也就是删除密码hash前面的 ! 符号。
  10. -u,--uid <uid> 为用户指定新的 UID,UID要求唯一,除非同时指定了 -o,--non-unique 选项。
  11. -s,--shell <SHELL> 为用户指定新的登录 shell. 如果设置为空,系统将使用默认的登录shell.

Linux 原生的访问控制是通过控制文件的一组属性实现的。

这些属性集合叫做 access mode 或者直接叫 mode(文件模式),mode 信息存放在索引节点 inode 中。

文件模式中访问者分为三类

  • user用户,简称为 u,即文件的拥有者
  • group 用户组,简称为 g,拥有文件的的组。
    -other 其他人。简称为 o

文件权限的含义:

权限 符号 文件权限含义 目录权限含义
读(read) r 查看文件内容 列出目录内容
写(write) w 写入或改变文件 建立或删除目录中的文件
执行(eXecute) x 文件可执行 可进入(cd)目录

文件模式的由12个bit位,也就是4个8进制表示。
从左向右(即从0到11)
0-2: 分别表示 suid标志位,sgid标志 位,sticky 标志位。
3-11 分为三组,每一组的位含义都是 读标位,写标志位,执行权限标志位。

SUID

SUID suid 只对可执行文件有意义,对于目录无意义。此标志位设置,表示程序的实际是使用文件所属的用户的权限来执行应用程序。
要特别注意设置了 SUID 的程序是否有提权漏洞。

SGID

SGID sgid 对于可执行文件的意义类似于 sgid, 也就是程序的实际使用的是文件所属组的权限来执行应用程序。 对于目录来说 ,设置了 sgid 的目录下新创建所有文件的的所属组就是设置了 sgid 目录的的所属组,这可以用于确定某一个团队共享目录下的所有文件都属性此团队所在组。

Sticky 位

上古时期,此标志位用于告诉操作系统,执行完此应用程序之后,依然将其保留在内存中,下次启动时可以加速启动。 由于现在 Linux 虚拟内存技术的使用,现在 sticky 的这种意义成为多余。
但是如果对文件目录设置 sticky 位则有其他效果,在设置了 sticky 位的目录中,只有文件的拥有者,此目录的拥有者和root 用户才能删除或重命名该目录的文件。 可用于团队目录或者 /tmp 目录中的文件共享。

SUID, SGID, Sticky 标志位在模式字符串的表示。

在 ls -l 输出的模式字符串中只有三段,那怎么判断是否设置了 SUID,SGID,Sticky标志位呢?
由于这些标志位是特殊标志位,为了减少模式字符占用。

  1. SUID 标志位中 用户权限段的x 标志位共用字符。如果 x,suid 同时设置了就用s 表示。如果x 没有设置应用 S 表示。
  2. SGID 类似,使用组权限段的 x 标志位共用字符。
  3. Sticky 类似则与其他用户权限段 x 标志位共用字符。如果 x,sticky 同时设置了就用 t 表示,如果 只设置了 sticky 位则用 T 表示。

umask

在新创建文件时,为根据当前用户的默认设置为其设定权限保护位。
umask 命令不加参数即输出当前的umask 掩码。umask 掩码为 022 的8进制表示,相当于
000 010 010 相当于是取消组权限和其他用户权限段的写权限。
umask 后面加参数可以设置新的 umask 掩码。 umask <newumaskvalue>

对于 umask 值为 022 来说。
由于文件的创建的初始值为 666,目录创建的初始值为 777
应用 umask 之后。
新创建文件的权限便为 644,新创建的目录的权限便为 755

使用 chmod 改变访问模式

该命令接受8进制数字和模式字符串两种参数形式。
符号意义及说明如下:

  1. 用户类型
  • a all 针对所有用户
  • o other 针对其他用户
  • g group 针对组用户
  • u user 针对拥有者
  1. 操作类型
  • - 取消权限
  • + 增加权限
  • = 精确设置权限
  1. 权限类型
  • r read 读权限
  • w write 写权限
  • x eXecute 执行权限
  • X 对已具有执行权限的目录和文件设定执行权限,但不包括无格式文件。
  • s SUID 或 SGID 属性
  • t sticky 属性。
  1. 命令选项
  • -v,--verbose 输出对每一个文件所做的更改.
  • -c,--changes 类似 -v 但是只输出变更部分。
  • -R, --recursive 递归模式。
  • -f,--silient,--quiet 安静模式,屏蔽大部分错误。

ls 命令下的特殊文件标识字符

  • b block 块文件
  • c char 字符文件
  • d directory 目录
  • l link (symbol link)符号链接
  • s socket link 套接字链接
  • p pipe FIFO 管道
  • - regular file 普通文件
发布了19 篇原创文章 · 获赞 2 · 访问量 5817

猜你喜欢

转载自blog.csdn.net/dongmie1999/article/details/102826299