小编yao*_*bin的帖子

在我的 Docker 容器中,为什么我在没有 NET_BIND_SERVICE 功能的情况下仍然可以绑定端口 1?

我在用着Ubuntu 18.04 Desktop。以下是有关我的问题的更多详细信息。

最近,我正在编写一些想要执行此操作的测试代码:当它作为非特权用户运行时,测试代码尝试绑定特权端口(在我的例子中为端口 1)并期望绑定失败。

在我的主机上,我当前的非特权用户有以下capsh --print输出:

Current: =
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=1000(ywen)
gid=1000(ywen)
groups=4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),999(docker),1000(ywen)
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试使用当前非特权用户绑定端口 1 时,我可以得到预期的权限拒绝错误:

Current: =
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=1000(ywen)
gid=1000(ywen)
groups=4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),999(docker),1000(ywen)
Run Code Online (Sandbox Code Playgroud)

因为我的测试代码最终将在 Docker 容器内运行,所以我使用以下命令构建了一个映像Dockerfile

ARG UBUNTU_VERSION=18.04
FROM ubuntu:${UBUNTU_VERSION}
ARG USER_NAME=ywen
ARG USER_ID=1000
ARG GROUP_ID=1000

RUN apt-get update

# Install the needed packages.
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install …
Run Code Online (Sandbox Code Playgroud)

python sockets port docker linux-capabilities

6
推荐指数
1
解决办法
4805
查看次数

是否有可用的跨平台C信号库(更好的开源)?

我最近正在开发一个项目,我需要将部分Linux C代码移植到Windows.代码使用Linux信号机制(我的意思是"sigaction","sigprocmast"等等),这在Windows上得不到很好的支持.

是否有可用的C/C++库实现跨平台信号机制(更好的开源)? 目前我只需要该库来支持Linux和Windows.

我认为这个问题也对你有意义,因为有一天你可能会得到类似的任务.

我的一位同事告诉我,ACE是一个功能强大的库,可以完美地实现跨平台信号机制,但他说这是一个庞大的库,并且真的需要一些时间来研究它.我的项目没有给我太多时间,所以我正在努力寻找一个轻量级易于学习的信号库.(嗯......好吧,如果你知道的图书馆都很大,请告诉我.:-)

我已经在Google上做了很多关于这个主题的研究,但我找不到我想要的东西.这是我到目前为止所做的:

  1. 在Stackoverflow.com中搜索.人们询问了很多关于如何在Linux中使用信号的细节,但似乎没有人问过跨平台信号的实现.

  2. 或者,在Stackoverflow.com中,人们问了一种叫做"信号槽"的机制.我认为这不是我需要的.

  3. 在整个谷歌搜索.我尝试了关键词"C信号"跨平台"或跨平台-game -python -gui -audio -digital -analysis -slot -image -processing -socket -time -directmedia"但找不到我想要的东西.

请帮忙!谢谢!

c linux windows signals cross-platform

5
推荐指数
1
解决办法
2598
查看次数

为什么我的程序在Windows和Linux上产生不同的结果,关于ifstream的文件读取?

我有一个程序如下所示.为此,我有几个问题:

1).为什么它会在不同的平台上产生不同的结果? 我稍后会粘贴屏幕截图.

2).我正在使用fail()方法来检查"file.read()"是否失败.它是否正确? 我使用fail()方法,因为这个网页说:

如果设置了failbit或badbit,则该函数返回true.当在输入操作期间发生除了到达文件结尾之外的某些错误时,设置这些标志中的至少一个.

但后来我在这里阅读了关于istream :: read()的这个页面.它说eofbit和failbit总是在同一时间设置.这是否意味着正常的EOF情况也会导致fail()返回true?这似乎与"除了达到文件结束之外"发生冲突.

任何人都可以帮我澄清我应该如何使用这些方法?我应该使用bad()吗?

我的节目

#include <iostream>
#include <fstream>
using namespace std;

#ifdef WIN32
char * path="C:\\Workspace\\test_file.txt";
#else
char * path="/home/robin/Desktop/temp/test_file.txt";
#endif

int main(int argc, char * argv[])
{
    ifstream file;

    file.open(path);
    if (file.fail())
    {
        cout << "File open failed!" << endl;
        return -1;  // If the file open fails, quit!
    }

    // Calculate the total length of the file so I can allocate a …
Run Code Online (Sandbox Code Playgroud)

c++ ifstream

5
推荐指数
1
解决办法
3114
查看次数

GDB不会在动态加载的.so文件中中断吗?

在我的Linux系统中,我正在编写一个程序,该程序在运行时会动态加载一些.so库。就像这样:可执行程序在开始运行时将在特定目录下搜索,然后将所有.so文件加载到该目录中。请注意,可执行文件和.so是独立构建的,并且可执行文件的构建不会链接到.so文件。

我的问题是:运行带有GDB的程序(因此,所有.so库都已加载)后,我似乎能够在.so文件中的代码上设置断点(GDB提示我该断点是在共享库中设置),但此断点实际上不会中断。

我应该如何使这些断点真正起作用? 在调试会话期间,我在正确的位置提供了所有源代码,并且-g选项已启用。编译时,我还删除了-O2优化。

linux gdb shared-libraries

4
推荐指数
1
解决办法
4287
查看次数

是否可以将 GPG 密钥过期时间设置为短于一天(例如一小时)?

在我的项目中,我们想要测试 GPG 密钥过期时我们的产品的行为。所以我们希望密钥在很短的时间内过期,以便频繁地重复测试。

实际上,生成密钥时的提示信息明确表明过期的最小单位是“天”:

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Run Code Online (Sandbox Code Playgroud)

但我仍然想问一个问题,以防万一有什么东西可以满足我的需求:是否可以将 GPG 密钥过期时间设置为短于一天(例如,一小时,甚至几分钟)?

如果没有这样的方法,我需要弄清楚如何重复我们的测试,而不必等待一整天。

gnupg

4
推荐指数
1
解决办法
929
查看次数

testRegex 掩码选择错误的文件来运行测试

2018年7月13日更新:

经过一番折腾后,我明白了为什么testRegex不起作用。请参阅下面发布的我自己的答案。


原问题:

我正在为我的 React.js 项目编写测试代码。我正在使用react-scriptsand enzyme(我相信这jest也意味着)来运行和管理测试。这是package.json文件:

{
  "name": "front",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "~15.5.4",
    "react-dom": "~15.5.4",
    "react-scripts": "0.9.5",
    "redux": "~3.6.0",
    "react-redux": "~5.0.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "devDependencies": {
    "enzyme": "^3.3.0",
    "enzyme-adapter-react-15": "^1.0.6",
    "react-test-renderer": "~15.5.4"
  },
  "jest": {
    "testRegex": "(/abc/.*|(\\.|/)(defg|spec))\\.jsx?$"
  }
}
Run Code Online (Sandbox Code Playgroud)

之后npm install,我检查了版本:

  • 反应脚本@0.9.5
  • 酶@3.3.0
  • 笑话@18.1.0

(是的,我知道我正在使用旧版本的 React.js,但这就是我现在无法更改的,因为它不是我的个人项目。)

我不明白的testRegexof …

configuration reactjs jestjs

3
推荐指数
1
解决办法
1万
查看次数