Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用PAM功能模块向特定用户和可执行文件授予功能?_C_Linux_Sockets_Pam_Linux Capabilities - Fatal编程技术网

C 如何使用PAM功能模块向特定用户和可执行文件授予功能?

C 如何使用PAM功能模块向特定用户和可执行文件授予功能?,c,linux,sockets,pam,linux-capabilities,C,Linux,Sockets,Pam,Linux Capabilities,我正试图使一个使用原始套接字的程序以非root的身份正确运行,并具有Linux功能。计划如下: #include <netinet/ip.h> int main() { int sd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP); if(sd < 0) { perror("socket() error"); return 1; } return 0; } 如果我添加cap\u net\u raw功能,作

我正试图使一个使用原始套接字的程序以非root的身份正确运行,并具有Linux功能。计划如下:

#include <netinet/ip.h>

int main()
{
  int sd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);
  if(sd < 0)
  {
    perror("socket() error");
    return 1;
  }
  return 0;
}
如果我添加
cap\u net\u raw
功能,作为一种有效且允许的功能,它会起作用

[user@localhost ~]$ sudo setcap cap_net_raw+ep socket
[sudo] password for user: 
[user@localhost ~]$ ./socket 
[user@localhost ~]$ 
现在,我想使用
pam\u cap.so
使其成为只有特定用户才能使用
cap\u net\u raw
运行此程序,而不是所有人。我的
/etc/security/capability.conf
是:

cap_net_raw user
我的
/etc/pam.d/login
是(注意,我也尝试了
/etc/pam.d/sshd
,但似乎也不起作用):

我有一个ssh会话,之后我注销并重新登录,并执行以下命令:

[user@localhost ~]$ sudo setcap cap_net_raw+p socket
[sudo] password for user: 
[user@localhost ~]$ getcap socket
socket = cap_net_raw+p
[user@localhost ~]$ ./socket 
socket() error: Operation not permitted
[user@localhost ~]$ 
我的问题是:为什么我不能用
cap\u net\u raw
执行“socket”程序?我认为当我登录时,我的用户将获得它作为允许的功能,并且它将允许“用户”使用
cap\u net\u raw
运行“socket”

这就是我正在运行的:

[user@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[user@localhost ~]$ cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core) 

我发现我在文件上有错误的功能。为了使流程能够从pam_cap模块获得有效的功能,文件还需要配置“继承”功能。因此,在文件上设置上限应为:

sudo setcap cap_net_raw+ip socket
但是,我仍然只能通过正常的tty登录而不是ssh登录来成功地运行程序

[user@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[user@localhost ~]$ cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core) 
sudo setcap cap_net_raw+ip socket