当前位置: 首页 > Linux

浅谈Linux权限管理:用户切换

时间:2023-04-07 01:16:43 Linux

Linux中的文件有详细的权限控制,很多操作只能由文件所有者或root执行,所以在日常使用中需要进行用户切换。Linux设计之初,提供了su命令用于用户切换,但由于su命令的粗粒度控制方式,不符合最小权限原则。后来(实际上很早,在1980年代),sudo命令被设计用来提供细粒度的权限控制。su和sudo虽然可以切换到任意用户,但主要用于切换到root用户进行系统管理操作。目前Ubuntu等发行版直接取消root用户,使用sudo来实现系统的管理功能。下面分别介绍这两组命令的用法和优缺点。su命令su命令是SwitchUser的缩写,作用是将命令执行环境切换到其他用户。从root切换到其他用户时不需要密码;在其他用户之间切换或从普通用户切换到root时,需要输入目标用户的密码。命令格式:su[-fmp][-ccommand][-sshell][--help][--version][-][USER[ARG]]参数说明:-f,--fast:不需要读取启动文件(如csh.cshrc等),仅用于csh或tcshshells-,-l,--login:使用登录shell,使用该参数,系统环境变量和home目录将被设置为目标用户,不指定目标用户,默认为root-m,-p,--preserve-environment:执行su-c时不更改环境变量--command=COMMAND:更改账户后,执行COMMAND命令,然后返回原用户-s,--shell=SHELL:启动指定的shell--help:显示帮助信息--version:显示版本信息USER:要切换的目标用户ARG:区别su和su-之间传递新shell的参数su:只切换用户,不切换用户的环境变量和家目录su-:切换目录,同时切换到目标用户的环境变量和家目录。切换到root时,建议加上-参数,否则有些命令不会执行。su命令的缺点切换用户时,需要输入目标用户的密码。切换到root用户时,需要输入root密码。符合权限最小化原则在多用户系统中,如果多个用户同时su到root执行操作,日志无法区分是哪个用户操作,工作无法审计和追溯。权限控制粒度太粗,用户只能Allornothing,无法实现精细控制,无法实现多个管理员的分工协作。sudo命令sudo是superuserdo的缩写,用于将命令切换到其他用户上下文执行,通常是切换到root权限用户。与简单粗暴的su命令不同,sudo提供了细粒度的权限控制。同时,每一项技术都是一把双刃剑,复杂的技术也会带来更多的安全隐患,使用时需要谨慎配置。sudo命令主要有以下特点:通过配置文件进行集中细粒度(用户级、命令级、主机级)的权限控制在sudo会话有效期内,用户再次执行sudo命令,无需授权密码;到期后,用户需要重新输入密码。每次执行sudo命令后,执行环境直接返回到当前用户。只有sudo前缀的命令才会在特权用户下执行,符合权限最小化原则sudo提供了详细的日志功能,可以记录每个用户使用sudo执行了哪些操作,sudo命令sudo[-VhlLvkKsHPSb]│[-pprompt][-cclass│-][-aauth_type][-uusername│#uid]command详细的命令使用说明请参考命令帮助。常用参数介绍如下:-V显示版本信息-h显示版本信息和命令使用-l显示当前用户sudo权限命令列表-vextend密码有效期5分钟-k清除sudo会话,需要进入下次运行时的密码sudo-b后台执行命令-pprompt修改输入的密码prompt-uusername/#uid指定运行sudo的用户,不指定默认为root-s指定shell-H要使用将HOME环境变量设置为sudo用户的HOME环境变量命令要执行的命令sudo的配置并不是说任何用户都可以使用sudo命令执行任何命令。所有这些都必须在sudo配置文件(或其包含文件)中进行配置。sudo的主要配置文件是/etc/sudoers。该文件主要配置哪些用户可以在哪些主机上以何种身份执行哪些命令。这个文件可以直接用vi编辑,但是官方推荐使用visudo来编辑这个文件。Visudo会锁定用户以防止多个用户同时编辑,并在保存文件时对文件进行语法检查。语法错误的文件无法保存,会提示错误。sudoers配置文件分为多个部分,每个部分负责不同的配置。这里我们主要讲解如何使用用户权限配置部分来配置用户权限。其他配置请参考本说明/etc/sudoers配置详情。用户权限最基本的格式如下:userhost=(run_as)[TAG:]cmd_list各字段含义如下:user:配置sudo权限的用户(哪些用户)host:本次配置的主机takeseffect(whichhosts)run_as:这个用户可以切换到哪些用户去执行命令,多个用户用逗号隔开(什么身份)cmd_list:用户可执行的命令列表,多个命令用逗号隔开(执行哪些命令)TAG:可选参数,如果设置为NOPASSWD,则sudo时不需要输入密码用户字段,可以设置通配符,%表示用户组,!表示否定,如%group1表示group1组中的所有用户,!user1表示除user1以外的所有其他用户。run_as字段也可以以!开头,表示不允许该用户运行。例如,!root表示此sudo不能以root身份运行。如果对参数没有限制,则写入ALL。系统默认配置为:rootALL=(ALL)ALL表示:root用户可以在所有主机上以任何用户身份执行任何命令启动和停止脚步,通过sudo禁用其他命令。apacheALL=(ALL)NOPASSWD:/usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.shsudosecurity因为sudo命令一般用于系统管理操作,执行权限该命令的权限很高,在使用不当的情况下会存在提权漏洞。使用它时,必须遵守某些安全规则。sudo执行的所有脚本,本脚本以及本脚本引用的其他脚本和配置文件,都设置为只有执行本脚本的最高权限的用户才有写权限,防止文件被其他低权限的人篡改用户,sudo执行会导致提权。例如:当一个脚本sudo以root用户执行时,只有root才有权修改所有相关的脚本和配置文件。当排除sudo使用的脚本时,除了/etc/sudoers文件外,还必须检查include和include_dir引用的所有其他文件。配置sudo可执行的命令时,所有命令都必须配置为绝对路径,防止用户通过修改环境变量执行其他同名命令。给用户分配sudo权限时,尽量少用ALL参数,但要使用特定的配置值。在为用户分配命令权限时,只给出需要执行的最小命令集,对敏感、高危命令的参数进行限制。sudoroot时,非必要禁止使用NOPASSWD参数。