Limiter l'utilisateur à exécuter des commandes sélectives (Linux)

14

Comment puis-je limiter mon utilisateur à exécuter des commandes sélectives uniquement. J'ai un utilisateur tomc dans le groupe tomc. J'ai besoin que cet utilisateur soit un utilisateur sudo, puis qu'il ait des restrictions bash. J'ai essayé de suivre le code dans le /etc/sudoersfichier, mais cela ne fonctionne pas car l'utilisateur est capable d'exécuter d'autres commandes comme mkdir,rm

%tomc ALL=/bin/bash,/usr/bin/vim /*
newbie17
la source
3
Bien que l'utilisation de sudo puisse être limitée à des commandes particulières, cela peut être délicat et nécessite une certaine confiance. Si vous ne faites pas confiance à l'utilisateur, lui donner un accès sudo est une mauvaise idée. Il leur donnera soit des privilèges root, soit une application ciblée à attaquer pour obtenir des privilèges root. Laisser quelqu'un s'exécuter sudo bashéquivaut dans la plupart des cas à avoir le mot de passe root. À partir d'un sudo bashshell, ils peuvent exécuter n'importe quelle commande d'administration, installer ou supprimer des logiciels, supprimer des utilisateurs et des répertoires, etc.
Paul
@Paul Pouvez-vous me suggérer des options meilleures et pratiques pour cela?
Tout d'abord, c'est hors sujet sur le débordement de pile. Les meilleurs endroits pour demander incluent le superutilisateur, ou askubuntu, ou linux et unix. Tout d'abord, déterminez exactement ce que vous voulez permettre à tomc de faire. tomc devrait être autorisé à faire _____ mais pas ________. Puis demander. Sudo est destiné aux commandes qui nécessitent des privilèges root (admin). Il peut déjà exécuter bash sans l'exécuter en tant que root.
Paul

Réponses:

18

Vous pourriez y aller dans le mauvais sens. Au lieu de donner à un utilisateur un shell bash «restreint», vous ne devez lui donner accès qu'aux commandes dont il aurait besoin pour s'exécuter en tant que root. Par exemple, dans votre fichier sudoers:

tomc ALL=(root) /usr/bin/vim /etc/myapp.conf
tomc ALL=(root) /usr/bin/less /var/log/myapp/*.log

Soyez prudent lorsque vous autorisez les utilisateurs à exécuter vim en tant que root. Vim a beaucoup de fonctionnalités intégrées, comme des échappements au shell et la possibilité d'exécuter des commandes depuis vim. Selon votre distribution, vous pourriez en disposer sudoedit. Cela fonctionne de la même manière qu'un Vim normal, sauf qu'il est conçu pour gérer les échappements shell et autres.

mtak
la source
7
Aucune de ces lignes n'est sûre. Comme vous le mentionnez,vimpeut exécuter des commandes shell arbitraires. Et la deuxième ligne le permettra probablementless /var/log/myapp/../../../etc/shadow! D'après mes expériences, utiliser sudo en toute sécurité est difficile ! Mais si vous pouvez éviter les*s et les utiliser à lasudoeditplace,vimvous serez peut-être d'accord.
joeytwiddle
Éviter *ne suffit pas! Une fois en lesstant rootqu'utilisateur, essayez de taper !tail /var/log/secure. Comment tu te sens? Étudiez l' NOEXECétiquette. Mais prenez à cœur le message de @ joeytwiddle: la sécurité de sudo est vraiment difficile.
Bruno Bronosky
3

Sur mon Synology Diskstation exécutant DSM 6, seuls les utilisateurs administrateurs peuvent ssh en permanence (les utilisateurs non administrateurs ont le shell en tant que / sbin / nologin dans / etc / passwd - vous pouvez définir ceci sur / bin / sh pour autoriser temporairement ssh, mais au redémarrage le fichier / etc / passwd est réinitialisé). Pour cette raison, une sorte de restriction sudo est nécessaire pour un compte qui n'existe autrement que pour exécuter par exemple / sbin / poweroff. Les lignes suivantes dans / etc / sudoers ont fonctionné pour moi:

# Allow guestx user to remote poweroff
guestx ALL=(ALL) !ALL
guestx ALL=NOPASSWD: /sbin/poweroff

Traduction: interdire toutes les commandes, puis autoriser uniquement la commande souhaitée (sans demander de mot de passe dans ce cas).

Avec cette configuration, sudo demande le mot de passe, puis échoue pour les commandes autres que la liste blanche:

guestx@ds:~$ sudo su -
Password: 
Sorry, user guestx is not allowed to execute '/bin/su -' as root on ds.
guestx@ds:~$ 
robm
la source