Nun, ich möchte nur ein paar Punkte hinzufügen, um den Ansatz zu verdeutlichen, mit dem numerischen Weg sowohl für Dateien als auch für Verzeichnisse zu arbeiten.
- Hinzufügen individueller Sonderberechtigungen für Benutzer/Gruppen/andere.
chmod "X"755 file
Wobei X der spezifische oktale numerische Modus für spezielle Berechtigungen ist.
- Wenn Sie mehrere Sonderberechtigungen gleichzeitig hinzufügen möchten, z. sowohl für suid(4) als auch für sgid(2) also 4+2=6 .
chmod "6"755 file
für suid(4), sgid(2) und sticky bit(1), also 4+2+1=7
chmod "7"755 file
- Löschen aller Sonderberechtigungen (gilt nur für eine Datei)
chmod 00"0"755 file
Nun, die nachgestellten Nullen vor 4 Ziffern fügen keine Werte hinzu, wenn die Berechtigung für eine Datei geändert wird, aber sie fügen Werte hinzu, während die Berechtigung für ein Verzeichnis geändert wird.
Der obige numerische Code ändert die Berechtigung von 7755 nur für eine Datei auf 755, aber wenn Sie dasselbe für ein Verzeichnis tun, wird es 6755 sein, da es nur das Sticky-Bit für andere entfernt.
So entfernen Sie alle Sonderberechtigungen für ein Verzeichnis.
chmod "000"755 file
- Ähnlich, um die suid-Berechtigung zu entfernen und sgid(2) und sticky bit(1) zu haben, d.h. 2+1=3 .
chmod 00"3"755 file
Und Lösungen mit Buchstaben (r,w,x,X,s,t) und Operatoren(+/-) wurden bereits in den früheren Antworten diskutiert und genehmigt.
Bezüglich:"Sie können die Bits mit einem numerischen Modus setzen (aber nicht löschen)"
Auf RHEL 7 hat chmod 0644 $filename setuid(4),setgid(2) oder sticky(1) nicht entfernt.
Das Voranstellen einer zusätzlichen 0 hat jedoch funktioniert:
chmod 00644 $filename
Ändern Sie die +
zum Hinzufügen einer Berechtigung zu einem -
um es zu entfernen:
sudo chmod g-s filename
Wenn Sie dies programmgesteuert tun möchten, müssen Sie einige bitweise Operatoren verwenden. Normalerweise ist es
mode_without_suid = bitwise_and(existing_mode, bitwise_not(S_ISUID))
wobei S_ISUID
ist 0o4000, eine Konstante, die Modusbits über dem typischen rwx
verwendet solche mit etwas wie 0644
.
Zum Beispiel in Python
import os
import stat
def mode_details(m):
return f"mode={oct(m)} = {stat.filemode(m)}"
mode = os.stat('foo').st_mode
print("old mode", mode_details(mode))
new_mode = mode & ~stat.S_ISUID
os.chmod('foo', new_mode)
print("new mode", mode_details(new_mode))
die druckt
old mode mode=0o104654 = -rwSr-xr--
new mode mode=0o100654 = -rw-r-xr--
Um setgid auf numerische Weise zu entfernen, lautet der Befehl
sudo chmod 0664 $Dateiname
Die Annahme hier ist, dass die archivierte Berechtigung 664 ist und wir sie nicht ändern. Das linke Bit im obigen Befehl repräsentiert setuid(4 ),setgid(2 ) und sticky(1 ). Nun, um diese symbolische Setuid darzustellen, ist u+s , setgid ist g+s und sticky ist o+t
Beispiel 1:-chmod u+s DateinameDies setzt die UID für den erwähnten Dateinamen, der rws ist r_xr_x
Beispiel 2:chmod 2770 Verzeichnis Dies setzt gid für das erwähnte Verzeichnis, das rwxr_s ist r_x