Kann ich ein öffentliches Verzeichnis unter einem privaten Verzeichnis erstellen?

20

Ich habe einen persönlichen Ordner / a / b auf dem Server mit der Berechtigung 700. Ich möchte nicht, dass andere den Inhalt in / a / b auflisten. Der Besitzer von / a ist root.

Jetzt muss ich die vollständigen Berechtigungen des Verzeichnisses / a / b / c für alle Benutzer öffnen.

Ich habe die Erlaubnis von / a / b / c in 777 geändert, aber für andere ist sie immer noch nicht zugänglich.

Lee
quelle
2
Sie müssen das 'Execute-Bit' setzen, um das Durchlaufen des Verzeichnisses zu ermöglichen (um / a und / a / b zu durchlaufen). Dies könnte Ihr Problem lösen:chmod +x /a/b
ex0ns

Antworten:

34

Sie können. Sie müssen nur das ausführbare Bit im /a/bVerzeichnis setzen. Das verhindert, dass Sie etwas sehen können b, aber Sie können immer noch alles tun, wenn Sie direkt zu gehen 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

Beachten Sie, dass andere zwar den Inhalt von nicht auflisten können /a/b, sie jedoch auf Dateien in diesem Verzeichnis zugreifen können, wenn sie den Namen der Datei erraten.

% 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

Stellen Sie daher sicher, dass Sie für alle anderen Dateien / Verzeichnisse im bVerzeichnis die richtigen Berechtigungen (keine Gruppe / Welt) haben , da dies diese Einschränkung vermeidet.

stevieb
quelle
Könnten Sie als Alternative zum Setzen des ausführbaren Bits auch eine feste Verbindung zu a / b / c bereitstellen, die sich an einem anderen Ort befindet?
Moby Disk
2
@MobyDisk Sie können keine feste Verbindung zu einem Verzeichnis herstellen.
Michael Hampton
Es würde nicht funktionieren, denn egal was bc
passiert
3
Beachten Sie, dass dies einige wichtige Vorbehalte enthält. Wenn eine der Dateien in a/bGruppen- oder anderen Berechtigungen ungleich Null ist und ein Gegner deren Namen kennt oder erraten kann, kann er mit diesen Dateien interagieren.
Kevin
Richtig, @Kevin, für die Dauerwellen unter bsollten vor dem Erstellen Dauerwellen festgelegt sein, die vor diesen schützen sollen. cWenn andere Elemente hinzugefügt werden, ist Sorgfalt erforderlich, bum sicherzustellen, dass Dauerwellen nur für den Besitzer sicher sind.
Stevieb
9

Mit diesen Berechtigungen können Sie Ihr Ziel nicht erreichen. Um in das Verzeichnis zu gelangen c, müssen Sie allen anderen Benutzern erlauben, das Verzeichnis zu durchlaufen b, indem Sie die Ausführungsberechtigung für dieses Verzeichnis erteilen. Im /a/bModus 711 können Sie das erreichen, was Sie möchten, da Sie die Verzeichnisüberquerung gewähren, aber das Lesen und Schreiben verweigern. Aber denken Sie daran , dass , während andere Benutzer keine Liste Dateien in /a/b, können sie auf Dateien zugreifen, wenn sie den Namen erraten und die Dateien haben ausreichend offen Berechtigungen.

John
quelle
3

Wenn ein Benutzer nicht darauf zugreifen kann /a/b, kann er auch nicht auf Dateien unter zugreifen /a/b/c. Die Berechtigungen für /a/b/csind irrelevant, da die Verzeichnisdurchquerung bei endet /a/b.

Wenn Sie nur verhindern möchten, dass das Verzeichnis /a/baufgelistet wird, Benutzer jedoch auf Dateien zugreifen können, /a/bwenn sie einen Dateinamen erraten, können Sie die /a/bausführbare Datei so konfigurieren, dass sie nicht lesbar ist. In einem Verzeichnis steuert die Leseberechtigung nur das Auflisten des Verzeichnisinhalts, während die Ausführungsberechtigung den Zugriff auf die Einträge dieses Verzeichnisses steuert.

# 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/

Wenn Sie nicht möchten, dass andere Benutzer mit /a/bAusnahme von auf Dateien zugreifen können /a/b/c, können Sie diese in einer /a/b/canderen Ansicht über einen Bind-Mount bereitstellen .

# 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 - hör auf böse zu sein'
quelle