- 主题:弄多人git仓库,被linux 的权限折磨了
我以为简单的把root用户创建的 /data/repos/project.git 设置成777就解决一切权限问题(虽然不解决安全问题)
但是还是没搞定 :(
--
FROM 183.255.219.*
Server refused to set environment variables
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
【 在 chaobill 的大作中提到: 】
: 我以为简单的把root用户创建的 /data/repos/project.git 设置成777就解决一切权限问题(虽然不解决安全问题)
: 但是还是没搞定 :(
--
FROM 183.255.219.*
这个没用,因为里面的git object文件还是每个用户各自创建的,除非能让这些文件在创建的时候也变成所有用户可写。
【 在 chaobill 的大作中提到: 】
: 我以为简单的把root用户创建的 /data/repos/project.git 设置成777就解决一切权限问题(虽然不解决安全问题)
: 但是还是没搞定 :(
--
FROM 114.254.9.*
现在是 project.git 文件夹是当前用户,就能 clone
其他 gitusers 的组的也不能 clone。
linux 的权限就是烂啊
【 在 ArchLinux 的大作中提到: 】
: 这个没用,因为里面的git object文件还是每个用户各自创建的,除非能让这些文件在创建的时候也变成所有用户可写。
--
FROM 183.255.219.*
我问了grok,说推荐使用共享的group加上粘滞位
但是贴不出来
【 在 chaobill 的大作中提到: 】
: 现在是 project.git 文件夹是当前用户,就能 clone
: 其他 gitusers 的组的也不能 clone。
: linux 的权限就是烂啊
: ...................
--
FROM 221.198.65.*
粘滞位是把该文件夹下的文件改成相应的 gid 或者 uid 的么。
我这也是问豆包整的,结果还是没搞好。
难道父级目录也有影响么
【 在 tgfbeta 的大作中提到: 】
: 我问了grok,说推荐使用共享的group加上粘滞位
: 但是贴不出来
--
FROM 183.255.219.*
可能是幻觉,感觉他说的可能是set group id (SGID)
【 在 chaobill 的大作中提到: 】
: 粘滞位是把该文件夹下的文件改成相应的 gid 或者 uid 的么。
: 我这也是问豆包整的,结果还是没搞好。
: 难道父级目录也有影响么
: ...................
--
FROM 221.198.65.*
sudo chgrp -R gitgroup /path/to/repo
sudo chmod -R g+rwX /path/to/repo
sudo chmod g+s /path/to/repo
git init --shared=group
【 在 tgfbeta 的大作中提到: 】
: 可能是幻觉,感觉他说的可能是set group id (SGID)
--
修改:tgfbeta FROM 221.198.65.*
FROM 221.198.65.*
我问了GLM-4(chat.z.ai),它给的一种方案也是用SGID,但是我觉得最靠谱的还是用ACL.
在GNU/Linux系统中,要设置一个目录及其所有子目录和文件的权限,使得所有用户都能读写,可以使用以下方法:
### 方法一:使用 `chmod` 和 `setfacl` 结合
1. **设置目录权限**:
```bash
chmod 777 /path/to/directory
```
这会将目录权限设置为 `rwxrwxrwx`,允许所有用户(所有者、组、其他用户)读取、写入和执行。
2. **设置默认ACL(访问控制列表)**:
```bash
setfacl -d -m u::rwx,g::rwx,o::rwx /path/to/directory
```
这会为该目录设置默认ACL,确保在目录下创建的新文件和子目录也继承这些权限。
### 方法二:使用 `chmod` 和 `find` 结合
1. **设置目录权限**:
```bash
chmod -R 777 /path/to/directory
```
这会递归地将目录及其所有子目录和文件的权限设置为 `rwxrwxrwx`。
2. **确保新创建的文件和目录也具有相同的权限**:
你可以通过创建一个脚本来监控新创建的文件和目录,并自动设置权限。例如,可以创建一个 `inotifywait` 脚本:
```bash
#!/bin/bash
inotifywait -m -r -e create --format '%w%f' /path/to/directory | while read file
do
chmod 777 "$file"
done
```
将上述脚本保存为 `monitor.sh`,然后运行:
```bash
chmod +x monitor.sh
./monitor.sh
```
### 方法三:使用 `chmod` 和 `chmod g+s` 设置SGID位
1. **设置目录权限**:
```bash
chmod 777 /path/to/directory
```
2. **设置SGID位**:
```bash
chmod g+s /path/to/directory
```
这会使得在该目录下创建的新子目录和文件继承该目录的组所有权。然后,你可以使用 `setfacl` 为组设置权限:
```bash
setfacl -R -m d:u::rwx,d:g::rwx,d:o::rwx /path/to/directory
```
### 注意事项
- **安全性**:将目录权限设置为 `777` 会允许所有用户对目录及其内容进行完全访问,这在安全性上可能存在风险。请确保你了解这些风险,并在必要时采取额外的安全措施。
- **ACL**:`setfacl` 提供了更细粒度的权限控制,但并非所有系统都默认支持。如果系统不支持ACL,可能需要安装额外的包(如 `acl`)。
- **性能**:递归操作(如 `chmod -R`)可能会对大型目录树产生性能影响。
根据你的具体需求和环境,选择最适合的方法。
【 在 tgfbeta 的大作中提到: 】
: 可能是幻觉,感觉他说的可能是set group id (SGID)
--
修改:ArchLinux FROM 114.254.9.*
FROM 114.254.9.*
运行个gitea就完了,哪有那么多的事?
【 在 chaobill 的大作中提到: 】
: 我以为简单的把root用户创建的 /data/repos/project.git 设置成777就解决一切权限问题(虽然不解决安全问题)
: 但是还是没搞定 :(
--
FROM 117.173.158.*