sudo

简介:

起因:

    linux中root拥有最高权限,有时候我们希望把部分权限授予给某个用户,这个时候我们可以设置类似于passwd命令,设置suid,然后结合组权限进行管理,但是这种方法没有办法控制一些后面跟参数的命令,比如我们希望用户都可以执行ifup eth0但是无法执行ifup eth1,而且这种方法也不安全,比如当我们临时有事离开而忘了关电脑,此时又登录某个用户,这个时候如果有人利用这个用户执行一些危险操作,我们无法防范也无从追责,这个时候sudo就派上用场了。

su(switch user ):切换用户身份

suid:当使用设置了suid权限的命令的时候,进程属主为命令本身属主,而不是当前启用命令用户身份

sudo(switch user do COMMAND):某个用户能够以某个用户的身份在某主机执行某条命令

    这里的某主机指的是通过某主机连接到本地服务器执行命令,而不是在那台主机上执行命令,跟ssh 不一样,当执行sudo命令的时候需要输入自身命令,sudo以此鉴定用户身份,并写入日志作为日后追责的依据。


sudo的配置文件:/etc/sudoers  可以利用visudo进行编辑,这个命令可以鉴别sudoers的语法格式错误,类似crontab -e,帮助文档:man 5 sudoers


一个sudo条目:

who which_host=(runas)  [TAG:]command


TAG可有可无,比较常见的有:NOPASSWD,表示不需要密码登录,其他比较少用不深究


who的可选格式如下:

    User ::= ’!’* user name |

              ’!’* #uid |

              ’!’* %group |

              ’!’* %#gid |

              ’!’* +netgroup |

              ’!’* %:nonunix_group |

              ’!’* %:#nonunix_gid |

              ’!’* User_Alias

!表示取反,用户可以直接接用户名,也可以#跟uid,或者%跟组名, ::=和* |只是帮助文档的格式,没有特殊意义


which_host:

Host ::= ’!’* host name |

              ’!’* ip_addr |

              ’!’* network(/netmask)? |

              ’!’* +netgroup |

              ’!’* Host_Alias

  

runas: 

Runas_Member ::= ’!’* user name |

                      ’!’* #uid |

                      ’!’* %group |

                      ’!’* %#gid |

                      ’!’* %:nonunix_group |

                      ’!’* %:#nonunix_gid |

                      ’!’* +netgroup |

                      ’!’* Runas_Alia


command:

Cmnd ::= ’!’* command name |

              ’!’* directory |

              ’!’* "sudoedit" |

              ’!’* Cmnd_Alias


每个部分都可以做成别名,别名必须全部而且只能使用大写英文字母的组合,别名必须事先定义,而且别名也可以引用别人事先定义好的别名。

别名引用:直接输入别名即可


别名格式:  关键字 别名  =  用户 (多个用户之间用,隔开,定义多个别名用:\换行分开)例如:

User_Alias      FULLTIMERS = millert, mikef, dowdy

Runas_Alias     OP = root, operator

Host_Alias      SPARC = bigtime, eclipse, moet, anchor :\

                     SGI = grolsch, dandelion, black :\

                     ALPHA = widget, thalamus, foobar :\

                     HPPA = boa, nag, python

Cmnd_Alias      SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,\(写不下的时候用\续行)

                              /usr/local/bin/tcsh, /usr/bin/rsh,\

                              /usr/local/bin/zsh

  

sudo命令:

-l:列出当前用户可以使用的所有sudo类命令

-k:让认证信息失效(sudo的时候,输入密码默认有5分钟的过期时间,在这个时间内,不再需要输入密码)


一个例子:给用户tom 授予useradd权限

答: visudo 添加 tom  ALL=(ALL)  /usr/sbin/useradd(这里命令要写完整路径,否则报错)

特殊例子:给用户tom授予passwd权限

答:visudo添加 tom  ALL=(root) /usr/bin/passwd

看起来没有问题,但是这里有个严重漏洞,当tom执行passwd并且后面不接用户名的时候,因为sudo是以用户root身份执行的,所以会修改root的密码,这个时候我们可以改写成visudo添加 

tom             ALL=(root)      /usr/bin/passwd [a-zA-Z]* ! /usr/bin/passwd root

注:这里的 [a-zA-Z]*是文件名匹配规则,因为你不加! /usr/bin/passwd root是无法单独执行passwd的,正则表达式则可以。

















本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1858696 ,如需转载请自行联系原作者



相关文章
|
10天前
|
数据采集 人工智能 安全
|
6天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
320 164
|
5天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
324 155
|
6天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
383 4
|
13天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
918 7