Linux 基础-4

Linux 用户管理

Linux 用户分为 管理员 (root)、系统用户、普通用户。根据 UID 来判断用户类型

  • 0 : 系统管理员用户
  • 1~999 : 系统用户,避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围
  • 从 1000 开始 : 普通用户,由管理员创建用于日常工作的用户

在 Linux 中,通过纯文本文件来存储用户信息。其中最为重要的文件有 /etc/passwd、/etc/shadow,账号管理就是对这几个文件进行操作,默认情况下,只允许 root 用户进行更改

/etc/passwd
一行表示一个用户基础信息,各类信息之间通过 “:” 分割,每段信息的含义如下:
root:x:0:0:root:/root:/bin/bash
用户名:密码:UID:GID:备注:主目录:Shell 类型

/etc/shadow
一行表示一个用户登录信息,每段信息的含义如下:
root:$6$y$j9T$V9N:19796:0:99999:7:::
用户名:密码:最后一次修改时间:最小间隔:最大间隔:警告时间:不活动时间:失效时间:保留字段

其中,当密码字段为 * 时表示用户被禁止登录,为 ! 时表示用户被锁定,为 !! 时表示未设置密码。最小、最大间隔和警告时间,为密码修改间隔以及提醒更新密码时间。不活动时间代表密码过期 n 天后禁用账号,失效时间指密码失效的绝对天数 (从 1970-1-1) 开始计算

Linux 用户组分为私有组、标准组、系统组,关于用户组的信息,存在 /etc/group 和 /etc/gshadow 文件中

  • 私有组 : 创建用户时,若没指定用户组则会自动生成一个与用户同名的组
  • 标准组 : 多个用户共同加入的组
  • 系统组 : 系统运行所必需的组,安装系统或软件时自动创建

/etc/group
一行表示一个用户组信息,每段信息的含义如下:
root:x:0:
组名:组密码:GID:组成员

/etc/gshadow
一行表示一个组密码信息,每段信息的含义如下:
root:*::
组名:加密密码:组成员:组附加用户列表

管理用户的命令

# 创建用户
adduser [options] LOGIN
useradd [options] LOGIN
# -c 添加备注
# -d 设置用户家目录
# -e 设置失效日期
# -m 用户目录不存在时自动创建
# -M 不创建家目录
# -n 不创建同名组
# -p 设置用户密码
# -s 设置用户默认 Shell
# -u 设置 UID

# 编辑用户
usermod [options] LOGIN
# -c 修改备注
# -d 修改用户家目录
# -e 修改失效日期
# -f 设置有效期
# -l 修改用户名称
# -u 修改 UID
# -L 锁定用户
# -U 解锁用户
# -a 将用户添加至扩展组中
# -G 修改用户所属的附加群组
# -p 修改用户密码

# 删除用户
userdel [options] LOGIN
# -f 强制删除
# -r 删除用户和其家目录以及目录下文件

管理用户组的命令

# 创建用户组
groupadd [options] GROUP
# -f 若用户组存在,则跳过创建
# -g 设置 GID

# 编辑用户组
groupmod [options] GROUP
# -g 设置 GID
# -n 设置用户组名称

# 删除用户组 (只能删除空用户组)
groupdel [options] GROUP
# -f 强制删除

Linux 文件权限

Linux 中每个目录和文件都有归属的所有者和所属组,并规定了所有者、所属组及其他人的读取 (r)、写入 (w)、执行 (x) 等权限,其中文件权限与目录权限的区别如下:

文件目录
读取 (r)是否能查看文件内容 (cat)是否能查看目录内容 (ls)
写入 (w)是否能修改文件 (vim)是否能在该目录内创建文件 (touch)
执行 (x)是否能执行该文件 (./script.sh)是否能进入该目录 (cd)

Linux 权限表示分为字符表示与数字表示 :

chmod 与 chown

Linux 中通过 chmod 命令修改文件和目录权限,而 chown 可以修改文件和目录的归属

# chmod
chmod [OPTION]... MODE[,MODE]... FILE...
# -R 递归修改该目录下所有文件和子目录的权限
# chmod 可以使用字符表示法来修改权限,例如:
chmod u+r file
# 表示给 file 文件的所有者读取权限
# 其中 u (所有者)、g(所属组)、o(其他人)、a(三者皆是)
# + 为增加权限、- 取消权限、= 唯一设定权限

# 也可以通过数字表示法来修改权限,例如:
chmod 644 file
# 644 分别为所有者读写权限(r+w),所属组和其他人的只读权限(r) 
# 当使用此方法时,不能像字符那样单独指定一方操作权限,必须将三方的权限都写上
# chown
chown [OPTION] user[:group] file...
# -R 递归设置该目录下所有文件和子目录的所属
# -v 输出处理过程

特殊权限

SUID
SUID 是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限。相当于以该文件所有者身份执行。当文件的所有者执行权限变为了 “s”,代表该文件被赋予 SUID 权限

设置 SUID 的方法 (文件所有者拥有执行权限的前提下)

chmod u+s file
chmod 4755 file

SGID
SGID 特殊权限有两种应用场景:当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。当文件的所属组执行权限变为了 “s”,代表该文件被赋予 SGID 权限

设置 SGID 的方法 (文件所属组拥有执行权限的前提下)

chmod g+s file
chmod 2755 file

SBIT

SBIT (Sticky Bit) 特殊权限可确保用户只能删除自己的文件,而不能删除其他用户的文件。与前两特殊权限不同,若文件的其他人执行有 x 执行权限则会写成 t,原本没有 x 执行权限则会被写成 T,表示被赋予了 SBIT 权限

设置 SBIT 的方法

chmod o+t file
chmod 1755 file

隐藏属性

Linux 文件除了具备权限外,还包含隐藏属性。可以通过 lsattr 命令查看文件的隐藏属性,通过 chattr 来设置隐藏属性

常用隐藏属性

i : 设置在文件上时,无法对文件进行修改;设置在目录上时,仅能修改其中的子文件内容,而不能创建或删除文件
a : 仅允许追加内容,无法覆盖/删除内容 (append only)
# lsattr
lsattr [-RVadlpv] [files...]
# -a 显示所有文件和目录

# chattr
chattr [-RVf] [-+=aAcCdDeijPsStTuFx] files...
# -R 递归处理
# +<属性> 开启该项属性
# -<属性> 关闭该项属性

su 与 sudo

Linux 作为多用户系统,当需要切换用户时需要通过 su 命令来切换

su [-] [user]
# - 不带环境变量切换,完全切换到新的用户

当普通用户执行命令权限不足时,可在执行的命令前加上 sudo 获取额外的权限

sudo [command [arg ...]]
# sudo -l 显示出执行 sudo 的使用者的权限

使用 sudo 命令可以给普通用户提供额外的权限来完成原本只有 root 管理员才能完成的任务,可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限 (/etc/sudoers)

/etc/sudoers 配置

可以使用 visudo 命令直接打开 /etc/sudoers 配置文件进行编辑,只有在配置文件中写入用户和相关配置,该用户才能使用 sudo 来获取额外权限

# 关于 root 用户权限完整格式
root ALL=(ALL:ALL) ALL
# root : 指的是 root 用户,也就是系统的超级用户
# ALL : 表示 root 用户可以在所有的主机上使用 sudo
# = : 等号后面跟的是权限的分配
# (ALL:ALL) : 这部分定义了 root 用户可以模拟 (或代表) 所有用户 (ALL) 和所有组 (ALL) 来执行命令
# ALL : 最后的 ALL 表示 root 用户可以执行所有命令

# 例如
test ALL=(ALL) NOPASSWD: /bin/useradd
# test 用户能在主机上使用 sudo 以任何用户的身份执行 /bin/useradd 命令,且不需要输入密码

其中 NOPASSWD: 为特殊标记,含义如下:

  • 不需要密码:当 NOPASSWD: 出现在用户的 sudoers 条目中时,该用户在使用 sudo 执行命令时不会被,提示输入密码
  • 范围限定:NOPASSWD: 可以与特定的命令一起使用,限制不需要密码的权限只适用于特定的命令
  • 命令前缀:NOPASSWD: 会跟在用户的命令权限声明之前,用来指定后面的命令不需要密码
常见特殊标记有:
PASSWD: 与 NOPASSWD: 相反,这个标记指定用户在使用 sudo 执行命令时需要输入密码
EXEC: 允许用户执行命令,但不能使用 sudo 来获取一个 shell
ALL: 表示没有限制,可以用于指定主机、命令或者用户
RUNAS: 允许指定用户在使用 sudo 时以另一个用户或组的身份执行命令

多种配置 sudo 权限的方式

/etc/sudoers 配置文件主要分为三块部分

  • 默认配置 (default),主要设置 sudo 的一些缺省值
  • 别名 (alias),主要有 Host_Alias、Runas_Alias、User_Alias、Cmnd_Alias
  • 安全策略,设定用户/用户组的权限

指定用户

# 建议在原配置下补充
# User privilege specification
root    ALL=(ALL:ALL) ALL
test    ALL=(ALL:ALL) ALL

指定用户组

# sudoers 的配置
# Allow members of group sudo to execute any command
# %wheel	ALL=(ALL)	NOPASSWD: ALL
%sudo   ALL=(ALL:ALL) ALL
%dev    ALL=(ALL) NOPASSWD: ALL


# 将用户加入 dev 附属组
usermod -aG dev test

别名分组

通过将用户、资源、权限分组命名,并将别名组成策略 :

User_Alias Host_Alias=(Runas_Alias) Cmnd_Alias

# Host alias specification
Host_Alias    HOSTS = hostname1, hostname2, hostname3 

# User alias specification
User_Alias    USERS = user1, user2

# Cmnd alias specification
Cmnd_Alias    PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
Cmnd_Alias    SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

# Runas alias specification
Runas_Alias    DBA = oracle

USERS    HOSTS=(DBA) PROCESSES,SOFTWARE

相关文章

Linux sudo和sudoers详解

上一篇
下一篇