在校园里,每个人的主要群体都是,user
并且每个人还根据他或她正在学习的课程、他或她工作的实验室等与群体相关联。
我和我的同事都是该组的成员foo
,因此我们使用newgrp foo
和umask 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 还允许您在任意一组用户和组之间共享文件。