更改组并保留环境变量

更改组并保留环境变量

在校园里,每个人的主要群体都是,user并且每个人还根据他或她正在学习的课程、他或她工作的实验室等与群体相关联。

我和我的同事都是该组的成员foo,因此我们使用newgrp fooumask 7来确保我们两个人无需授权即可访问我们的文件每个人允许。我们俩都不介意这一点。

然而,我们现在需要我们的PATH环境变量首先指向我们实验室的bin文件夹,然后再指向PATH.我们认为一个简单的脚本可以工作,但事实并非如此,因为PATH执行后内容不会保留newgrp

#!/bin/tcsh
setenv PATH "/path/to/lab/bin:$PATH"
newgrp foo

默认外壳是tcsh.有没有人有什么建议?

谢谢!

答案1

除非您在运行时需要输入密码newgrp(这是一个很少使用的功能),否则您不需要使用newgrp来使文件归适当的组所有。你可以用chmod它代替。例如,代替以下工作流程:

newgrp lab1
mkdir project1
$EDITOR project1/file1

你可以这样做:

mkdir project1
chgrp lab1 project1
$EDITOR project1/file1
chgrp lab1 project1/file1

在大多数当前的 unice 上,要么project1/file1已经属于lab1它包含的目录 (*BSD),要么您可以强制执行此行为(Linux、Solaris...):

mkdir project1
chgrp lab1 project1
chmod g+s project1
$EDITOR project1/file1

所有这些都需要您umask设置为 002 或 007。


管理权限会更容易,如果访问控制列表 (ACL)都支持。 ACL 支持必须存在于磁盘文件系统驱动程序中,并在安装选项中启用,并且在适用的情况下再次用于网络文件系统。 ACL 支持尚未普及,因此您可能没有它。

要查看是否可以使用 ACL,请在 Linux 客户端上尝试运行

touch foo
setfacl -m user:myfriend:rwx foo
ls -l foo

如果权限foo显示为-rw-rw-r--+或类似(+末尾带有 a),则 ACL 已启用。如果该setfacl实用程序不可用,则您的园区网络可能没有 ACL。

如果您确实有 ACL,那么您不需要有宽松的 umask,您可以坚持使用 022 或 077。使用 ACL,设置一个组可写目录(其中新创建的文件也可由该组写入) ), 做

mkdir project1
setfacl -m group:lab1:rwx project1; setfacl -d -m group:lab1:rwx project1

除了不需要宽松的 umask 之外,ACL 还允许您在任意一组用户和组之间共享文件。

相关内容