/ usr / bin / passwd和CAP_CHOWN功能

问题描述 投票:3回答:2

我正在试验Linux功能,我注意到,为了使passwd程序在没有Set-UID root的情况下工作,它需要具有CAP_CHOWN功能(除了其他一些功能)。从逻辑上讲,为什么需要CAP_CHOWN呢?

顺便说一句,如果删除该功能,passwd会给我一个“令牌操作错误”。

编辑:我正在使用没有SELinux的Ubuntu 11.04。我试图让passwd工作而不是Set-UID root。

linux ubuntu passwd linux-capabilities
2个回答
2
投票

cap_chown本身不需要passwd。只需要更改与userID关联的/ etc / shadow文件。 / etc / shadow文件已设置为只有任何人都无法读取。

/ etc / shadow只能由root访问。因此,当/ etc / passwd完成它的身份验证模块并准备编写新的(编码)密码时,它将创建一个令牌。哪个是由Linux-PAM服务访问的,它将把它chown到root并将其写入/ etc / shadow。

Edit:

passwd使用文件/etc/.pwd.lock,/ etc / shadow,/ etc / nshadow。由于passwd从/ etc目录读取和写入,因此需要w权限。请注意,/ etc / shadow永远不会被passwd写入。 passwd实际写入/ etc / nshadow并将/ 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;
}

0
投票

setuid是最初需要的。

添加SELinux(安全性增强)需要程序上下文正确以及文件权限检查。

如果系统的SE功能被禁用,passwd将正常工作,没有任何CAP_...。在某处,我读到可以通过向/selinux/disable写一个“1”来禁用SE。大概写“0”可以重新启用它。

NSA's descriptionFedora's

© www.soinside.com 2019 - 2024. All rights reserved.