Odpowiedzi:
Co powiesz na użycie su
polecenia?
$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout
Jeśli chcesz zalogować się jako root, nie musisz podawać nazwy użytkownika:
$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout
Zasadniczo można użyć sudo
do uruchomienia nowej powłoki jako żądany użytkownik; -u
flaga pozwala określić nazwę użytkownika, który ma:
$ whoami
user1
$ sudo -u user2 zsh
$ whoami
user2
Istnieją bardziej okrężne sposoby, jeśli nie masz dostępu do sudo, takie jak ssh nazwa użytkownika @ localhost, ale sudo
prawdopodobnie jest najprostszy, pod warunkiem, że jest zainstalowany i masz pozwolenie na jego użycie.
su - [user]
mogą być przydatne - dodatkowa kreska daje powłokę logowania.
echo >>/dev/stderr
przy logowaniu za pomocą su --login ...
jakiejkolwiek wskazówki? Znalazłem ten btw unix.stackexchange.com/questions/38538/…
env
to, zobaczyłem, że wszystko było w porządku, a inspekcja wizualna może się udać; I jeszcze jedna rzecz była błędna: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on
plik ~ / .Xauthority` jest: -rw-------
. Zrobiłem kopię i to pozwoliło mi uruchomić gedit jako eksperyment.
Zasadniczo używasz sudo
do uruchamiania nowej powłoki jako użytkownik, którego chcesz; -u
flaga pozwala określić nazwę użytkownika, który ma:
[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody
Istnieją bardziej okrężne sposoby, jeśli nie masz dostępu do sudo ssh username@localhost
, ale myślę, że sudo
jest to prawdopodobnie najprostsze, jeśli jest zainstalowane i masz pozwolenie na korzystanie z niego
sudo -s
daje powłokę jak su
, sudo -i
symuluje logowanie jak su -
. -u $user
Oczywiście można go połączyć z .
$ whoami
To polecenie drukuje bieżącego użytkownika. Aby zmienić użytkowników, będziemy musieli użyć tego polecenia (a następnie hasła użytkownika):
$ su secondUser
Password:
Po wprowadzeniu prawidłowego hasła zostaniesz zalogowany jako określony użytkownik (co możesz sprawdzić, uruchamiając ponownie) whoami
.
Jeśli używasz Ubuntu i jeśli użytkownik, którego chcesz się zalogować, nie ma ustawionego hasła:
sudo su - username
Wprowadź własne hasło i powinieneś zostać ustawiony. Oczywiście wymaga to, aby użytkownik miał uprawnienia do uzyskania uprawnień roota sudo
.
Aby przełączyć sesję terminala na innego użytkownika, w przypadku gdy ten użytkownik nie może wrócić do pierwotnego użytkownika, użyj exec:
$ | # exec su - [nazwa użytkownika]
To technicznie zaloguje nowego użytkownika w procesie nowego okresu i zamknie bieżącego. W ten sposób, gdy użytkownik próbuje wyjść lub Ctrl-D, terminal zostanie zamknięty, jakby to ten użytkownik go utworzył, tj. Użytkownik nie może wrócić do pierwotnego terminu użytkownika. Niby bezcelowe, biorąc pod uwagę, że wciąż mogą po prostu rozpocząć nową sesję terminalową i automatycznie znajdować się w pierwotnym loginie użytkownika, ale tak jest.
EDYCJA: Aby uzyskać wartość, możesz użyć komendy linux vlock w swoim ~ / .bashrc, aby domyślnie zablokować sesje terminali, wymagając hasła użytkownika sesji użytkownika do odblokowania. To w pewien sposób zapobiegłoby wspomnianemu terminowi restart w oryginalnym kontekście użytkownika, biorąc pod uwagę, że termin nie jest tworzony przy użyciu domyślnego ~ / .bashrc użytkownika, zgodnie z jego konfiguracją.
Jeszcze inną drogą jest uruchomienie nowej powłoki jako inny użytkownik (inny niż root), aby uruchamiać komendy jako ten użytkownik.
ubuntu@aws-ip:~$ sudo -u mongodb bash #<-- or zsh, etc...
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork
Przykładem tego jest mongodb
użytkownik. Podczas wdrażania podzielonego klastra MongoDB wszystkie niezbędne procesy muszą działać jako mongodb
i nie jest konieczne (lub całkowicie wygodne) demonizowanie procesów za pomocą skryptów inicjujących dla kilkudziesięciu węzłów.
Pozwól nam to zrobić poprawnie: jesteś zalogowany jako Użytkownik A i chcesz „zalogować się” jako Użytkownik B, aby uruchomić niektóre polecenia, ale po zakończeniu chciałby wrócić do Użytkownika A. Dla uproszczenia zakładam, że chcesz uruchomić ls -l / tmp jako UserB. Jeśli nie chcesz opuszczać bieżącej powłoki UserA, a raczej uruchomić polecenie jako UserB i nadal pozostać zalogowanym jako UserA, powinieneś to zrobić:
su - UserB -c "ls -l /tmp" <-- Just an example
Zakłada się, że znasz hasło dla UserB. Jeśli jednak nie znasz hasła użytkownika B, musisz znać hasło roota. Następnie:
sudo su - UserB -c "ls -l /tmp" <-- UserB's pw not needed here
Jeśli wolisz tymczasowo zalogować się jako Użytkownik B, aby uruchomić wiele poleceń, po prostu wykonaj:
sudo su - UserB
To da ci nową powłokę dla UserB (sprawdź to, wpisując id). Po zakończeniu możesz zrobić ctrl-d i wrócić do swojego loginu.
Jeśli chcesz uruchomić tylko jedno polecenie, możesz użyć sudo:
sudo -u username command
$XDG_RUNTIME_DIR
w szczególności), które doprowadzały mnie do szału. -> unix.stackexchange.com/questions/354826/…