gpt4 book ai didi

unix - setuid的用法?

转载 作者:行者123 更新时间:2023-12-02 00:26:29 24 4
gpt4 key购买 nike

我最近阅读了一张Powerpoint幻灯片,但对使用setuid的概念不清楚。
这是幻灯片的内容。

Setuid示例-打印文件


  • 目标

  • 每个用户都可以将文件排队
  • 用户无法删除其他用户的文件
  • 解决方案

  • 用户打印机
  • 拥有的队列目录
  • Setuid队列文件程序

  • 作为用户打印机
  • 创建队列文件
  • 以用户joe
  • 的身份复制joe的数据
  • 另外,setuid删除文件程序

  • 只允许删除您排队的文件
  • 用户打印机介导的用户joe的队列访问。


  • 这是我的问题。
    我不清楚如何通过``setuid''解决此问题。
  • 首先,如果文件是由用户打印机创建的,则用户如何将数据复制到打印机拥有的文件中。它对此文件有一定的权利吗?
  • 其次,如何识别您与排队的文件之间的关系。
  • 文件的状态是否显示某些内容,但文件归打印机所有,只能由root更改。它与文件的gid有关吗?如果是这样,其他用户的gid也可能与此文件有关。
  • 文件的上下文是否显示有关谁排队的内容?

  • 我的问题一团糟,我真的对解决方案没有一个清晰的概念。

    最佳答案

    假设文件将存储在/var/spool/pq目录中;目录printer:printgrp:2700的权限(所有者printer,组printgrp,模式2700-只能为所有者进行读取,写入和执行,并且该目录上设置的SGID位意味着在其中创建的所有文件都将属于组printgrp)。

    此外,我们假设打印队列程序pq具有printer:printgrp:4511权限(setuid printer,任何人都可以执行它,但只有printerroot可以查看它)。

    现在,假设Joe运行pq /home/joe/file,并且文件的权限为joe:staff:600(只有Joe可以读取或写入文件)。 Joe的umask设置为022(尽管此文件比umask隐含的限制权限更多)。

    程序运行时,进程的实际UID是joe,但有效的UID是printer。由于此处不需要setgid操作,因此实际GID和有效GID均为staff。 Joe的辅助组列表不包括printgrp

    请注意,控制其对文件的访问的是进程的有效UID和GID。 Joe自己看不到打印机队列中有哪些作业。显示的目录权限甚至不允许他列出文件或访问目录中的文件。请注意,相反的情况适用; printer用户(或以该用户身份运行的pq程序)本身无法访问Joe的文件。
    pq程序可以在打印机队列目录中创建文件。它可能会为此请求创建两个文件。一个将是控制文件,另一个将是要打印的文件的副本。它将通过某种机制(例如12345)确定作业编号,并可能创建并打开两个文件进行写入(具有限制性权限-0600甚至0400):

  • /var/spool/pq/c.12345-控制文件
  • /var/spool/pq/d.12345.1-第一个(唯一)数据文件

  • 然后,应将其有效UID重置为实际UID,以便它以Joe身份运行。然后,它可以打开Joe要求打印的文件,并将其复制到数据文件中。它还可以写任何它认为与控制文件有关的信息(日期,时间,提交请求的人,要打印的文件数,特殊的打印选项等)。当关闭这些文件时,Joe不再能够访问它们。但是该程序能够将Joe的文件复制到其打印队列中。

    因此,这解决了问题1(权限)和问题2(控制信息),以及问题4(又是控制信息)。

    关于问题3, root在类似Unix的系统上始终是通配符,因为它可以做他想做的任何事情。但是,如其余答案所建议,控制文件包含有关打印请求的信息,包括(特别是)谁提交的信息。您可以使用setgid程序代替setuid程序。这些以类似的方式工作。但是,在我假设的系统下,基本没有出现组权限。 pq程序设置对控制文件和数据文件的权限,以使该组无法读取它,并且目录权限也拒绝组访问。

    我们可以假设另外两个程序:
  • pqs-打印机队列状态
  • pqr-打印机队列删除

  • 这些程序也将是setuid printerpqs程序可以读取目录中的控制文件,并从中列出相关信息。 pqr程序可以读取控制文件,以确保Joe提交作业12345时请求删除作业12345。如果程序满足,则可以删除文件。

    与这些用户调用程序分开的是,还有一个守护程序(在该系统中通常称为 pqd),如果尚未运行,它将被 pq激活。它将负责读取目录中的控制文件,并使用该信息将数据文件实际打印到相关打印机。守护程序要处理的问题是如何处理不同的打印机和不同的数据格式。该守护程序也将以 printer特权运行,并且 printer将被授予对打印机设备的访问权限(对于本地连接的打印机),或者被配置为通过网络与IPP(Internet打印机协议(protocol))之类的协议(protocol)进行通信。 Joe可能将无法直接使用打印机设备。

    请注意,setuid程序具有Joe所没有的功能。必须仔细地编写它们,以确保Joe不会滥用这些额外的权力。任何setuid程序都有些危险。 setuid root程序可能致命。通常,setgid程序的危险性较小。但是,对于这两种类型的程序,在编写此类程序时都需要格外小心。

    关于unix - setuid的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754164/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com