我正在设置一个环境,其中我为我的服务器上的几个用户提供 SSH 访问权限。他们都是受信任的,但我想将他们限制在文件系统的某个部分中。我按如下方式创建用户:
adduser username -ingroup groupname
效果很好。当我以其中一个用户的身份登录时,我可以这样做并获得所有正确答案:
$id -r -u -n
username
$id -r -g -n
groupname
groupname
我通过执行以下操作将我自己的用户帐户的主要组切换为:
$usermod myuser groupname
然后我注销并重新登录。现在我希望组能够访问的文件位于此处:
$ls -l / | grep groupname
drwxr-xr-x 3 root groupname 4.0K 2012-03-26 20:20 groupfiles
$cd /groupfiles
$ls -l
drwxrwxr-x 2 root groupname 4.0K 2012-03-26 20:32 project
权限是设计使然,组成员无法更改文件/文件夹,/groupfiles
但可以添加、编辑和删除/groupfiles/project
我遇到的问题是,当我执行此操作时,我得到了错误的组:
$touch test
$ls -l test
-rw-rw-r-- 1 myuser myuser 0 2012-03-26 20:58 test
$id -r -g -n
groupname
我需要确保 vim、touch 等创建的文件具有正确的组。我知道newgrp()
这些setgid
位。这些是不是我正在寻找什么。这对我创建的新用户来说很好,但对我的用户却不起作用。我不确定发生了什么,但现在它工作正常。我只是把这个问题留在这里,供未来的修补者参考。
答案1
我猜你想要的行为是sudo usermod -g groupname myuser
。
注意:该命令会更改 $HOME 中所有文件的组所有权,但不会更改 home 之外的文件的组所有权。您可能希望将其改回chgrp -R myuser $HOME
然后您需要注销并重新登录以使更改生效。
如果您不想更改“myuser”主要组,那么可以使用 newgrp。
sudo usermod -g admin bodhi
ssh localhost
touch file
newgrp bodhi
touch file2
ls -l file file2
-rw-r--r-- 1 bodhi admin 0 2012-03-26 19:28 file
-rw-r--r-- 1 bodhi bodhi 0 2012-03-26 19:29 file2