Czy mogę utworzyć katalog publiczny w katalogu prywatnym?

20

Mam folder osobisty / a / b na serwerze z uprawnieniem 700. Nie chcę, aby inni wyświetlali zawartość w / a / b. Właścicielem / a jest root.

Teraz muszę otworzyć pełne uprawnienia katalogu / a / b / c dla wszystkich użytkowników.

Zmieniłem pozwolenie z / a / b / c na 777, ale nadal jest niedostępne dla innych.

Zawietrzny
źródło
2
Musisz ustawić „bit wykonania”, aby zezwolić na przechodzenie do katalogu (przechodzenie przez / a i / a / b), może to rozwiązać problem:chmod +x /a/b
ex0ns

Odpowiedzi:

34

Możesz. Musisz tylko ustawić bit wykonywalny w /a/bkatalogu. Uniemożliwi to dostrzeżenie czegokolwiek w środku b, ale nadal możesz zrobić wszystko, jeśli przejdziesz bezpośrednio do a/b/c.

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Uważaj, że chociaż inni nie mogą wyświetlić zawartości /a/b, mogą uzyskać dostęp do plików w tym katalogu, jeśli odgadną nazwę pliku.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Należy więc zachować odpowiednie uprawnienia (bez grupy / świata) do wszystkich innych plików / katalogów w bkatalogu, ponieważ pozwoli to uniknąć tego zastrzeżenia.

stevieb
źródło
Jako alternatywę dla ustawienia bitu wykonywalnego, czy możesz również podać twardy link do a / b / c, który znajduje się w innej lokalizacji?
Moby Disk
2
@MobyDisk Nie można na stałe utworzyć linku do katalogu.
Michael Hampton,
To nie zadziałałoby, ponieważ bez względu na wszystko, nadal musisz czytać, baby link doc
stevieb
3
Należy pamiętać, że istnieją pewne ważne zastrzeżenia. Jeśli którykolwiek z plików a/bma niezerowe uprawnienia grupy / inne, a przeciwnik zna lub może odgadnąć ich nazwy, wspomniany przeciwnik może wchodzić w interakcje z tymi plikami.
Kevin,
Prawda @ Kevin, perms dla wszystkiego poniżej bpowinien mieć perms ustawione, aby zabezpieczyć się przed tym przed utworzeniem c, a następnie należy zachować staranność, gdy inne elementy są wypełnione w bcelu zapewnienia, że ​​perms są bezpieczne tylko dla właściciela.
stevieb,
9

Z tymi uprawnieniami nie możesz osiągnąć swojego celu. Aby dostać się do katalogu c, musisz zezwolić wszystkim innym użytkownikom na przechodzenie przez katalog, bco odbywa się poprzez udzielenie uprawnień do wykonania dla tego katalogu. Ustawiając /a/btryb 711, możesz osiągnąć to, co chcesz, ponieważ udzielasz dostępu do katalogu, ale odmawiasz odczytu i zapisu. Pamiętaj jednak, że chociaż inni użytkownicy nie mogą wyświetlać plików na liście/a/b , mogą uzyskiwać dostęp do plików, jeśli odgadną nazwę i pliki mają wystarczająco otwarte uprawnienia.

Jan
źródło
3

Jeśli użytkownik nie może uzyskać dostępu /a/b, nie może uzyskać dostępu do żadnego pliku poniżej /a/b/c. Uprawnienia na /a/b/csą nieistotne, ponieważ przechodzenie do katalogu zatrzymuje się na /a/b.

Jeśli wszystko, czego chcesz, to zapobiec wyświetlaniu katalogu /a/b, ale nie masz nic przeciwko użytkownikom uzyskującym dostęp do plików, /a/bjeśli odgadną nazwę pliku, możesz uczynić /a/bplik wykonywalny, ale nie do odczytu. W katalogu uprawnienie do odczytu kontroluje tylko wyświetlanie zawartości katalogu, a uprawnienie do wykonywania kontroluje dostęp do wpisów tego katalogu.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

Jeśli nie chcesz, aby inni użytkownicy mieli dostęp do plików z /a/bwyjątkiem /a/b/c, możesz udostępnić je /a/b/cza pomocą innego widoku, poprzez podłączenie do wiązania .

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
Gilles „SO- przestań być zły”
źródło