W małym skrypcie bash, który uruchamiam, próbuję utworzyć nowy katalog, który jest tworzony. Dodałem:
sudo chown $USER:$USER /var/www/$sitename
sudo chmod 775 /var/www/$sitename
po wierszu, w którym I mkdir ( sudo mkdir /var/www/$sitename
).
Z jakiegoś powodu chown nie wykonuje się. Mogę go wykonać ręcznie, ale po zapisaniu w pliku nie działa. Zauważyłem, że „chown” nie jest podświetlony w tym samym kolorze co „mkdir” i „chmod”, ale nie mogę zrozumieć mojego problemu.
Dlaczego chown tu nie działa?
Czy to problem $USER:$USER
?
EDYCJA Oto pełny skrypt. Jak przełączyć plik na użytkownika, który nie wykonał roota?
#!/bin/sh
#!/bin/bash
# New Site
cd /etc/apache2/sites-available/
echo "New site name (test.my):"
read sitename
echo "<VirtualHost *:80>
ServerAdmin admin@$sitename
ServerName $sitename
ServerAlias $sitename
DocumentRoot /var/www/$sitename
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/$sitename>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>" > $sitename.conf
sudo mkdir /var/www/$sitename
sudo chown $USER:$USER /var/www/$sitename
echo USER is $USER
sudo chmod 775 /var/www/$sitename
sudo a2ensite $sitename.conf
sudo apachectl restart
echo "New site created"
bash
shell-script
terminal
gnome-terminal
chown
Mosiądz Aparatura
źródło
źródło
getent group $USER
$USER
Zmienna jest ustawiana podczas logowania interaktywnego. Jak uruchomić skrypt - z sesji logowania lub przy użyciu crona lub demona?echo USER is $USER
: co wydrukuje?USER is root
. Czy wprowadzając dokonaną przez Ciebie edycję myślisz, że możesz wyjaśnić, w jaki sposób przeglądać plik komukolwiek, kto nie jest rootem, który wykonuje skrypt?Odpowiedzi:
Jeśli z jakiegoś powodu
$USER
nie jest ustawiony, możesz użyćid
polecenia, aby uzyskać tożsamość rzeczywistego użytkownika. Tak więc przy pierwszym użyciu$USER
zmiennej można użyć rozszerzenia powłoki do podania wartości domyślnej. Zmieńchown
wiersz w skrypcie na:Jeśli
USER
jest pusty lub nieuzbrojony, gdy jest uruchamiany, bash ustawiUSER
zmienną na wyjście/usr/bin/id -run
źródło
Gdy wywołuję mój skrypt
sudo
, ustawię się$USER
na rootowanie.Próbowałem,
chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename
ale nadal będzie to root.Przekonałem się, że jeśli korzystałem
who
z niego,awk
byłem w stanie uzyskać bieżącego użytkownika, który wywołał skryptsudo
.źródło
currentuser
(czasami) użytkownikom wielowierszowym, użyj$(who | awk 'NR==1{print $1}')
zamiast tego.chown -R $currentuser:$currentuser /usr
- nie działa - nadal pokazuje root: rootAby uprościć problem i skoro otrzymujesz zmienną sitename, dlaczego nie czytasz zmiennej nazwy użytkownika?
Dzięki temu upewnisz się, że wykonanie skryptu nie zależy od zmiennych środowiskowych udostępnionych w sposobie wykonywania skryptu.
źródło
Myślę, że jest tylko niewielka wina. sudo otwiera nową powłokę do wykonania polecenia, a po sudo użytkownik jest rootem. Może więc powinieneś użyć czegoś takiego:
ponieważ uważam, że MYUSER nie jest nadpisany przez system i powinien działać.
źródło
echo chown...
i przekonaj się.)