lgroupadd
由 提供libuser
。
groupadd
由 提供shadow
。
两者都创建用户组。
我在谷歌上找不到两者之间的区别。
在 RHEL 上,有一个 command lid
,它列出了组用户,无论是主要组还是次要组。
[root@192 ~]# id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),1001(g1)
[root@192 ~]# id user2
uid=1001(user2) gid=1002(user2) groups=1002(user2),1001(g1)
[root@192 ~]# id user3
uid=1002(user3) gid=1001(g1) groups=1001(g1)
[root@192 ~]# lid -g g1
user3(uid=1002)
user1(uid=1000)
user2(uid=1001)
[root@192 ~]#
但它在 Ubuntu 上不存在。有没有类似的?
给定以下用户:
$ whoami
admin
$ groups
staff everyone admin groupA
和
$ whoami
user
$ groups
staff everyone groupB
我试图了解该--preserve-groups
选项的确切影响。
$ whoami
admin
$ sudo --preserve-groups -u user groups
staff everyone groupB
$ sudo --preserve-groups -u user -s groups
staff everyone groupB
$ sudo --preserve-groups -u user -i groups
staff everyone groupB
我阅读选项文档的方式我希望从执行的命令中看到的组列表来自调用用户而不是来自目标用户。但似乎并非如此。
我想授予组安装软件的权限,而无需输入 root/sudo 密码。我在 Linux Mint 20.3 Cinnamon 上。
我创建了一个名为“basicsudo”的组。
我第一次打字
$ which apt-get
/usr/bin/apt-get
然后
sudo visudo
然后我添加了以下行
%basicsudo ALL=(ALL) NOPASSWD: /usr/bin/apt-get install
至/etc/sudoers.tmp
[...]
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
%basicsudo ALL=(ALL) NOPASSWD: /usr/bin/apt-get install
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Groups and Users
我使用菜单中的 GUI将组分配给用户。为了检查这个我跑了
$ groupname Alice
Alice, basicsudo
从我的帐户。
当以 Alice 身份登录时,这得到了确认
$ groups
Alice, basicsudo
但是当尝试以 Alice 的身份执行以下行时,我没有成功:
$ sudo apt-get install python3-pip
[sudo] password for Alice:
Sorry, user Alice is not allowed to execute '/usr/bin/apt-get install python3-pip' as root on computername.
很清楚a)我被提示输入密码,b)尽管输入了密码,但我无法执行它。
这样做的正确方法是什么?
我正在尝试将文件复制到我的用户帐户不是目录所有者但属于目录组所有者的组的目录中。这些是我采取的步骤:
stephen@pi:~ $ sudo groupadd test-group
stephen@pi:~ $ sudo usermod -a -G test-group stephen
stephen@pi:~ $ grep 'test-group' /etc/group
test-group:x:1002:stephen
stephen@pi:~ $ touch example.txt
stephen@pi:~ $ ls -l example.txt
-rw-r--r-- 1 stephen stephen 0 Feb 9 10:46 example.txt
stephen@pi:~ $ sudo mkdir /var/www/testdir
stephen@pi:~ $ sudo chown :test-group /var/www/testdir/
stephen@pi:~ $ sudo chmod 664 /var/www/testdir/
stephen@pi:~ $ sudo ls -l /var/www
total 8
drwxr-xr-x 2 root root 4096 Oct 31 12:17 html
drw-rw-r-- 2 root test-group 4096 Feb 9 10:48 testdir
stephen@pi:~ $ cp example.txt /var/www/testdir/straight-copy.txt
cp: failed to access '/var/www/testdir/straight-copy.txt': Permission denied
对我来说,这应该是成功的;我是拥有此目录所有权的组的成员,并且组权限设置为 rw。最终,我希望复制到此目录的任何文件都继承父目录(/var/www/testdir)的权限。
我可以用 复制sudo
,但这不会从父目录继承所有者或权限,也不会保留原始所有权(可能因为我被提升为 root 进行复制):
sudo
并列出文件的所有权/权限stephen@pi:~ $ sudo cp example.txt /var/www/testdir/straight-copy.txt
stephen@pi:~ $ sudo ls -l /var/www/testdir/
total 0
-rw-r--r-- 1 root root 0 Feb 9 11:06 straight-copy.txt
请问有人可以向我解释发生了什么吗?
请考虑使用标准安装和配置的 Linux 系统sudo
;即root
可以执行所有命令,以其他用户的身份,请考虑以下命令:
sudo -u user1 -g group1 some_program
当然,我希望some_program
使用 EUIDuser1
和EGID执行group1
。但是,我已经了解到只有当user1
它实际上是group1
;的成员时才有效。我真的应该man sudo
更彻底地学习。-g
从命令行选项的解释:
[...] 只要不使用 -P 选项,sudoers 策略就允许通过 -g 选项指定任何目标用户组。
这是非常不方便的。我经常将sudo
其用于测试目的,尤其是当服务或程序在任意 UID 和 GID 下运行时,相应的用户不是相应组的成员。在这种情况下,在我可以使用 进行测试之前sudo
,我必须让相应的用户成为相应组的成员,并且一定不要忘记在测试完成后恢复该操作。
因此问题是:是否有允许使用不匹配的任意 UID 和 GID 执行程序的root
设置或sudo
配置?我只对为所有程序、UID 和 GID提供通用机制的解决方案感兴趣。也就是说,将特定程序、UID 或 GID 的列表放入其中不是一种选择。/etc/sudoers
一种可能的解决方案可能是sudo
允许这样做的替代策略提供者。但是,学习如何安装和配置它可能会非常困难,即使没有其他解决方案,我也不确定我是否会走这条路。此外,我目前还没有发现这样的东西。
更新 1 (2022-01-27)
有问题的系统运行 Debian buster,在撰写本文时已使用所有可用补丁进行了更新。未安装SELinux 。这是我的/etc/sudoers
文件(只留下注释和空行):
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
ipupdate ALL = (root) NOPASSWD: /root/scripts/asterisk-external-ip
我目前认为最后一行与问题无关,我可能应该删除它以尽量减少分心。另一方面,我了解到,有时只是看似不重要的“为清楚起见而删除”的部分实际上导致了相应的错误。
允许我们编辑组成员身份的命令有一个特殊的特性:当以 root 身份执行时,它会在尝试为任何系统用户编辑任何组成员身份groupmems
时再次询问 root 密码。
事实上,它甚至在检查此类组是否存在之前,它甚至会先发制人地处理 root 密码(它会在要求输入密码之前检查用户是否存在)
例如,如果您以groupmems -g 12345 -a nobody
root 身份执行,它将要求您输入 root 密码,然后才让您知道组 12345 不存在。
为什么(以及实际上如何)为这个特定的命令以这种方式完成,考虑到root
何时passwd
/etc/sudoers
以及......其他一切的全能。
此外,这部分直接取自man groupmems
groupmems 命令允许用户管理他们自己的组成员列表,而无需超级用户权限。groupmems 实用程序适用于将其用户配置为以他们自己的名义主组(即来宾/来宾)的系统。
只有作为管理员的超级用户可以使用 groupmems 来更改其他组的成员资格。
让我想知道如果我root
从组中删除会发生什么root
。那么 root 可能会失去将自己添加回组root
的特权groupmems
吗?(我不想尝试这个还不知道这个groupmems
命令的行为
当我试图阅读它和使用它的组时,man
我最终得到了这个有趣的花絮:
/etc/group 文件是一个文本文件,用于定义系统上的组。每行有一个条目,格式如下:
组名:密码:GID:用户列表
我个人从未group
在 linux 中为 a 设置密码。它会做什么/完成/帮助?什么时候会询问它而不是赋予特定权限的用户密码?那么属于该特定组的每个用户的密码也可以作为组密码吗?
最后一件事man group
和这一件事我们至少可以笑:
正如 4.2BSD initgroups(3) 手册页所说:似乎没有人让 /etc/group 保持最新。