关于linux:Linux权限管理漫谈之用户切换

45次阅读

共计 2539 个字符,预计需要花费 7 分钟才能阅读完成。

Linux 中文件有粗疏的权限管制,许多操作只有文件的拥有者或 root 能力执行,所以在日常应用过程中,须要进行用户切换。Linux 设计之初,提供了 su 命令用于用户的切换,但因为 su 命令粗粒度的管制形式,不合乎权限最小化准则,起初(其实很早,在 1980 年代)又设计了 sudo 命令提供精细化的权限管制。susudo 尽管能够切换到任何用户,然而次要还是用于切换到 root 用户执行系统管理操作。目前 Ubuntu 等发行版间接勾销了 root 用户,应用 sudo 实现零碎的治理性能。上面别离阐明两组命令的应用办法及优缺点。

su 命令

su 命令是 Switch User 的缩写,性能是把命令执行环境切换到其余用户。从 root 切换到其余用户时免口令;其余用户间切换或普通用户切换到 root 时,须要输出指标用户口令。

命令格局:

su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 

参数阐明:

  • -f,–fast:不必读启动文件(如 csh.cshrc 等),仅用于 csh 或 tcsh 两种 Shell
  • -,-l,–login:应用登录 shell,应用此参数,零碎环境变量和 home 目录都会设置为指标用户的,未指定指标用户则默认是 root
  • -m,-p,–-preserve-environment:执行 su 时不扭转环境变数
  • -c –command=COMMAND:变更账号后,执行 COMMAND 指令,而后退回原用户
  • -s,–shell=SHELL:启动指定 shell
  • –help:显示帮忙信息
  • –version:显示版本信息
  • USER:要切换的指标用户
  • ARG:传入新 Shell 的参数

su 和 su - 的区别

su:只切换用户,不切换用户的环境变量和 home 目录
su -:切换目录并同时切换到指标用户的环境变量和 home 目录,切换到 root 时,倡议加上 - 参数,不然会呈现一些命令无奈执行的状况。

su 命令的毛病

  1. 用户切换时,要输出指标用户口令,切换到 root 用户时须要输出 root 的口令,导致用户口令泄露
  2. 切换到 root 后,不会主动退出,用户会始终在 root 用户环境下操作,不合乎权限最小化准则
  3. 在多用户零碎中,如果多个用户同时 su 到 root 执行操作,日志中无奈辨别是哪个用户的操作,工作无奈审计和回溯
  4. 权限管制的粒度太粗,用户只能 All or nothing,无奈做到精细化管制,无奈实现多个管理员分工、协同工作

sudo 命令

sudo也是用于把命令切换到其余用户上下文去执行,个别是切换到 root 特权用户。和 su 命令的简略粗犷不同,sudo 提供了精细化的权限管制,同时每种技术都是一把双刃剑,简单的技术也会带来许多潜在的平安问题,须要在应用时小心配置。sudo 命令次要有如下特点:

  1. 通过配置文件进行集中、细粒度(用户级 命令级 主机级)的受权管制
  2. 切换用户时输出的是以后用户口令,不会泄露指标用户口令
  3. sudo 提供会话性能,在 sudo 会话有效期内,用户再次执行 sudo 命令免明码;过期后则须要从新输出口令
  4. 每条 sudo 命令执行后,执行环境间接退回到以后用户,只有应用 sudo 前缀的命令会在特权用户下执行,合乎权限最小化准则
  5. sudo 提供了具体的日志性能,能够记录每个用户应用 sudo 执行了哪些操作,

sudo 命令

待补充。

sudo 的配置

不是任何用户都能够应用 sudo 命令来执行任何命令,任何用户想要应用 sudo 命令,都必须在 sudo 配置文件(或其 include 的文件)中进行配置。

sudo 的主配置文件是 /etc/sudoers,此文件次要配置了 哪些用户 能在 哪些主机 上以 何种身份 执行 哪些命令 ,此文件能够用 vi 间接编辑,然而官网倡议应用 visudo 编辑此文件,visudo 会锁定用户,避免多用户同时编辑,会在文件保留时对执行语法查看,有语法错误的文件无奈保留并提醒谬误。
sudoers 配置文件分为多个段,每段负责不同的配置,咱们此处次要阐明如何应用用户特权配置段配置用户权限,其余配置可参考此阐明 /etc/sudoers 配置详解。
用户权限的最根本格局如下:

user host=(run_as) [NOPASSWD:] cmd_list

各字段的意义阐明如:

  • user:要配置 sudo 权限的用户(哪些用户
  • host:此配置在哪个主机中失效(哪些主机
  • run_as:此用户能够切换到哪些用户执行命令,多个用户通过逗号分隔(何种身份
  • cmd_list:用户可执行命令的列表,多个命令通过逗号分隔(执行 哪些命令
  • NOPASSWD:可选参数,sudo 时免输出口令

user 字段,能够设置通配符,% 示意用户组,! 示意取反,如 %group1,示意所有 group1 组的用户,!user1 示意除 user1 外的其余所有用户。

如果对某个参数没有限度,则写ALL

零碎的缺省配置为:

root ALL=(ALL) ALL

意思是:root 用户能够在所有主机上,以任何用户执行任何命令

以下命令示意运行 apache 用于在免口令的状况下,应用 sudo 执行 tomcat 的启动和进行脚步,禁止通过 sudo 执行其余命令。

apache ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh

sudo 平安

因为 sudo 命令个别用于系统管理操作,命令的执行权限很高,使用不当的状况下,会产生 提权 破绽,在应用时,要遵循肯定的平安规定。

  1. 所有 sudo 执行的脚本,此脚本及此脚本援用的其余脚本和配置文件,设置为只有执行此脚本的最高权限用户有写权限,避免文件被其余低权限用户篡改后,sudo 执行导致提权。例如:一个脚本 sudo 时,以 root 用户执行,则所有相干脚本和配置文件只有 root 有批改权限。
  2. sudo 应用的脚本排除时,除了 /etc/sudoers 文件,还要排查通过 includeinclude_dir援用的其余所有文件。
  3. 配置 sudo 可执行的命令时,所有命令要配置为绝对路径,以防用户通过批改环境变量导致执行其余同名命令的破绽。
  4. 给用户调配 sudo 权限时,尽量少应用 ALL 参数,而是应用具体的配置值。
  5. sudo 到 root 时,非必要状况禁止应用 NOPASSWD 参数。

正文完
 0