Piszę skrypt (właściwie kombinację skryptów i makefile), który instaluje zależności zewnętrzne: niektóre apt-getpolecenia, niektóre gitklonowanie, 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:
gitrepos, które klonuję, otrzymujęrootjako właściciel, co oznacza, że nie mogę ich później modyfikować bezsudolubchown- skrypty, które dodają użytkowników do grup, od czasu
whoamipowrotu 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 sudohasł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 -vna 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 -kaby zamknąć sesję administratora
su $SUDO_USER -c commandpoleceń jako normalny użytkownik.
SUDO_USERzmienną ś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ć.