在 gpg 中,是否可以在 PGP 密钥的 UID 列表中向上或向下移动 UID?
我意识到这纯粹是一种装饰性的东西,但我可能想用它来显示我的地址之间的优先级,如果可能的话应该先使用哪个。
pub 4096R/0xAABBD62D0BA66C66 2014-09-02
uid [ultimate] Mr. Foo Bar <fourth@example.com>
uid [ultimate] Mr. Foo Bar <first@example.com>
uid [ultimate] Mr. Foo Bar <third@example.com>
uid [ultimate] Mr. Foo Bar <second@example.com>
Run Code Online (Sandbox Code Playgroud) 尝试了解 UID 和 GID。
各种在线阅读让我相信我的 UID 保存在 中/etc/passwd
,但在我工作的服务器上似乎并非如此:
$ whoami
user1
$ cat /etc/passwd | grep user1
$
Run Code Online (Sandbox Code Playgroud)
除此之外是否还有(其他)文件/etc/passwd
可以包含我的 UID?
(我假设 UID 与 GID 类似,因为某个地方有一个文件包含它。我在该文件中找到了我感兴趣的 GID /etc/group
)
我知道我可以使用命令获取我的 UID id -u
,但对于这个问题,我特别感兴趣的是了解是否有包含它的文件。
我想看看是否id -r
会打印出登录系统的用户的 UID 或用户名,尽管有任何su
's 或sudo
's 。我对这样做很感兴趣,所以我可以让人们更加负责并相应地定制脚本功能(即:他们在脚本上发出 sudo 并从登录用户的主目录中提取信息)。
我实现了sudo
集合,SUDO_USER
但我不想依赖它,因为它是一个可由用户修改的变量,并且它只有发出最近 sudo 的用户的用户名(即:sudo -i ; sudo -iu randomUser ; echo $SUDO_USER
打印出“root”而不是实际用户)。
手册页中的任何内容或我可以在网上找到的内容似乎都表明此命令的正确用法是什么,并且明显的排列不起作用:
[root@ditirlns03 ~]# id -r
id: cannot print only names or real IDs in default format
[root@ditirlns03 ~]# id -r jadavis6
id: cannot print only names or real IDs in default format
[root@ditirlns03 ~]# id -r root
id: cannot print only names or real IDs in default format
Run Code Online (Sandbox Code Playgroud)
在这一点上,我仍然不确定 …
我正在学习 Linux 用户命名空间,并且我观察到一种对我来说并不完全清楚的奇怪行为。
我在初始用户命名空间中创建了一系列 UID,我可以通过newuidmap
命令将子用户命名空间中的 UID 映射到这些 UID 。这些是我的设置:
$ grep '^woky:' /etc/subuid
woky:200000:10000
$ id -u
1000
Run Code Online (Sandbox Code Playgroud)
然后我尝试创建一个新的用户命名空间并将其 UID 范围映射[0-10000)
到[200000-210000)
父用户命名空间中:
第一个终端:
$ PS1='% ' unshare -U bash
% echo $$
1337
% id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
Run Code Online (Sandbox Code Playgroud)第二个终端:
$ ps -p 1337 -o uid
UID
1000
$ newuidmap 1337 0 200000 10000
$ ps -p 1337 -o uid
UID
1000
Run Code Online (Sandbox Code Playgroud)第一个终端:
% id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
Run Code Online (Sandbox Code Playgroud)因此,即使newuidmap
成功完成,新用户命名空间内部和外部的 UID 也没有更改。
然后我找到了下面这篇文章 http://www.itinken.com/blog/2016/Sep/exploring-unprivileged-containers/让我大开眼界。我已经尝试过前面的场景,但使用以下 …
我的 CentOS 7 机器已成功加入域 FOOBAR(由 验证realm list
),以下是来自 AD(非本地)的用户的信息:
[root@centos7 ~]# id jdoe@FOOBAR.GLOBAL
uid=5631533(jdoe@FOOBAR.GLOBAL) gid=5600513(domain users@FOOBAR.GLOBAL)
groups=5600513(domain users@FOOBAR.GLOBAL),5631532(othergroup@FOOBAR.GLOBAL)
Run Code Online (Sandbox Code Playgroud)
UID 和 GID 是如何分配的?是否有可能以某种方式将它们映射到某个所需的值?
据我了解,不同的用户ID如下(从进程的角度):
现在我有两个问题:
在程序开始时将有效的用户 ID 保存在一个变量中会不会使保存的用户 ID 变得不必要?
如何在 C 程序中检索保存的用户 ID?我找不到任何这样做的功能。
我正在尝试./configure
为软件运行一个可执行文件(我正在使用 PuTTY 通过远程 Linux 机器执行此操作),并且在某些时候它说:
ATTENTION! pax archive volume change required.
Ready for archive volume: 1
Input archive name or "." to quit pax.
Archive name >
Run Code Online (Sandbox Code Playgroud)
所以,我将此警告发送给软件的制造商,他们说 pax 错误是我的 UID 大于 21 位的结果。他们建议在运行之前尝试这个./configure
:
ATTENTION! pax archive volume change required.
Ready for archive volume: 1
Input archive name or "." to quit pax.
Archive name >
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,它提示我输入一些东西,我不知道该输入什么。
我已经在网上查看并找不到任何可以解决此问题的方法。能解释一下pax是什么意思吗?这是某种存档,但它实际上是我的文件浏览器上的文件夹还是什么?
开发人员发送给我的“我的 UID 大于 21 位”是什么意思?
我是否需要为这个人输入一些东西,或者如果我退出会发生什么?好像软件可能无法编译。
任何/所有建议/提示将不胜感激!我几乎没有软件工程经验,但学习!
我需要一系列 uid(比如几千个)才能使用 setuid-root 工具。是否有注册这样一个范围的协议,或者我只是选择一个范围并希望没有其他程序会使用这些 uid?
(我宁愿不要/etc/passwd
用这个来制造混乱。)
我遇到了/etc/subuid
(在https://www.mankier.com/8/usermod 中记录的其他地方),它似乎做了类似的事情。究竟是什么/etc/subuid
,我可以用它来为我的 setuid 工具注册一个范围吗?
docker 似乎将这些/etc/subuid
东西用于某种 uid 映射。如果我为我的应用程序创建一个新用户,通过为它保留一个 subid 范围/etc/subuid
,然后不将它与 docker 一起使用,这是让系统的其余部分知道我保留了一个 uid 范围的好方法吗?
我正在编写一些bash
代码,我想检查脚本是否具有 root 权限。我从其他人那里看到的所有代码都只检查$EUID == 0
. 完全有可能让其他程序以 UID = 0 和 EUID > 0 运行。我的代码不应该检查这两者吗?或者 bash 有什么东西可以防止这种(奇怪的)情况发生吗?
对于那些想要看到这种情况的人,这里有一个概念证明:
[root@new-host bennett]# cp /bin/sleep .
[root@new-host bennett]# chown bennett sleep
[root@new-host bennett]# chmod 4755 sleep
[root@new-host bennett]# ll sleep
-rwsr-xr-x. 1 bennett root 32188 Sep 9 02:38 sleep
[root@new-host bennett]# ./sleep 1000 &
[root@new-host bennett]# ps -e -o user= -o ruser= -o comm= | awk '$1 != $2'
bennett root sleep
Run Code Online (Sandbox Code Playgroud)
回顾一下这个问题:在任何情况下bash
都可能遇到这样的情况吗?(( $UID == 0 && …
背景:
我最近读到了一个freedesktop.org-bug,它允许systemctl
为uid
>执行任何命令INT_MAX
。因此我跑了:
root@host$> useradd -u 4000000000 largeuiduser
root@host$> su largeuiduser
largeuiduser@host$> systemctl ["whatever"]
[bug exists, and "whatever" gets executed]
largeuiduser@host$> exit
root@host$> userdel largeuiduser
Run Code Online (Sandbox Code Playgroud)
寻找一种我后来发现的更清洁的方法
root@host$> setpriv --reuid 4000000000 systemctl ["whatever"]
[bug exists, and "whatever" stuff gets executed]
Run Code Online (Sandbox Code Playgroud)
表明为了利用该漏洞,不需要(临时)用户名。这也表明,我不太确定:用户名实际上有多重要?.
问题 因此我的问题是。从内核(linux/posix)的角度来看,用户名有多可有可无?是否需要,可以使用吗?
我的怀疑是,用户名只是一种专门用于用户空间的“便利设施”。
一个好的答案将试图通过提供有关用户名在哪些设置中成为“必需”以及在哪些设置中它们是“消耗性”的信息来对此有所了解。