linux -/usr/bin/passwd 和 CAP_CHOWN 功能

标签 linux ubuntu passwd linux-capabilities

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

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

编辑:我使用的是没有 SELinux 的 Ubuntu 11.04。我正在尝试让 passwd 在没有 Set-UID root 的情况下工作。

最佳答案

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

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

编辑:

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;
}

关于linux -/usr/bin/passwd 和 CAP_CHOWN 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844933/

相关文章:

r - 在 Xubuntu 16.04 中安装 R 和 RStudio

ubuntu - samba 检索具有任意属性的用户

python - Ubuntu 14.04 : command not found 中的 AWS Elastic Beanstalk (eb) 安装

php - 使用 shell_exec ('passwd' ) 更改用户密码

php - UTF-8贯穿始终

linux - 终结者加载自定义配置

linux - 无法登录自定义镜像创建的Linux虚拟机

linux - 无法配置数据记录系统

c++ - 保护/etc/passwd 和/etc/shadow 不被并发访问

centos - 更改密码时出现错误信息 Unknown user name 'root'