我的用户被分配了多个组(例如group_a
和group_b
)。默认情况下,顺序为:
$ groups
> group_b group_a
为了分配正确的主要组(用于文件访问权限等),我已经输入了newgrp group_a
,.bash_profile
现在可以正确设置主要组:
$ groups
> group_a group_b
现在,我正在启动一个 Linux 桌面应用程序:
[Desktop Entry]
Name=myApp
Exec=/home/user/App
Terminal=false
Type=Application
但是,在这个应用程序内部,组的顺序是错误的。如何在启动桌面应用程序时设置正确的组顺序?
注意:我认为 newgrp 不起作用,因为桌面应用程序没有启动登录 shell,因此无法运行.bash_profile
。
答案1
通常,您可以通过以下方式更改主要组
sudo usermod -g NewPrimGroup LoginName
- 新的用户组必须存在。
- 在用户主目录中,所有具有旧 GID 的组都将通过此命令更改为新 GID。对于用户主目录之外的文件,此操作必须手动完成。
- 为了使其生效,您必须重新登录,因此请注销并终止使用该用户凭据的所有进程。
但由于访问权限有限,您将无法执行此操作。
=> 将您的主要用户组更改为具有有限系统权限的用户的正确方法是请您的管理员来执行此操作。
要使用您有限的标准用户权限来管理它,您必须按照已经尝试过的方式采取解决方法:每次登录时将当前组更改为所需的组。
但在尝试之前,第一个问题应该是:
你认为为什么有必要改变当前组?
在大多数情况下,您只需要确保您编写的文件具有正确的 GID,以便项目的其他用户可以访问它们。
这可以通过设置 SGID 位来实现:
# Set group for directory and set SGID bit:
$ chgrp group_a project-dir_a
$ chmod g+s project-dir_a
# Test it:
$ id
uid=1078(you) gid=15112(group_b) groups=15112(group_b),24(cdrom),100(users),1078(you),15111(group_a),....
$ cd project-dir_a
$ touch newfile
$ mkdir newdir
$ ls -la
drwxrws--- 63 you group_a 4096 Aug 10 14:17 ./
drwxr-x--- 5 you group_b 4096 Mar 5 13:50 ../
drwxrwx--- 1 you group_a 152 Aug 10 14:17 newfile
drwxrws--- 2 you group_a 4096 Aug 10 14:17 newdir/
...
请注意
- 所创建项目的正确 GID,尽管此 GID 不是当前/主要组
- ( SGID )在组部分和当前目录
s
的访问权限中,确保了这种行为。(只有目录可以有 SGID。)newdir
.