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 / 问题 / 679837
Accepted
mpb
mpb
Asked: 2021-12-02 16:46:54 +0800 CST2021-12-02 16:46:54 +0800 CST 2021-12-02 16:46:54 +0800 CST

用户“shadows+”(shadowsocks?)在哪里定义?

  • 772

我在 Ubuntu 上运行ss-server代理(从包中)。shadowsocks-libev

我相信ss-server是由systemd. ss-server以用户身份运行shadows+,如下所示:

$  ps u -C ss-server
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
shadows+  719498  0.0  0.7  16244  7976 ?        Ss   Nov30   0:06 /usr/bin/ss-server -c /etc/shadowsocks-libev/config.json
$  ps un -C ss-server
    USER     PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
   64677  719498  0.0  0.7  16244  7976 ?        Ss   Nov30   0:06 /usr/bin/ss-server -c /etc/shadowsocks-libev/config.json

该用户在哪里shadows+定义?我没有在 中看到该用户/etc/passwd。

实际用户名可能类似于shadowsocks,并且被截断为 8 个字符。但即便如此,该用户也不存在于/etc/passwd.

所以问题仍然存在,这个用户在哪里定义?

更新:

针对 telcoM 的回答,我将提供额外的背景信息来解释我为什么对shadowsocks-libev用户感到好奇。

ss-server作为用户 64677 运行(至少目前)。

ss-server读取其配置文件/etc/shadowsocks-libev/config.json。

任何用户都可以读取此配置文件(默认安装在 Ubuntu 上)。

此配置文件包含(默认情况下)一个半机密密码(可能是在系统上安装软件包时生成的)。

理想情况下,只有ss-server程序和任何ss-client连接的程序ss-server会知道这个密码。

因此,任何用户都可以读取配置文件这一事实在 IMO 中是一个(轻微的?)安全漏洞。

我正在考虑更改/etc/shadowsocks-libev/config.json(或其父目录)的所有权。所以我想知道这个数字用户 ID 是否会在重新启动后保持稳定。

第二次更新:

感谢电信公司的回答和评论,我找到了以下文件:
/etc/systemd/system/multi-user.target.wants/shadowsocks-libev.service

#  This file is part of shadowsocks-libev.
#
#  Shadowsocks-libev is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
#
#  This file is default for Debian packaging. See also
#  /etc/default/shadowsocks-libev for environment variables.

[Unit]
Description=Shadowsocks-libev Default Server Service
Documentation=man:shadowsocks-libev(8)
After=network-online.target

[Service]
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
DynamicUser=true
EnvironmentFile=/etc/default/shadowsocks-libev
LimitNOFILE=32768
ExecStart=/usr/bin/ss-server -c $CONFFILE $DAEMON_ARGS

[Install]
WantedBy=multi-user.target

请注意,上述文件包含DynamicUser=true. 该文件缺少StateDirectory=条目。

systemd users
  • 1 1 个回答
  • 131 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2021-12-02T17:28:25+08:002021-12-02T17:28:25+08:00

    首先,检查passwd:./etc/nsswitch.conf

    你很可能会发现它说passwd: compat systemd。如果这是真的,那么您的系统正在使用systemd-userdbd.service除了经典之外的方法/etc/passwd来查找用户信息。这允许软件包通过将适当的 JSON 文件拖放到/usr/lib/userdb/或/etc/userdb/(或/run/userdb与容器等一起使用)来轻松添加和删除特定于应用程序的用户帐户。

    有关更多信息,请阅读man nss-systemd您的系统,或点击此链接。

    查看内容getent passwd 64677,通过其 UID 号查找用户帐户,并以类似于/etc/passwd一行的格式查看基本用户信息。这至少应该显示完整的用户名,然后您可以搜索。例如,如果您发现用户名实际上是shadowsocks1,您可以运行:

    grep -r shadowsocks1 /etc /usr /run
    

    这可能会产生许多错误命中,但如果用户帐户有一个持久的本地定义,无论它是如何定义的,它都应该找到它。

    systemd-userdbd.service还可以支持在服务启动时“创建”并在服务关闭时不再存在的动态用户。这些将永远不会存储在/etc/passwd任何文件中。此功能在 systemd 版本 232 中添加,并在版本 235 中得到显着扩展。根据 systemd 文档,用于动态用户的 UID 范围为 61184–65519。

    欲了解更多信息:https ://0pointer.net/blog/dynamic-users-with-systemd.html

    检查正在运行的 systemd 服务的服务定义ss-server:如果它包含DynamicUser=yes,则确认此功能正在使用中。要确定 UID 是否持久,请查看服务定义是否包含StateDirectory=定义。如果定义了StateDirectory,只要目录/var/lib/private/<StateDirectory value>不被删除,服务的名称不改变,UID号应该是稳定的。

    如果语法/etc/shadowsocks-libev/config.json允许引用其他文件以包含在配置中,您可以将配置的秘密部分放入放入 StateDirectory 并chown适当编辑的文件中;在这种情况下,即使动态 UID 必须更改,systemd 也会自动chown将状态目录及其内容与新的 UID 匹配。

    • 2

相关问题

  • journalctl 中的区分级别

  • 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _

  • systemd:如何在服务启动时运行脚本,而不编辑服务定义

  • 使用 systemd 看门狗支持重新启动应用程序

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

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