Rád bych přidal několik bodů, které objasní přístup k práci s numerickým způsobem pro soubory i adresáře.
- Přidání jednotlivých zvláštních oprávnění pro uživatele/skupinu/ostatní.
chmod "X"755 file
Kde X je specifický osmičkový číselný režim pro speciální oprávnění.
- Pokud chcete přidat více zvláštních oprávnění najednou, např. pro suid(4) i sgid(2), tj. 4+2=6 .
chmod "6"755 file
pro suid(4), sgid(2) a sticky bit(1), tj. 4+2+1=7
chmod "7"755 file
- Smazání všech speciálních oprávnění (platí pouze pro soubor)
chmod 00"0"755 file
No, koncové nuly před 4 číslicemi nepřidávají žádné hodnoty při změně oprávnění pro soubor, ale přidávají hodnoty při změně oprávnění pro adresář.
Výše uvedený číselný kód změní oprávnění na 755 z 7755 pouze pro soubor, ale pokud uděláte totéž pro adresář, bude to 6755, protože u ostatních pouze odstraní lepivý bit.
Chcete-li odebrat všechna speciální oprávnění pro adresář.
chmod "000"755 file
- Podobně k odebrání oprávnění suid a použití sgid(2) a sticky bit(1), tj. 2+1=3 .
chmod 00"3"755 file
A řešení pomocí písmen (r,w,x,X,s,,t) a operátorů (+/-) již bylo diskutováno a schváleno v dřívějších odpovědích.
Pokud jde o:"můžete nastavit (ale ne vymazat) bity pomocí numerického režimu"
Na RHEL 7 chmod 0644 $filename neodstranil setuid(4), setgid(2) nebo sticky(1).
Nicméně předřazení 0 navíc udělalo trik:
chmod 00644 $filename
Změňte +
pro přidání oprávnění do -
pro jeho odstranění:
sudo chmod g-s filename
Pokud to chcete provést programově, budete muset použít některé bitové operátory. Normálně je to
mode_without_suid = bitwise_and(existing_mode, bitwise_not(S_ISUID))
kde S_ISUID
je 0o4000, konstanta, která používá bity režimu nad typickým rwx
něco jako 0644
.
Například v pythonu
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))
který tiskne
old mode mode=0o104654 = -rwSr-xr--
new mode mode=0o100654 = -rw-r-xr--
Chcete-li odstranit setgid numerickým způsobem, příkaz je
sudo chmod 0664 $filename
Zde se předpokládá, že oprávnění k souboru je 664 a neměníme to. Bit nejvíce vlevo ve výše uvedeném příkazu představuje setuid(4 ),setgid(2 ) a lepkavý (1 ). Nyní symbolicky reprezentovat setuid je u+s , setgid je g+s a lepkavý je o+t
Příklad 1:-chmod u+s název_souboruToto bude setuid pro uvedený název souboru, který je rws r_xr_x
Příklad 2:chmod 2770 directoryTo nastaví gid pro zmíněný adresář, který je rwxr_s r_x