Piszę skrypt (właściwie kombinację skryptów i makefile), który instaluje zależności zewnętrzne: niektóre apt-get
polecenia, niektóre git
klonowanie, budowanie, instalowanie, dodawanie użytkowników do grup, ...
Niektóre operacje w tych skryptach wymagają uprawnień administratora, inne nie.
Do tej pory prowadziłem cały proces make z sudo, ale ma on pewne wady:
git
repos, które klonuję, otrzymujęroot
jako właściciel, co oznacza, że nie mogę ich później modyfikować bezsudo
lubchown
- skrypty, które dodają użytkowników do grup, od czasu
whoami
powrotu nie wiedzą, którego użytkownika dodaćroot
Jaki jest najlepszy sposób działania jako superużytkownik tylko tych poleceń, które go wymagają? Idealnie byłoby, gdyby cały proces wymagał ode mnie wpisania sudo
hasła, ale tylko raz na samym początku procesu instalacji. Wtedy zapomniałby o tym na samym końcu, ale do tego czasu należy go cały czas utrzymywać (może to potrwać kilka godzin).
Rozwiązania, które znalazłem w Internecie, obejmują:
sudo -v
na początku skryptu, ale jeśli dobrze rozumiem, ten limit czasu. Mój skrypt może działać przez kilka godzin- uruchamianie skryptu za pomocą
sudo
, ale polecenia, które nie wymagają administratorasudo -u $(logname) <command>
. To właśnie robię teraz, ale wydaje się, że powinno być na odwrót.
Idealnie chciałbym, aby mój skrypt:
- poprosić o poświadczenia administratora
- uruchom normalne polecenia jako zalogowany użytkownik
- uruchom polecenia sudo z poświadczeniami wprowadzonymi w kroku 1
sudo -k
aby zamknąć sesję administratora
su $SUDO_USER -c command
poleceń jako normalny użytkownik.
SUDO_USER
zmienną środowiskową. Jeśli jest obecny, będzie on zawierał nazwę użytkownika wywołującego sudo. Możesz więc (jako root) przeszukać $ SUDO_USER: $ SUDO_GID $ twoje_pliky. Podobnie możesz sprawdzić te zmienne, aby twoje komendy adduser wiedziały, którego użytkownika dodać.