我有一个用户 ftpadmin:
-bash-3.2$ id ftpadmin
uid=10001(ftpadmin) gid=2525(fsg) groups=2525(fsg),10005(git)
需要注意的重要组是“git”
然后我有了我的 git 存储库:
ls -al
drwxrwxr-x 7 git git 4096 Apr 20 14:17 fsg
所以 ftpadmin 是 git 的一个成员,而 git 又把所有权限都给了组里的人。为什么我以 ftpadmin 身份登录时会看到这样的信息:
-bash-3.2$ ls -al /home/git/
ls: /home/git/fsg: Permission denied
...
看来我应该获得许可......
更新 /home/git 上的权限是
drwxrw-rw- 6 git git 4096 Apr 26 09:20 git
看起来还不错...
更新 /home/git 的新权限为:
drwxrwxrw- 6 git git 4096 Apr 26 09:20 git
/home/git/fsg 的权限为:
drwxrwxr-x 7 git git 4096 Apr 20 14:17 fsg
然而,我仍然得到
ls: /home/git/fsg: Permission denied
ls: /home/git/fsg: Permission denied
答案1
特别想给 mpez0 一个 +1,因为他的回答是“您需要在目录中设置组“x”位以允许组搜索。“rw-”权限允许打开给定其名称的文件 (r) 或创建文件 (w),但不能列出或搜索文件 (x)。”
人们很容易忘记,他的解决方案被埋没了在中间。对于 Linux 新用户来说,这肯定是一个问题,因为用户和组的文件/目录权限问题。
Avery 说的一切都十分正确,再次希望我也能给你 +1。
图 另一个更详细的例子可能会帮助新的 Linux 用户 (不寻求任何荣誉,只是为了清晰起见提供另一个例子)。我想在自己的电脑上为特定开发项目创建一个额外的用户。正在测试我的机器和网络上的同地服务器之间的一些 SSH、SFTP 问题。设置好一切后,出现了相同的“权限被拒绝”错误……是的,除了 mpez0 指出的基于其他权限的搜索问题外,它看起来是正确的。
注意:对于新的 Linux 用户,权限分别为用户、组、其他或 rwx、rwx、rwx,如下所示
drwxr-xr--
user has read + write + execute, rwx
group has only read and execute, r-x
other has only read acces r--
对于“其他”,我们被提醒查找/搜索目录是不够的,因此出现错误消息。
这是我所做的,(在步骤 6 中遇到错误消息)
1)创建一个用户 hoiuser(要查看用户信息,可以使用 finger cmd、“finger hoiuser”或读取 'cat /etc/passwd' 文件)
2)创建了组 hoidevs (将用户“hoiuser”添加到该组)
root@zareason-breeze:/etc# cat group | grep hoidevs
hoidevs:x:1010:userz,hoiuser
请记住,您必须注销并重新登录,才能将新的“组”权限与帐户 ID 关联。
3)chgrp hoidevs 目录 /home/userz/data/Sites/hoi 并为文件创建一个位置
hoiuser@zareason-breeze:/home/userz/data/Sites/hoi$ ls -alF
total 16
drwxr-xr-x 4 userz hoidevs 4096 2012-02-27 13:34 ./
drwxr-xr-x 2 userz userz 4096 2012-02-29 17:00 odt/
drwxrwxr-x 2 userz hoidevs 4096 2012-02-27 13:34 html/
4)打开终端窗口,用户 userz 处于活动状态
5)su - hoiuser(切换到用户hoiuser)
6)尝试 cd /home/userz/data/Sites
hoiuser@zareason-breeze:/home/userz/data$ cd Sites
-su: cd: Sites: Permission denied (voila, the problem)
userz@zareason-breeze:~/data/Sites$ ls -alF
total 60
drwxr-xr-- 11 userz userz 4096 2012-02-24 16:20 ./
drwxr-xr-x 4 userz hoidevs 4096 2012-02-27 13:34 hoi/
7) 更改了站点的权限
userz@zareason-breeze:~/data/Sites$ chmod 755 .
userz@zareason-breeze:~/data/Sites$ ls -alF
total 60
drwxr-xr-x 11 userz userz 4096 2012-02-24 16:20 ./
问题解决了...这是证据
hoiuser@zareason-breeze:/home/userz/data$ id
uid=1009(hoiuser) gid=1009(hoiuser) groups=1009(hoiuser),1010(hoidevs)
hoiuser@zareason-breeze:/home/userz/data$ cd Sites (<- yea no error message)
hoiuser@zareason-breeze:/home/userz/data/Sites$ cd hoi
hoiuser@zareason-breeze:/home/userz/data/Sites/hoi$ ls -alF
total 16
drwxr-xr-x 4 userz hoidevs 4096 2012-02-27 13:34 ./
drwxr-xr-x 11 userz userz 4096 2012-02-24 16:20 ../
drwxr-xr-x 2 userz userz 4096 2012-02-29 17:00 odt/
drwxrwxr-x 2 userz hoidevs 4096 2012-02-27 13:34 html/
即使我们经验丰富的 Linux/Unix 用户也需要时不时地提醒。
正如指出的那样,仅仅给予文件所在目录正确的权限是不够的,您还需要确保该目录下的所有目录都具有正确的权限,尤其是“其他”的“搜索”权限并查找目录和文件。当 x 表示执行时,这几乎不直观,对吧。
我的子目录结构是:/home/userz/data/Sites/hoi/html/
从家开始
userz@zareason-breeze:~$ pwd
/home
这是 chmod 之前的目录结构
drwxr-xr-x 13 root root 4096 2012-02-29 14:51 home/
drwxr-xr-x 88 userz userz 4096 2012-02-29 17:07 userz/
drwxr-xr-x 476 userz userz 20480 2012-02-26 16:08 data/
drwxr-xr-- 11 userz userz 4096 2012-02-24 16:20 Sites/ (<-- Do you see it, other is r--)
drwxr-xr-x 4 userz hoidevs 4096 2012-02-27 13:34 hoi/
drwxrwxr-x 2 userz hoidevs 4096 2012-02-27 13:34 html/
这是 chmod 之后的目录结构
drwxr-xr-x 13 root root 4096 2012-02-29 14:51 home/
drwxr-xr-x 88 userz userz 4096 2012-02-29 17:07 userz/
drwxr-xr-x 476 userz userz 20480 2012-02-26 16:08 data/
drwxr-xr-x 11 userz userz 4096 2012-02-24 16:20 Sites/ (<-- Fixed by the chmod > 755 ., now r-x)
drwxr-xr-x 4 userz hoidevs 4096 2012-02-27 13:34 hoi/
drwxrwxr-x 2 userz hoidevs 4096 2012-02-27 13:34 html/
请注意,唯一的变化是目录“Sites”的“其他”的 rx 权限。希望这对其他人有所帮助,对我来说这是一个很好的复习。
答案2
您必须拥有包含该文件的目录的权限才能访问该文件。/home/git 上的权限是什么?(是的,Zoredache,我给你 +1 以指出这一点)
后续:您需要为该组设置执行 (x) 位,以便该组进入目录。可以将其视为 Windows“遍历目录”设置的粗略模拟。如果没有它,该组的访问将被拒绝。如果您迫切需要,您可以执行以下操作:
chmod g+x /home/git
chmod g+x /home/git/fsg
尝试以下操作并发布每个操作的消息:
cd /home
cd /home/git
cd /home/git/fsg
其中每一个都应该可以通过 访问ftpadmin
。 如果其中任何一个不是,那么它将阻止你进入/home/git/fsg
。
答案3
尝试再次登录,或运行su - ftpadmin
以在当前 shell 内登录。由于组是在登录时设置的,因此可能只是您将某某添加到了组中,但仍在使用旧的组设置。
答案4
通过 root 访问权限更改用户 X 的组后,您必须注销并再次以该用户 X 身份登录,否则新组将不被考虑