Gibt es einen Unterschied zwischen Moduswert 0777 und 777?

51

Ich habe bei der Arbeit eine Codeänderung gesehen, bei der die Moduswerte von 777 auf 0777 geändert wurden, damit nfs setattr funktioniert. Was ist der Unterschied zwischen den beiden Werten?

user1071840
quelle
Kam über das gleiche Problem bei der Verwendung von PHP-integrierten FS-Funktionen wie mkdir(). 0777 gegen 777
Niket Pathak

Antworten:

76

Wenn Sie sie an chmod(das Befehlszeilenprogramm) übergeben, gibt es keinen Unterschied. Aber in einem C-Programm oder ähnlichem 0777ist es oktal (drei Sätze von drei 1-Bits, wie Sie es beabsichtigen), während 777es dezimal ist und es ein ganz anderes Bitmuster ist. ( chmodinterpretiert jedes numerische Argument als oktal, daher ist keine führende Null erforderlich.)

0777 (oktal) == binär 0b 111 111 111    == Berechtigungen rwxrwxrwx   (== dezimal 511)

777 (dezimal) == binär 0b 1 100 001 001== Berechtigungen sr----x--x(== oktal 1411)

alexis
quelle
14
Um es klar auszudrücken: Der Wert, den Sie an den chmodBefehl übergeben, wird immer als oktal interpretiert. Bei Verwendung chmod 888wird ein Fehler ausgegeben.
Mattdm
Aber jede Ziffer ist oktal, nicht die ganze Zahl.
Drake Clarris
1
Eine Folge von Oktalziffern ist eine Oktalzahl. chmodinterpretiert ein numerisches Argument unabhängig vom Präfix als oktal. (Aber eigentlich hat die Zahl selbst keine Funktion; nur die Ziffern oder vielmehr die Bits.)
Alexis
Wenn Sie also in einem C-Programm bestehen möchten 1777, müssen Sie schreiben 01777?
Faheem Mitha
1
@Faheem, das stimmt. Oktal 1777ist 01777in C geschrieben . (Oder Sie könnten schreiben 1023, was die gleiche Zahl in Dezimalzahl ist. Aber nicht :-)
alexis
4

Das erste Bit wird für das Sticky-Bit http://en.wikipedia.org/wiki/Sticky_bit verwendet

Wenn Sie die Berechtigung mit 4 Ziffern festlegen, wird das erste Bit gesetzt oder entfernt.

Alfredocambera
quelle
3
Das Sticky-Bit ist nicht das erste Bit, sondern das dritte. Das erste ist das suid-Bit und das zweite das sgid-Bit. Wenn Sie Berechtigungen mit drei Ziffern festlegen, wirkt sich die fehlende erste Ziffer auch auf diese drei Bits aus (dh, sie werden entfernt).
Juli
Du hast recht. Ergo ist die Antwort von
Alex Wring
2
@jlliagre Aus der chmod-Manpage - "Ausgelassene Ziffern werden als führende Nullen angenommen." Die erste Ziffer von 4 ist auch das Sticky-Bit. Wieder auf der Manpage: "Die erste Ziffer wählt die eingestellte Benutzer-ID (4) und die eingestellte Gruppen-ID (2) sowie die Attribute für eingeschränktes Löschen oder Festhalten (1) aus. Die zweite Ziffer wählt die Berechtigungen für den Benutzer aus, dem die Datei gehört: read ( 4), schreibe (2) und führe (1) aus, der dritte wählt Berechtigungen für andere Benutzer in der Dateigruppe mit den gleichen Werten aus und der vierte für andere Benutzer, die nicht in der Dateigruppe sind, mit den gleichen Werten. "
Faheem Mitha
1
@FaheemMitha, weggelassen Ziffern werden somit davon ausgegangen werden führende Nullen werden die oben erwähnten Bits entfernen. Außerdem scheinen Sie Bits und Ziffern zu verwechseln. Ich habe das erste Bit kommentiert, nicht die erste Ziffer.
Juli
1
@jlliagre Ok, fair genug.
Faheem Mitha
1

Die interessante Antwort lautet:

  • Es gibt keinen Unterschied zwischen 0700und 700, wie in den anderen Antworten erläutert
  • aber es gibt einen Unterschied zwischen 00700und 0700(für Verzeichnisse)

Zumindest ist das bei der chmod-Version von GNU coreutils der Fall, die unter Linux der Standard ist.

Siehe dieses Beispiel:

$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir                   # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir                  # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul  8 09:27 mydir

Dies soll ein versehentliches Löschen von setuid / setgid-Bits für Verzeichnisse verhindern. Einzelheiten finden Sie in der chmod- Dokumentation.

Alex O.
quelle
-1

In Linux-Systemen sind zwei Arten von Berechtigungen verfügbar:

  1. Dateiberechtigung
  2. Sondergenehmigung

In Dateiberechtigung legen wir die Berechtigung für Dateien und Ordner fest:

Die Berechtigungen sind:

  • lesen (4)
  • schreiben (2)
  • ausführen (1)

Während der Sondergenehmigung gibt es drei Arten von Genehmigungen:

  • SUID (4)
  • SGID (2)
  • Klebebit (1)

In Ihrer Frage fragen Sie, was ein Unterschied ist, sodass es keinen Unterschied zwischen chmod 777 and 0777gibt, da es no any octal valueeinen Anzeigewert von (0) Null gibt.

Purushottam Deich
quelle