`Permission Denied` для CD в каталог, даже если права доступа правильные

13

Это так странно. Вы вошли в систему Linux (RHEL) как пользователь 'g', делая ls -lahшоу

drwxrwxrwx 6 g    g    4.0K Jun 23 13:27 .
drwxrw-r-x 6 root root 4.0K Jun 23 13:15 ..
-rwxrw---- 1 g    g     678 Jun 23 13:26 .bash_history
-rwxrw---- 1 g    g      33 Jun 23 13:15 .bash_logout
-rwxrw---- 1 g    g     176 Jun 23 13:15 .bash_profile
-rwxrw---- 1 g    g     124 Jun 23 13:15 .bashrc
drw-r----- 2 g    g    4.0K Jun 23 13:25 .ssh

Таким образом, пользователь 'g' в группе 'g' / должен / иметь возможность читать и писать в каталог .ssh, но если я это сделаю, ls -lah .ssh/я получу ls: .ssh/: Permission denied. Я также получаю отказано в разрешении, если я пытаюсь и catлюбые файлы в каталоге

Если я пойду в качестве корня и изменить права доступа к 700, 744, 766или что - либо до тех пор , как разрешение пользователя «» является 7 это работает , и я могу CD и LS каталог и файлы внутри.

id g возвращается

uid=504(g) gid=506(g) groups=506(g)

Редактировать:

Я скопировал эти разрешения точно в другой идентичный ящик, и это не проблема. Я могу cdв каталог без разрешения на выполнение.

мазаться
источник

Ответы:

27

Каталог будет требовать выполнения набора бит в для того , чтобы ввести его. Я не знаю, что вы тестировали, но вы не можете войти в каталог без бита выполнения или прочитать в нем файлы:

$ mkdir foo
$ echo "baz" > foo/bar
$ chmod 660 foo
$ cd foo
bash: cd: foo: Permission denied
$ cat foo/bar
cat: foo/bar: Permission denied

То есть, если ваш процесс не имеет установленной возможности CAP_DAC_OVERRIDE POSIX (как у root), которая позволяет вам вводить каталоги без установленного исполняемого бита, iirc.

По сути, вы должны стараться держать каталог .ssh на уровне 700, а все в нем на уровне 600, чтобы быть в безопасности. Страница man ssh содержит инструкции для каждого файла о необходимых владельцах и режимах разрешений для файлов в ~ / .ssh.

wzzrd
источник
17

Каталог требует разрешения на выполнение, чтобы cdвойти в него. Это поведение, которое ожидается.

Grahamux
источник
Но я также не могу catфайлы в каталоге с такими же разрешениями, они не должны иметь права на чтение
Smudge
4
Вам нужны разрешения на выполнение для каталога, чтобы получить доступ ко всему внутри каталога. Этот ответ правильный.
EightBitTony
1
@samarudge Рассмотрим xкаталог, чтобы дать вам разрешение «быть в» этом каталоге. Без этого вы не сможете перейти в каталог, вы не сможете увидеть, что находится в каталоге, вы не сможете открыть, что в каталоге. Если у вас нет разрешения находиться в библиотеке, вы не можете читать книги там.
DerfK
Если я добавлю разрешения на выполнение для каталога (744 для каталога, 644 для файлов внутри), я получу сообщение об ошибке от SSHD о том, что разрешения для каталога .ssh должны быть 644 или ниже. Но с разрешениями 644 он говорит, что не может получить доступ к .ssh / authorized_keys
Smudge
* В нем указано «.ssh / directory», а не файлы
Smudge
2

Для того, чтобы ls или cd попали в каталог, вам нужны права на выполнение. Хотя у вас их нет, вы не можете на самом деле проверять содержимое и видеть разрешения файлов внутри, поэтому, скорее всего, сами права доступа к файлам неверны, если вы не можете их отследить.

Разрешение каталога 700 и разрешение файла 644 отлично подходят для меня.

Солнечный
источник
Права доступа к файлам: 644владелец файлов g: g, поэтому права доступа к файлам правильные. Если я добавлю разрешения на выполнение в каталог, SSHD говорит, что мне нужно сбросить разрешения до 644 или ниже
Smudge
Комментарии Санни верны - голосование за голосование немного резкое
AndyM
0

Я так понимаю, это проблема с ssh файлом? не общая проблема chmod?

Если так, попробуйте

$chmod go-w ~/
$chmod 700 ~/.ssh
$chmod 600 ~/.ssh/*
$chmod 600 ~/.ssh/.*
AndyM
источник
другая проблема, может быть точка монтирования, монтируется ли она откуда-то еще, CIFS, NFS?
AndyM
0

Каталоги должны быть установлены x бит (для каталога, который бит рассматривается как поисковый бит), чтобы открыть. Поэтому я использую дерево, чтобы я мог получить только набор папок и избежать кошмара, когда все файлы установлены как исполняемые файлы (опция для дерева есть -d List directories only.):

sudo tree -faid here_goes_your_directory xargs -L1 -I{} sudo chmod 755  "{}"

Предупреждение!!! Вы должны иметь это в виду:

  • использование chmod или chown recursive в корневом /каталоге или в системных каталогах разрушит вашу ОС (на самом деле все, что рекурсивно в /каталоге или системных каталогах, опасно)

  • это не очень хорошая практика безопасности, чтобы устанавливать разрешение таким образом

Эдуард Флоринеску
источник