web-dev-qa-db-fra.com

Bloquer la commande particulière sous Linux pour un utilisateur spécifique

Comment bloquer la commande, disons mkdir pour un utilisateur spécifique?

Ce que j'ai fait simplement créer une fonction en lecture seule et stocker dans le profil des utilisateurs ~/.bashrc

/bin/mkdir() {
        echo "mkdir command not allow for you"

}

mkdir() {
        echo "mkdir command not allow for you"

}
./mkdir() {

        echo "mkdir command not allow for you"
}

readonly -f /bin/mkdir
readonly -f mkdir
readonly -f ./mkdir

Test :

rahul@ubuntu:~$ cd /bin/
rahul@ubuntu:/bin$ ./mkdir /home/rahul/ggg
mkdir command not allow for you
rahul@ubuntu:/bin$ cd
rahul@ubuntu:~$ mkdir testing
mkdir command not allow for you
rahul@ubuntu:~$ /bin/mkdir testing
mkdir command not allow for you

Donc, ma question est ce qui devrait être la façon de la réaliser? Y a-t-il un outil pour cela?

Mise à jour 1 # Mais si l'utilisateur est intelligent, il pourrait copier MKDir Binary et le renommer et l'utiliser. Alors, comment y parvenir?

27
Rahul Patil

Je ne sais pas comment le faire avec Bash, mais je connais un autre shell qui restreint l'environnement utilisateur: LSHELL (Shell limité) .

Un aperçu rapide de la configuration

Lshell est configuré via un INI. Par défaut, il contient une liste blanche de commandes autorisées, mais il peut être facilement configuré pour interdire à l'utilisateur d'utiliser une commande spécifique.

Cette configuration (conflit de conflit /etc/lshell.conf) interdit l'utilisateur foo de l'utilisation mkdir:

[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']

Afin de configurer un compte d'utilisateur pour utiliser LSHell par défaut, vous devez:

 chsh -s /usr/bin/lshell foo

Lshell peut faire plus, comme:

  • 3 niveaux de granularité: utilisateur, groupe, tout.
  • Peut limiter l'accès à certains chemins du système.
  • Peut limiter l'utilisation de certains caractères (comme |).
  • Peut limiter l'utilisation de certaines commandes uniquement sur SSH.

Et plus.

Mise à jour 1 # Résultat de test ajouté:

rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir
21
rahmu

La manière dont je mettez habituellement implémenter ce type de restrictions nécessite que plusieurs conditions soient remplies, sinon la restriction peut être facilement contournée:

  • L'utilisateur n'appartient pas au groupe wheel, le seul autorisé à utiliser su (appliqué via PAM).
  • L'utilisateur reçoit un identifiant correctement sécurisé rbash avec un chemin en lecture seule pointant vers un privé ~/bin, cette ~/bin/ Répertoire contient des liens vers des utilitaires simples:

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 Sudo -> /usr/bin/Sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • l'utilisateur reçoit un environnement restreint en lecture seule (pense à des trucs comme LESSSECURE, TMOUT, HISTFILE variables).

  • l'utilisateur est mappé sur l'utilisateur SELINUX staff_u et donné les droits d'exécution des commandes comme autre utilisateur requis via Sudo.
  • les utilisateurs /home, /tmp et éventuellement /var/tmp sont polyinstanciés via /etc/security/namespace.conf:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    Aussi, /etc/security/namespace.init fait tous les fichiers squelettiques à la lecture de l'utilisateur et appartenant à root.

De cette façon, vous pouvez choisir si $USER peut exécuter mkdir sur son propre compte (via un lien dans le privé ~/bin répertoire, provisionné via /etc/skel, comme expliqué ci-dessus), au nom d'un autre utilisateur (via Sudo) ou aucun du tout.

15
dawud

Ajouter un groupe mannequin, ajoutez l'utilisateur à ce groupe, chown root:somegroup /bin/mkdir, chmod g-x /bin/mkdir. Notez que cela s'appuie sur l'utilisateur de ne pas être en mesure de modifier leurs groupes. IIRC c'est vrai à GNU/Linux mais pas dans d'autres autres unités.

4
strugee

Le meilleur tel que j'ai testé est d'utiliser le profil.D meilleur et le moyen le plus sûr

Étape n ° 1 (créez un fichier alias)

[root@newrbe ~]# vim /etc/customalias.sh

Ajouter ci-dessous lignes:

alias rm="echo remove contenet is restricted"
alias poweroff="echo Poweroff is restricted"
alias chmod="echo Change Permission is restristed"

Sauvegarder et quitter

Étape n ° 2 (Créer un chargeur de profil)

/etc/profile.d/ Cet emplacement contient des fichiers pour Bash Achion

[root@newrbe ~]# vim /etc/profile.d/customsource.sh

Ajouter ci-dessous lignes sous les fichiers Ces lignes bloqueront les commandes mentionnées pour les utilisateurs ci-dessous

if [ `whoami` == "user1" ] && [ `whoami` == "user2" ]; then
    source /etc/customalias.sh
fi

sauvegarder et quitter

Maintenant, sortie et relogin

Cordialement, -Mansur

1
Mansur Ali