Linux中文件有细致的权限控制,许多操作只有文件的拥有者或root才能执行,所以在日常使用过程中,需要进行用户切换。Linux设计之初,提供了 su 命令用于用户的切换,但由于 su 命令粗粒度的控制方式,不符合权限最小化原则,后来(其实很早,在1980年代)又设计了sudo命令提供精细化的权限控制。su和sudo虽然可以切换到任何用户,但是主要还是用于切换到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命令的缺点用户切换时,要输入目标用户口令,切换到root用户时需要输入root的口令,导致用户口令泄露

切换到root后,不会自动退出,用户会一直在root用户环境下操作,不符合权限最小化原则

在多用户系统中,如果多个用户同时 su 到root执行操作,日志中无法区分是哪个用户的操作,工作无法审计和回溯

权限控制的粒度太粗,用户只能 All or nothing,无法做到精细化控制,无法实现多个管理员分工、协同工作

sudo命令

sudo是superuserdo的简称,用于把命令切换到其他用户上下文去执行,一般是切换到root特权用户。和 su 命令的简单粗暴不同,sudo 提供了精细化的权限控制,同时,每种技术都是一把双刃剑,复杂的技术也会带来更多潜在的安全问题,需要在使用时小心配置。sudo命令主要有如下特点:通过配置文件进行集中、细粒度(用户级、命令级、主机级)的授权控制

切换用户时输入的是当前用户口令,不会泄露目标用户口令

sudo提供会话功能,在sudo会话有效期内,用户再次执行sudo命令免密码;过期后则需要重新输入口令

每条sudo命令执行后,执行环境直接退回到当前用户,只有使用sudo前缀的命令会在特权用户下执行,符合权限最小化原则

sudo提供了详细的日志功能,可以记录每个用户使用sudo执行了哪些操作,

sudo命令sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command

详细命令使用说明请参考命令帮助,常见参数介绍如下:-V 显示版本信息

-h 显示版本信息及指令的使用方法

-l 显示出当前用户sudo权限命令列表

-v 延长密码有效期限5分钟

-k 清除sudo会话,下次sudo需要输入口令

-b 把命令放在后台执行

-p prompt 修改输入口令提示语

-u username/#uid 指定sudo运行的用户,不指定则默认为root

-s 指定使用的shell

-H 将HOME环境变量设为sudo用户的HOME环境变量

command 要执行的命令

sudo的配置

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

sudo的主配置文件是/etc/sudoers,此文件主要配置了哪些用户能在哪些主机上以何种身份执行哪些命令,此文件可以用vi直接编辑,但是官方建议使用visudo编辑此文件,visudo会锁定用户,防止多用户同时编辑,会在文件保存时对执行语法检查,有语法错误的文件无法保存并提示错误。

sudoers配置文件分为多个段,每段负责不同的配置,我们此处主要说明如何使用用户特权配置段配置用户权限,其他配置可参考此说明 /etc/sudoers配置详解。

用户权限的最基本格式如下:user host=(run_as) [TAG:] cmd_list

各字段的意义说明如:user:要配置sudo权限的用户(哪些用户)

host:此配置在哪个主机中生效(哪些主机)

run_as:此用户可以切换到哪些用户执行命令,多个用户通过逗号分隔(何种身份)

cmd_list:用户可执行命令的列表,多个命令通过逗号分隔(执行哪些命令)

TAG:可选参数,如设置为NOPASSWD,则sudo时免输入口令user字段,可以设置通配符,%表示用户组,!表示取反,如%group1,表示所有group1组的用户,!user1表示除user1外的其他所有用户。

run_as字段,也可以以!开头,表示不允许以此用户身份运行,如!root说明此sudo不能以root身份运行。

如果对某个参数没有限制,则写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命令一般用于系统管理操作,命令的执行权限很高,使用不当的情况下,会产生提权漏洞,在使用时,要遵循一定的安全规则。所有sudo执行的脚本,此脚本及此脚本引用的其他脚本和配置文件,设置为只有执行此脚本的最高权限用户有写权限,防止文件被其他低权限用户篡改后,sudo执行导致提权。例如:一个脚本sudo时,以root用户执行,则所有相关脚本和配置文件只有root有修改权限。

sudo使用的脚本排除时,除了/etc/sudoers文件,还要排查通过include和include_dir引用的其他所有文件。

配置sudo可执行的命令时,所有命令要配置为绝对路径,以防用户通过修改环境变量导致执行其他同名命令的漏洞。

给用户分配sudo权限时,尽量少使用ALL参数,而是使用具体的配置值。

给用户分配命令权限时,只赋予需要执行命令的最小集,对敏感高危命令限定参数。

sudo到root时,非必要情况禁止使用NOPASSWD参数。

linux权限管理的设计,Linux权限管理漫谈之用户切换相关推荐

  1. linux文件系统研究与设计,Linux下实时文件系统的设计

    刘炜东,张玉生,康卫,胡爱兰 (华北计算机系统工程研究所,北京 100083) 摘要:Linux下常见的十余种文件系统的实时性都不理想.针对归档存储数据的特点,提出一种实时文件系统设计方案,并且设计了 ...

  2. linux简单命令解释器设计,Linux环境下模拟实现命令解释器

    在Linux环境下模拟实现命令解释器 一.程序概述 1.进入系统概述 本次课程设计是在红帽Linux发行版(Red Hat Enterprise Linux AS release 4 (Nahant ...

  3. linux应用程序课程设计,linux操作系统与应用课程设计 .pdf

    XXXXXXXX 学校 Linux 操作系统与应用课程设计 题 目 基于RHEL6.4 的ftp 服务器搭建 院 (部) 信息工程学院 班 级 姓 名 XXX 学 号 XXXXXXXXX 指导教师 2 ...

  4. linux 触摸屏驱动课程设计,linux驱动编写(触摸屏驱动)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 早在诺基亚手机还比较流行的时候,那时候触摸屏用的还不多.但是随着触摸屏手机.即智能手机的流行,触 ...

  5. 基于linux的软plc设计,Linux环境下软PLC开发系统的设计与实现

    文章主要介绍了在Linux操作系统环境下,软PLC梯形图的编辑技术.采用基于面向对象的方法,在分析了梯形图组成元素的基础上,阐述了设计过程中使用的类层次结构,并根据梯形图动态存储的特点,描述了存储梯形 ...

  6. java内存管理课程设计_Java内存管理分析

    Java内存主要分为stack, heap, data segment, and code segment. stack(栈):存放非静态基本数据类型变量的名称和值,以及非静态对象的引用 若是非静态基 ...

  7. python通用权限管理框架图_通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

  8. java开发企业级权限管理系统_Java开发企业级权限管理系统 视频教程

    第1章 课程整体概述与权限管理系统介绍 1-1 为什么企业级项目需要权限管理 1-2 权限管理的核心是什么? 1-3 理想中的权限管理应该是什么样的? 1-4 主流开源权限管理框架有哪些? 1-5 1 ...

  9. ggg的区别+linux、GNU、GNU/linux

    文章目录 linux.GNU.GNU/linux 什么是Linux 什么是GNU GNU/Linux是什么玩意儿 参考链接 三大区别 有一篇 gcc和g++的主要区别 chao网址 STL 链接 li ...

  10. Linux(5)账号和权限管理

    本章结构 1.管理用户账号和组账号 2.管理目录和文件的属性 1.管理用户账号和组账号 用户账号和组账号概述 Linux基于用户身份对资源访问进行控制 用户帐号 超级用户.普通用户.程序用户 组帐号 ...

最新文章

  1. c# reverse_清单 .Reverse()方法,以C#为例
  2. 端到端加密优缺点_基于Filecoin的去中心化文件保存和加密分享平台
  3. js常用内建对象之:Math
  4. Spring Boot的Properties和YAML配置文件详解:
  5. JavaScript和JQuery获取DIV的值
  6. t470键盘拆解_thinkpad t470怎么样?thinkpad t470拆机图解全面评测
  7. 微型计算机硬件系统基本组成是什么,计算机硬件系统基本组成有什么?
  8. Java 8 effectively final
  9. 米聊之死 雷军的“猪”折了腿?
  10. darknetYolov3图片的分类计数、置信度以及输出xmin,xmax,ymin,ymax的结果
  11. 微商潮牌怎么引流?成功的人不是赢在起跑点
  12. 喜讯|大脑营行苏引华荣获巨量引擎2023全民悦读会“悦读星推官”
  13. springboot仓储系统出入库模块设计系统java ssm
  14. P1039 侦探推理
  15. 写给英语和数学都不怎么好的游戏开发爱好者
  16. 大学宿舍恶性负载识别智能限电系统
  17. Qt制作一个简单的电子时钟
  18. cakephp视图用php文件,cakephp使用笔记
  19. A40I工控主板(SBC-X40I)T卡接口,EMMC读写测试
  20. HTTP 参数类型简介

热门文章

  1. 科研必备之图像局部区域放大——画中画形式
  2. Low rank 论文
  3. Unity 自定义Package
  4. 俄黑客入侵100多万部安卓手机 盗取500多万卢布
  5. Windows常见的几种权限维持
  6. git合并某个分支的某次提交(cherry-pick)
  7. 如何配置 SSH 免密码登录
  8. 解决大疆无人机飞了一段距离就停下来的问题(大疆限飞50米)
  9. NNDL 实验五 前馈神经网络(3)鸢尾花分类
  10. 计算机硬件知识的意义,认识计算机硬件教案