Jak mogę sudo su i zmienić katalog zaraz po?

13

Chciałbym utworzyć alias, który robi coś takiego:

alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access'

Więc z mojego wiersza poleceń jestem zalogowany z użytkownikiem sudo i chciałbym wpisać alias userYYY, aby moja powłoka była zalogowana userYYYi pwdbyła zalogowana /a/path/that/only/userYYY/has/access.

Jak mogę to zrobić? Służy userYYYto do uruchamiania niektórych procesów i musi być coś w jego domu. Dlatego próbowałem zmienić jego $ HOME za pomocą:

sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 

A potem zrobiłem to z mojej powłoki z plikiem sudoer sudo su userYYY. Ale to nie zadziałało. Jedyne, co zadziałało, sudo su -l userYYYYto otworzyło nowy bash w mojej oryginalnej powłoce ( -bash-4.1$ ....).

Podsumowując, chcę po prostu uniknąć pisania 2 linii w mojej powłoce:

sudo su userYYY
cd /a/path/that/only/userYYY/has/access

Jakieś pomysły?

Mariano Martinez Peck
źródło

Odpowiedzi:

10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
Cyrus
źródło
wydaje się działać dobrze, ale nie jestem pewien, jak usunąć ten błąd lub czy jest to problem. używając Ubuntu 14.04LTS, zauważyłem, że wystąpił problem z bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
Debianem
1
właściwie, po dłuższym użyciu, zauważyłem, że terminal ginie dość często przy użyciu tej metody (rozłączaj około 15-30 min, regularnie, mój terminal trwa około 6 godzin przed rozłączeniem)
sonjz
Po prostu to wykopałem, to zachowanie wynika z poprawki bezpieczeństwa: unix.stackexchange.com/questions/65843/…
sonjz
pomogło mi to edytować .bashrcplik do sudotego cdmiejsca, w którym 2 oddzielne linie po prostu nie działały.
RozzA
2

Jedną z opcji byłaby edycja ~/.bashrcdocelowego użytkownika i dodanie cdtam:

cd /a/path/that/only/userYYY/has/access
biorę
źródło
0

Krótka odpowiedź - nie możesz. sudo suRozpoczyna nową powłokę, która musi wyjść, zanim dostanie się do cdpolecenia.

Jan
źródło
0

Dla mnie połączenie sudoi screenopracowane:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

To polecenie najpierw przełącza się na vagrantużytkownika. Następnie, jak vagrantzmienia katalog /vagranti wykonuje npm install.

czerasz
źródło
0

Wiem, że to nieco różni się od pierwotnego pytania, ale pomysł polega na uruchomieniu polecenia jako inny użytkownik bez wpisywania hasła, gdy zasady zabraniają sudo su <user> -c.

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
Chase T.
źródło