Comment configurer umask pour un utilisateur système?

14

Est-il possible de définir le umaskpour un utilisateur système (créé avec useradd --system username)?

sid_com
la source

Réponses:

14

Il existe trois façons normales de définir le umask d'un utilisateur.

  1. Situé UMASKdans/etc/login.defs
  2. Ajoutez pam_umask.soà votre configuration PAM dans/etc/pam.d
  3. Réglez-le dans les fichiers de démarrage du shell, par exemple /etc/profile

Il n'y a aucune différence entre les utilisateurs du système et les utilisateurs normaux à cet égard.

Mais je suppose que vous essayez de démarrer un démon avec un umask personnalisé?

Le problème est le suivant: toutes les options ci-dessus se produisent lorsqu'un utilisateur se connecte. Si vous exécutez un démon, il ne se connecte jamais. Il est démarré par init, puis s'exécute en tant que root ou appelle setuidpour s'exécuter en tant qu'utilisateur système que vous spécifiez .

Vos principales options sont:

  1. mettez umaskvotre script init (faites un grep umask /etc/init.d/*exemple)
  2. configurer init pour démarrer le programme avec un umask personnalisé ( umask upstart systemd.exec )
  3. si vous utilisez start-stop-daemon, passez l' option umask
  4. modifier le programme lui-même pour appeler la fonction umask ou l'appel système
Mikel
la source
Savez-vous comment définir un umask pour SSHFS (sftp-server) sur Arch Linux (qui utilise systemd)? Comme vous l'avez souligné, les 3 premières options que vous avez énumérées n'ont aucun effet.
MountainX-for-Monica
2

Les utilisateurs du système diffèrent des utilisateurs «normaux» de trois manières: expiration du mot de passe, répertoire personnel (les utilisateurs système n'en ont pas) et UID (les utilisateurs système sont généralement inférieurs à un seuil arbitraire).

Dans le cas général, vous n'avez presque pas de chance. Vous pouvez utiliser PAM pour définir le umask, mais PAM sélectionne les comportements en fonction de choses autres que ces trois différences.

En d'autres termes, vous ne pouvez pas demander à PAM de faire la distinction entre les utilisateurs "système" et "non système". Cela vous laisse deux options:

  • Soit vous utilisez PAM pour définir le umask pour tout le monde (par exemple, archiver /etc/login.defs), puis définissez explicitement le umask pour les utilisateurs non-système dans /etc/bash.bashrc(ou similaire);

  • Ou vous écrivez votre propre module PAM pour ce faire. Je pense que cela serait bien accueilli par de nombreuses personnes, car la définition du umask est une demande courante.

Veuillez prendre cette réponse avec une généreuse pincée de sel. Ce type de demande est assez courant, et je ne serais pas surpris si un moyen meilleur / approprié existe maintenant.

Alexios
la source
1
Il existe déjà un module PAM appelé pam_umask . Le problème est que cela ne fonctionne qu'au moment de la connexion.
Mikel
Ah, je pense que vous le saviez pam_umask, mais peut-être pas pam_succeed_if. Avec pam_succeed_if , vous pouvez faire en sorte que tout autre module ne s'applique qu'à un utilisateur ou un groupe donné. Mais je ne pense toujours pas que PAM va aider ici.
Mikel
1

Comme le suggère @Mikel, si vous essayez de configurer un compte système qui est un démon, essayez de configurer le démon lui-même.

Je suis venu à cette question en regardant comment définir le umask pour le compte _www sur MacOS. Bien que cela soit difficile comme le suggèrent les réponses ci-dessus, j'ai trouvé que je pouvais le résoudre en configurant le service apache comme (dans ce cas) l'utilisateur == un démon.

Étrangement, je n'ai pas pu trouver le script de démarrage (normalement dans /etc/init.d/ mais sur un mac dans Library / LaunchDaemons /), mais avec l'aide de: http://krypted.com/mac-security/apache2-umasks / découvert qu'apache a son propre script d'environnement spécifique.

$ sudo vim /usr/sbin/envvars
    umask 002

Peut-être que d'autres démons ont des méthodes similaires, ce qui pourrait aider dans des cas spécifiques.

scipilot
la source
Mais comment avez-vous pu écrire "umask 002" dans ce fichier?!?!? Je reçois une erreur d'autorisation refusée même si root / sudo et selon apple, même les racines ne sont pas autorisées à écrire / modifier quoi que ce soit dans le répertoire / usr / sbin support.apple.com/en-gb/HT204899
Schurik