- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近阅读了一张Powerpoint幻灯片,但对使用setuid的概念不清楚。
这是幻灯片的内容。
Setuid示例-打印文件
最佳答案
假设文件将存储在/var/spool/pq
目录中;目录printer:printgrp:2700
的权限(所有者printer
,组printgrp
,模式2700-只能为所有者进行读取,写入和执行,并且该目录上设置的SGID位意味着在其中创建的所有文件都将属于组printgrp
)。
此外,我们假设打印队列程序pq
具有printer:printgrp:4511
权限(setuid printer
,任何人都可以执行它,但只有printer
或root
可以查看它)。
现在,假设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
-第一个(唯一)数据文件root
在类似Unix的系统上始终是通配符,因为它可以做他想做的任何事情。但是,如其余答案所建议,控制文件包含有关打印请求的信息,包括(特别是)谁提交的信息。您可以使用setgid程序代替setuid程序。这些以类似的方式工作。但是,在我假设的系统下,基本没有出现组权限。
pq
程序设置对控制文件和数据文件的权限,以使该组无法读取它,并且目录权限也拒绝组访问。
pqs
-打印机队列状态pqr
-打印机队列删除printer
。
pqs
程序可以读取目录中的控制文件,并从中列出相关信息。
pqr
程序可以读取控制文件,以确保Joe提交作业12345时请求删除作业12345。如果程序满足,则可以删除文件。
pqd
),如果尚未运行,它将被
pq
激活。它将负责读取目录中的控制文件,并使用该信息将数据文件实际打印到相关打印机。守护程序要处理的问题是如何处理不同的打印机和不同的数据格式。该守护程序也将以
printer
特权运行,并且
printer
将被授予对打印机设备的访问权限(对于本地连接的打印机),或者被配置为通过网络与IPP(Internet打印机协议(protocol))之类的协议(protocol)进行通信。 Joe可能将无法直接使用打印机设备。
root
程序可能致命。通常,setgid程序的危险性较小。但是,对于这两种类型的程序,在编写此类程序时都需要格外小心。
关于unix - setuid的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754164/
这其实是一个三段式的问题,下面我会解释,但是问题是: 如何使用 gdb 以 root 权限运行程序的一部分,而其余部分以正常方式运行? 为什么我使用 mkstemp 在/tmp 中创建文件时会得到“权
我不得不为某人做一个肮脏的 Linux hack,这样他们就可以在非根用户的情况下使用 cupsenable printername shell 命令启动打印机。我不希望他们能够以 root 身份使用
我编写的一个 Python 扩展需要 root 访问权限才能执行单个硬件初始化调用。我不想仅仅为了我的扩展中的这个调用而以 root 身份运行整个脚本,所以我想编写一个包装器来执行此初始化,然后再降低
我已经使用 root 运行了一个程序,在其中我为 uid 9999999 调用了 setuid 函数,然后它成功地设置了这个 uid,即使它不存在于/etc/passwd 中。那么 setuid 如何
我有一个要设置 uid 位的 shell 脚本。我将所有者设置为 root 并设置 uid 位。我在 shell 中添加了 'whoami' 以检查它是否正常工作但是当我执行脚本时,whoami 返回
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
如果我在循环中调用 setuid 以成为 root 并重置 uid,这只会工作一次。我有以下代码: #include #include #include int my_func(int i) {
我正在扩展一些在 GNU/Linux (Ubuntu 14.04) 下运行的软件(我不是作者),由一个 manager 进程和几个 worker 组成过程。管理器可以通过我可以在配置文件中指定的命令行
当我在我的程序中尝试 setuid 时,它创建了 2 个进程。一个是父进程,另一个是子进程。 int isRoot() { if (getuid() != 0) {
假设我们正在查看以下场景: 文件 saymyname.c(包括省略) int main(int argc, char** argv){ system("whoami"); } 构建并设置权
正在尝试设置 cap_setgid、cap_setuid、cap_setpcap。 #include #include int main() { cap_t caps; caps
我目前正在尝试了解文件权限中的特殊位的作用,但目前正试图了解 setuid 位的作用。从所有在线资源中,它说: Commonly noted as SUID, the special permissi
我有以下简单代码来检查我的 getuid 函数: uidActual=getuid(); printf ("User id is [%d]\n", ui
我被要求找到一个命令,该命令将仅列出从当前目录(及其下)开始的具有 setuid 位的文件。有人告诉我这是正确的方法: find /home/anyuser -type f \( -perm -400
伙计们。 这是我的问题: 我有一个可执行文件需要在系统的特定位置创建一个文件夹。 无论谁执行它,我都希望它能够这样做。 我的想法是将父文件夹(可执行文件需要在其中创建文件夹的文件夹)提供给用户,并将可
我正在尝试了解缓冲区溢出和 setuid。我使用这个来源: #include #include #include int main(void){ char prog[]="/bin/ls
我在 Linux 中工作,并尝试在 Linux 上使用 setuid 执行 C 程序。这是我的代码: #include #include #include #include int main(
需要一些关于传递 argv 的帮助,以便 shell 脚本可以作为/usr/local/bin/script.sh 用户域运行 #include #include #include #inclu
我一直在努力思考 setuid/setgid 是如何工作的……我想到了这个人为的例子: 用户: 用户A属于A组 用户B属于B组 文件 a.txt 由用户 A 拥有,权限为 rw-rw----- (66
changeIDs() is trying to use setuid() to change the effective user id but it always errors out and I
我是一名优秀的程序员,十分优秀!