Używanie su z poleceniami

4

Ubuntu Server 12.04

Na zdalnym serwerze, do którego ssh mam, skonfigurowałem specjalnego użytkownika z:

sudo adduser --system --disabled-login --disabled-password --group suser

uruchomić niektóre funkcje konserwacyjne. Czasami biorę udział w sesji logowania dla suser:

sudo su -l suser -s /bin/bash

aby wykonać niektóre zadania ... jednak szczególnie chcę móc uruchamiać niektóre polecenia git poprzez:

sudo su suser -c <COMMAND>

od mojego prawdziwego użytkownika i bez logowania do użytkownika.

Niestety nie byłem w stanie ustalić, w JAKI SPOSÓB to robię. Wypróbowałem jedyne sposoby, które mają dla mnie sens:

sudo su suser -c git clone https://example.com/repos/project.git
sudo su suser -c "git clone https://example.com/repos/project.git"
   or even
sudo su suser -c mkdir /home/suser/test
sudo su suser -c "mkdir /home/suser/test"

ale nic się nie dzieje i wracam do pytania. Czy ktoś może pomóc lub wyjaśnić, dlaczego nie jest to możliwe?

JDex
źródło

Odpowiedzi:

5

Problem polega na tym, że suserzostał utworzony z /bin/falsedomyślną powłoką. Dlatego, gdy próbujesz uruchamiać polecenia jak suserza pośrednictwem sudo, system próbuje je uruchomić za pomocą, /bin/false/która nie jest prawdziwą powłoką i zawiedzie. Możesz albo ustawić powłokę, suseralbo możesz określić ją w wierszu poleceń podczas uruchamiania sudo. Alternatywnie, można użyć sudo„s -uopcję.

  1. Użyj -u:

    sudo -u suser mkdir /home/suser/foo

    Działa to, ponieważ domyślnie sudoużywa /bin/bash(lub cokolwiek ustawiłeś jako domyślny $SHELL). Dlatego wykona polecenie jak suserza pomocą bash, więc polecenie zostanie poprawnie wykonane.

  2. suserDomyślna powłoka zestawu :

    sudo chsh suser 

    Wprowadź /bin/bash(lub cokolwiek wolisz) w wyświetlonym monicie. Powinieneś być teraz w stanie uruchamiać polecenia jako suser:

    sudo su suser -c "mkdir /home/suser/test"
  3. Ustaw powłokę jawnie:

    sudo su suser -s /bin/bash -c "mkdir /home/suser/test"
terdon
źródło
To jest to ... facepalm Miałem błędne wrażenie, że ponieważ nie robiłem -ltego, że zachowałem obecną powłokę i środowisko. Dziękuję Ci!
JDex,