AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[privileges](unix)

Martin Hope
rafagarci
Asked: 2022-05-22 00:08:53 +0800 CST

是否适合在 setresuid()/setreuid()/seteuid() 上使用 setuid()?

  • 1

我有一个从 C 源文件编译的可执行二进制文件

可执行文件具有 setuid 权限

我注意到,如果可执行文件的所有者是root,我可以使用

setuid(geteuid());

在编译文件以将运行可执行文件的进程的真实 UID设置为root时。然后,运行可执行文件的任何人都可以以root身份运行它。

但是,我注意到只有当可执行文件的所有者是root时才会发生这种情况。当我尝试授予test_user可执行文件的所有权(并修复权限以再次包含 setuid)时,它不起作用。在阅读了这些文档页面(1、2、3)并阅读了这篇文章后,我注意到这setuid(new_euid)是为了更改有效 UID而不是运行可执行文件的进程的真实 UID。只是碰巧,在特定情况下(有效的 UID是 root),setuid(new_euid)还设置了真实的 UID和保存的 UID运行可执行文件的进程到new_euid.

我通过使用setreuid代替解决了这个问题setuid,如下:

setreuid(geteuid(), geteuid());

这允许我将进程的真实 UID设置为有效 UID(可执行文件的所有者)并将有效 UID重置为其值(冗余)。

我知道这在某些条件下会起作用,但同样适用于使用,或更改真实 UID、保存的 UID或有效的 UIDsetuid()时更容易混淆,因为它们总是有效?setreuid()setresuid()seteuid()

此外:我知道这seteuid()似乎与此处setuid()解释的差异相同(有效的 UID是 root)。这应该不允许 root 特权程序在删除它们后重新获得特权(因为所有 3 个 UID 都将使用 更改为相同的值)?那么我是否应该只使用root 特权程序,即使它与例如相比不那么清楚?setuid()setuid()setresuid()

我认为这setuid()可能是安全的,因为它不允许 root 特权程序在删除后重新获得特权,但是可以使用其他提到的功能来实现这种行为,而不会造成太大的混乱。

另一件事getuid()返回进程的真实 UID,同时setuid()用于修改有效 UID(除非特权),这也令人困惑。

setuid privileges
  • 1 个回答
  • 146 Views
Martin Hope
Greg0ry
Asked: 2020-01-29 05:41:03 +0800 CST

以非root用户身份运行openvpn

  • 1

我正在尝试在 podman 非特权容器中运行 openvpn 服务器。

Openvpn 需要能够管理网络接口(即创建 tun 接口,为其分配 IP 地址,启动它)。在我的系统(arch linux)上,openvpn-server.service我注意到CapabilityBoundingSet这让我尝试并创建自己的服务,而不是运行 openvpn,而是运行podman run.

首先我创建了我的 openvpn 容器,下面是 Dockerfile(为方便起见,我使用 archlinux 作为基础):

FROM archlinux
RUN pacman -Sy --noconfirm openvpn

然后我构建这个容器(登录为my_unprivileged_user)

podman build \
--force-rm \
--no-cache \
--rm \
--device=/dev/net/tun \
-t openvpn .

然后我创建了my_custom_openvpn.service:

Description=OpenVPN in Podman container
After=syslog.target network-online.target
Wants=network-online.target

[Service]
User=my_unprivileged_user
Group=my_unprivileged_group
WorkingDirectory=/etc/openvpn
ExecStart=/usr/bin/podman run --rm --name openvpn -v ./server:/server --device /dev/net/tun --network "host" --cap-add CAP_IPC_LOCK,CAP_NET_ADMIN,CAP_NET_BIND_SERVICE,CAP_NET_RAW,CAP_SETGID,CAP_SETUID,CAP_SYS_CHROOT,CAP_DAC_OVERRIDE,CAP_AUDIT_WRITE localhost/openvpn:latest /usr/bin/openvpn --config /server/my_config.conf
ExecStop=/usr/bin/podman stop -t 0 openvpn
Capabilities=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
#ProtectSystem=true
#ProtectHome=true
RestartSec=5s
Restart=on-failure
TimeoutSec=5s

[Install]
WantedBy=multi-user.target

所以我认为 systemd 会将功能传递给 podman,而后者又会将它们进一步向下传递给 openvpn。

但是 openvpn 无法开始抱怨它无法创建 tun0 接口。即使我像这样自己创建 tun0,我openvpn --mktun --dev tun0也会收到另一个错误,即 openvpn 无法设置此 tun0 接口。

我想也许我需要setcap在容器内做,所以我podman exec进入它并在下面执行:

setcap CAP_IPC_LOCK,CAP_NET_ADMIN,CAP_NET_BIND_SERVICE,CAP_NET_RAW,CAP_SETGID,CAP_SETUID,CAP_SYS_CHROOT,CAP_DAC_OVERRIDE,CAP_AUDIT_WRITE=+ep /usr/bin/openvpn

但这并没有帮助。我不断收到此错误:

Tue Jan 28 13:34:31 2020 /usr/bin/ip link set dev tun0 up mtu 1500
RTNETLINK answers: Operation not permitted

也许尝试使用这样的功能没有意义?

openvpn privileges
  • 1 个回答
  • 1151 Views
Martin Hope
ctrl-alt-delor
Asked: 2019-04-17 11:25:53 +0800 CST

suid 的替代品,用于脚本和解释语言

  • 2

在 Unix(包括 Gnu/Linux)上,suid/sgid(或文件功能)是唯一的、本机的(所有其他方式都使用这种方式)提升权限的方式。

作为一名系统管理员,我喜欢编写脚本,因为它们很简单,并且非常适合任务。 但是 suid 和 sgid 对于脚本和其他解释型语言不适用。

因此,我想找到一些替代方案。(我不介意一般解决方案或特殊情况)。

privileges suid
  • 1 个回答
  • 448 Views
Martin Hope
evilolive
Asked: 2019-03-20 02:57:08 +0800 CST

在 Red Hat Azure VM 上管理用户的 root 权限

  • 0

我们已经在 Azure 上设置了一个 Red Hat VM,但我们不确定如何处理用户权限。我们希望使用 VM 在 Linux 环境中测试软件,而不是我们拥有的 Windows 工作站。

我们希望有两个用户组:

1) 管理员帐户

2) 用户帐户:他们需要能够通过 yum 安装软件包,但不应更改系统相关信息(意外),如 ssh-keys、其他用户的密码等。但是,从这个yum install in user home对于非管理员,我知道 sudo 权限是进行 yum 安装所必需的。

我们怎样才能做到这一点?

rhel privileges
  • 1 个回答
  • 232 Views
Martin Hope
Alex
Asked: 2018-12-25 09:38:55 +0800 CST

当前安装在系统上的进程是否有可能通过知道 root 的密码来提升其权限?

  • 2

让我们假设一个类 Unix 系统(如 macOs、linux、solaris 等)从互联网上安装了一个由恶意行为者开发的程序的场景。

该程序不使用系统上的任何零日漏洞来提升权限。它只是在常规非管理用户的上下文中运行,并具有所有限制。它会在后台记录所有按键,直到记录用户在终端“su”中键入密码,然后再输入密码。这个程序突然捕获了 root 用户的密码。

我的问题是,捕获此密码后,程序是否可以从 root 用户的上下文中重新启动,甚至在仍在运行时升级其权限,在当前用户没有注意到的情况下执行所有这些操作?确实存在哪些实用程序可以允许这样的程序做这样的事情?我说的是一个理想的场景,其中不使用内核中的任何错误或漏洞。我只是在谈论一个程序,它只是以已经打算使用的方式使用现有的系统实用程序。

password privileges
  • 2 个回答
  • 68 Views
Martin Hope
Haggra
Asked: 2018-08-01 22:48:40 +0800 CST

/etc/exports 中的空格

  • 2

我在网站 [1] 中阅读了以下内容:

/etc/exports 对空格非常敏感 - 因此以下语句不一样:

/export/dir hostname(rw,no_root_squash)  
/export/dir hostname (rw,no_root_squash)

第一个将授予主机名 rw 对 /export/dir 的访问权限,而不会压缩 root 权限。第二个将授予具有 root squash 的主机名 rw 权限,它将授予其他所有人读/写访问权限,而不会压缩 root 权限。不错吧?

它如何授予其他所有人读/写访问权限?该空格如何以这种方式影响特权?


[1] http://nfs.sourceforge.net/nfs-howto/ar01s07.html

nfs privileges
  • 1 个回答
  • 656 Views
Martin Hope
Stewart
Asked: 2018-07-14 02:37:22 +0800 CST

授予用户调度权限

  • 3

我有一些使用sched_setscheduler的代码sched.h

sched_param sched;
sched.sched_priority = 70;
sched_setscheduler(getpid(), SCHED_FIFO, &sched);

但是,除非我使用sudo. 我宁愿不以root特权运行应用程序。

我有没有办法在不授予完全 root 权限的情况下授予用户或进程对此功能的访问权限?

- 编辑 -

derobert对使用功能给出了很好的回答。在postinst中,我简单地添加:

setcap cap_sys_nice+ep /path/to/myapp

这里的问题是:

bin$ ./myapp
./myapp error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory

该程序失去了$LD_LIBRARY_PATH从rpath. 这似乎是预期的行为。有没有解决的办法?

在进行任何动态加载之前,我已经尝试过setcap cap_setpcap+ep myapp使用prctl(PR_CAPBSET_DROP, CAP_SETPCAP);,但这似乎没有帮助。

scheduling privileges
  • 2 个回答
  • 5621 Views
Martin Hope
ivan
Asked: 2018-04-21 17:39:20 +0800 CST

如何理解 Bash 特权模式?

  • 4

我已经阅读了man bash解释set内置-p标志的部分,这告诉了我特权模式对 Bash 行为的一些影响,但它没有足够深入地解释(或者我只是没有足够的上下文/经验) 让我了解它的用途,即在什么情况下使用它。

我的部分困惑来自这样一个事实,即我读到的关于特权模式的所有内容都使听起来“特权不足”是一个更合适的名称。这本身可能表明我对此有误解。

我也不确定我是否理解 setuid。我熟悉与之相关的有效用户 id 和真实用户 id sudo,但听起来 setuid 是一个更广泛的概念,所以也许我遗漏了一些东西。

bash privileges
  • 1 个回答
  • 1507 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve