/usr/bin/passwd和CAP_CHOWN功能

3
我正在尝试使用Linux Capabilities功能,我注意到passwd程序需要具有CAP_CHOWN能力(以及其他一些能力),才能在不作为Set-UID root的情况下正常工作。逻辑上,为什么它需要具备CAP_CHOWN能力呢?
顺便提一下,如果我删除该能力,passwd会给出“token manipulation error”错误。
编辑:我正在使用Ubuntu 11.04,没有SELinux。我正在尝试使passwd在不作为Set-UID root的情况下正常工作。
2个回答

2
cap_chown仅用于更改与userID相关联的/etc/shadow文件,不需要用于passwd本身。/etc/shadow文件设置为只有root用户可以访问。当/etc/passwd完成认证模块并准备写入新密码时,它会创建一个令牌。该令牌由Linux-PAM服务访问,将其chown为root并写入/etc/shadow。

编辑:

passwd使用文件/etc/.pwd.lock、/etc/shadow和/etc/nshadow。因为passwd从/etc目录读取和写入,所以需要w权限。请注意,passwd从未写入/etc/shadow。实际上,passwd写入/etc/nshadow并将其重命名为/etc/shadow。
open('/etc/nshadow',O_WRONLY|O_CREAT)=fd1
open('/etc/shadow', O_RDONLY)=fd2
fchown(fd1, uid=root, gid=shadow)
chmod /etc/shadow to : rw by owner and r by group
read(fd2)
write(fd1)
rename("/etc/nshadow", "/etc/shadow")

此外,我使用这个C程序确认了/etc/nshadow的存在。供您参考。
#include<stdio.h>
#include<unistd.h>
int main()
{
while(1)
if (access("/etc/nshadow",F_OK)!=-1){
    printf("Exists\n");
    break;
    }
return 0;
}

你能澄清一下你所写的一些东西吗?我不明白_/etc/shadow 仅对 root 用户可用_之后你写了什么。 - Apoorva Iyer

0

setuid原本就是所需要的。

SELinux(安全增强)的添加要求程序上下文正确,并进行文件权限检查。

如果系统的SE功能被禁用,passwd将可以正常工作而无需任何CAP_...。我在某处读到,可以通过向/selinux/disable写入"1"来禁用SE。据推测,写入"0"会重新启用它。

参见NSA的描述Fedora的描述


我正在使用Ubuntu 11.04。它没有SELinux。此外,这里的目标是我想要删除setuid位,并仅将功能应用于passwd。(减少过度特权二进制问题) - Apoorva Iyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接