Eh bien, je voudrais juste ajouter quelques points pour clarifier l'approche consistant à travailler avec la méthode numérique pour les fichiers et les répertoires.
- Ajout d'autorisations spéciales individuelles pour l'un ou l'autre utilisateur/groupe/autres.
chmod "X"755 file
Où X est le mode numérique octal spécifique pour les autorisations spéciales.
- Si vous souhaitez ajouter plusieurs autorisations spéciales à la fois, par ex. pour suid(4) et sgid(2) c'est-à-dire 4+2=6 .
chmod "6"755 file
pour suid(4), sgid(2) et sticky bit(1), soit 4+2+1=7
chmod "7"755 file
- Suppression de toutes les autorisations spéciales (uniquement applicable pour un fichier)
chmod 00"0"755 file
Eh bien, les zéros de fin avant 4 chiffres n'ajoutent aucune valeur lors de la modification de l'autorisation pour un fichier, mais ils ajoutent des valeurs lors de la modification de l'autorisation pour un répertoire.
Le code numérique ci-dessus changera l'autorisation de 755 à 7755 uniquement pour un fichier, mais si vous faites la même chose pour un répertoire, ce sera 6755 car il ne supprimera que le sticky bit pour les autres.
Pour supprimer toutes les autorisations spéciales pour un répertoire.
chmod "000"755 file
- De même, pour supprimer l'autorisation suid et avoir sgid(2) et sticky bit(1) c'est-à-dire 2+1=3 .
chmod 00"3"755 file
Et la solution utilisant des lettres (r,w,x,X,s,,t) et des opérateurs (+/-) a déjà été discutée et approuvée dans les réponses précédentes.
Concernant :"vous pouvez définir (mais pas effacer) les bits avec un mode numérique"
Sur RHEL 7 chmod 0644 $filename n'a pas supprimé le setuid(4),setgid(2) ou sticky(1).
Cependant, précéder d'un 0 supplémentaire a fait l'affaire :
chmod 00644 $filename
Changez le +
pour ajouter une permission dans un -
pour le supprimer :
sudo chmod g-s filename
Si vous voulez le faire par programmation, vous devrez utiliser des opérateurs au niveau du bit. Normalement c'est
mode_without_suid = bitwise_and(existing_mode, bitwise_not(S_ISUID))
où S_ISUID
est 0o4000, une constante qui utilise des bits de mode au-dessus du rwx
typique ceux de quelque chose comme 0644
.
Par exemple, en 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))
qui imprime
old mode mode=0o104654 = -rwSr-xr--
new mode mode=0o100654 = -rw-r-xr--
Pour supprimer setgid de manière numérique, la commande est
sudo chmod 0664 $nomfichier
L'hypothèse ici est que l'autorisation au dossier est 664 et nous ne la modifions pas. Le bit le plus à gauche dans la commande ci-dessus représente setuid(4 ),setgid(2 ) et collant(1 ). Maintenant, pour représenter symboliquement ces setuid est u+s , setgid est g+s et collant est o+t
Exemple 1 :-chmod u+s filenameCeci setuid pour le nom de fichier mentionné qui est rws r_xr_x
Exemple 2 :répertoire chmod 2770 Cela définira le gid pour le répertoire mentionné qui est rwxr_s r_x