在深入探讨如何在不同的 Linux 机器上同步 UID/GID 之前,我想知道实际上有什么好处?
我知道这使文件同步相对容易(因为所有权是“自然”保留的)。然而,这也可以根据传输服务以其他方式实现。
还有什么可以从一致的 UID/GID 中受益的吗?
我知道 unix 用户 ID (UID) 通常是 16 位或 32 位无符号整数,但是我怎样才能找到任何给定系统(在 shell 中)?
我有几台 CentOS 4 机器,我决定通过 LDAPS 对 Win2008 DC 进行身份验证,所以当 Active Directory 用户使用他的凭据登录服务器时,它会创建用户的目录并设置他。
事情是,服务器也有本地用户帐户(如客户在网络服务器上的网站空间,以及其他杂项本地帐户),并且在设置 LDAPS 身份验证后,这些帐户 UID(来自 500+)现在被设置在 10000范围与我们的 AD 帐户。本地帐户要么由脚本生成,要么在机器上手动生成。
我只是希望这两个范围是分开的。useradd 的手册页说
-o uid ... 默认是使用大于 99 且大于所有其他用户的最小 ID 值。
有没有办法解决这个问题或配置它?我想区分本地帐户和 AD 帐户。
对于一些临时的数据迁移任务,我需要设置一个 NFS 服务器。两台机器上的 UID 不匹配,所以我需要以某种方式避免权限问题。
幸运的是,我想,有一个all_squash选择。它说:
all_squash:将所有 uid 和 gid 映射到匿名用户。对于 NFS 导出的公共 FTP 目录、新闻假脱机目录等很有用。相反的选项是 no_all_squash,这是默认设置。
为了映射到我想要的用户和组,我还指定了anonuid=12345和anongid=15101982:
anonuid 和 anongid:这些选项明确设置匿名帐户的 uid 和 gid。此选项主要用于 PC/NFS 客户端,您可能希望所有请求都来自一个用户。例如,考虑下面示例部分中 /home/joe 的导出条目,它将所有请求映射到 uid 150(应该是用户 joe 的请求)。
在连接到 NFS 共享的客户端上创建一个文件,正如预期的那样,我看到以下行为(uid/gid 已更改为12345):
$ touch test && ls -l test
-rw-rw-r-- 1 12345 12345 0 Aug 25 18:10 test
Run Code Online (Sandbox Code Playgroud)
但是,共享上已存在的文件仍具有其原始 uid 和 gid:
$ ls -l existing-file
-rw-rw-r-- 1 98765 98765 0 Aug 25 18:11 existing-file …Run Code Online (Sandbox Code Playgroud) 基本上,这里发生了什么,我不明白什么?
我为我的用户设置了一组 subuid。我想将文件 chown 到特定的 subuid,这是该用户分配的一部分
administrator@host:/home/administrator$ cat /etc/subuid
root:100000:65536
administrator:165536:65536
administrator:1000000:9000001
administrator@host:/home/administrator$ cat /etc/subgid
root:100000:65536
administrator:165536:65536
administrator:1000000:9000001
Run Code Online (Sandbox Code Playgroud)
尽管此 subuid 是分配的一部分,但尝试 chown 此文件失败。
administrator@host:/home/administrator$ ls -lhat
...
-rw-rw-r-- 1 administrator administrator 229 Aug 2 13:00 file
drwxrwxr-x 7 administrator administrator 4.0K Aug 2 13:00 ..
administrator@host:/home/administrator$ chown 1500000:1500000 file
chown: changing ownership of 'file': Operation not permitted
administrator@host:/home/administrator$ stat file
File: file
Size: 229 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 658357 Links: 1
Access: (0664/-rw-rw-r--) Uid: …Run Code Online (Sandbox Code Playgroud) 我使用 puppet 在 Ubuntu 中添加了一个新用户,其硬编码 uid 为 10017。各工作站的 uid 必须相同,以便在恢复用户数据时一切都对齐。
现在我发现 uid 不是唯一的。Mysql 正在使用它。如何测试服务器以确定 uid (10018) 是否存在?
我使用以下命令获取 LDAP 的所有用户的列表ldapsearch -x -LLL uid=* > result。
以下命令的结果如下格式
dn: uid=shahrukh,ou=People,dc=example,dc=com
uid: shahrukh
cn: shahrukh
sn: shahrukh
loginShell: /bin/bash
uidNumber: 1086
gidNumber: 1086
homeDirectory: /home/ldap/shahrukh
Run Code Online (Sandbox Code Playgroud)
有这些记录的完整列表。
我想在一个文件中列出所有 uid,以便只列出 uid 的值。
shahrukh
abc
xyz
....
....
....
Run Code Online (Sandbox Code Playgroud) 目前,我的组织在其 linux 配置中有两个 UID 为 0 的帐户 - Root 和 Root2。如果我们为 Root2 帐户设置失败登录尝试设置,并且该帐户随后被锁定,它是否也会锁定 Root 帐户?
我最初的想法是锁定 Root2 不会影响 Root,因为虽然他们共享一个 UID(并且 UID 为 0 的用户数量似乎没有限制),但他们显然可以拥有不同的密码。那是准确的吗?或者我是否遗漏/忽略了身份验证过程中的某些机制,这些机制会锁定 UID 为 0 而不是特定用户名的用户?
我正在使用 IPTABLES 在我的服务器上进行出口日志记录,其中包含以下行,该行应该提供有关记录的所有流量的 UID 信息:
-A OUTPUT -j LOG --log-prefix "IPTABLES(O): " --log-level info --log-uid
Run Code Online (Sandbox Code Playgroud)
然而,偶尔我会得到没有 UID 的日志,如下所示:
IPTABLES(O): IN= OUT=eth0 SRC=1.2.3.4 DST=5.6.7.8 LEN=83 TOS=0x00 PREC=0x00 TTL=64 ID=54321 DF PROTO=TCP SPT=50505 DPT=443 WINDOW=342 RES= 0x00 ACK PSH FIN URGP=0
传出流量不包含任何 UID 信息的原因是什么?