Soyez très prudent :les scripts combinés avec setuid sont dangereux !
Tout d'abord, veuillez jeter un œil à cette question/réponse, en particulier à cette réponse et à cet avertissement de sécurité.
Si vous souhaitez toujours exécuter votre script avec setuid
set, alors vous pouvez écrire un court programme C comme wrapper et définir le setuid
bit sur le binaire compilé.
Exemple d'encapsuleur :
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Une autre solution utilisant sudo
(mentionné ici) :
-
En tant que root, empêchez l'accès en écriture (et peut-être autre) à votre script :
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
-
Vérifiez que personne d'autre que root ne peut remplacer le script , par exemple. en modifiant les droits d'accès du dossier parent :
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
-
Modifier les droits d'accès sudo dans
/etc/sudoers
avecvisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Plus de détails sur les paramètres (par exemple, restreindre l'accès à des utilisateurs ou groupes spécifiques) peuvent être trouvés dans la page de manuel sudoers.
Ensuite, tous les utilisateurs peuvent exécuter le script en tant que root sans mot de passe :
sudo /absolute/path/to/your/script.sh
Ceci est similaire à l'utilisation de la solution wrapper/setuid ci-dessus.
Le moyen le plus simple et le plus sûr consiste à utiliser les bits SETUID dans les autorisations de fichier. Ainsi, les autorisations de commande seront élevées aux autorisations de propriétaire de fichier.
pour empêcher l'édition du script, ne définissez pas l'écriture pour tout le monde.