/ / Właściciel zmian kota? - linux, bash, ssh

Cat zmienia właściciela? - linux, bash, ssh

Muszę edytować plik należący do roota przez ssh. Dodaję wpis do pliku, zachowuję pierwsze 9 wierszy i reorganizuję resztę do pliku tymczasowego. Wiem, że> nadpisuje to, co jest w pliku (i to jest to, czego chcę), ale muszę zachować roota jako właściciela pliku. Jak mogę to zrobić? Dzięki!

#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
cat temp > file;
rm -f temp
"

Odpowiedzi:

1 dla odpowiedzi № 1

To nie jest cat to zmienia właściciela, to jest sed. Kiedy używasz sed -i, robi coś takiego:

mv file file.bak
sed "$a$user" file.bak > file
rm file.bak

Jak widzisz, tworzy to nowy plik z nazwą oryginalnego pliku i jest własnością użytkownika, który tworzy plik.

Jeśli chcesz tego uniknąć, utwórz kopię oryginalnego pliku zamiast używać -i opcja.

cp file /tmp/file.$$
sed "$a$user" /tmp/file.$$ > file
rm /tmp/file.$$

Albo po prostu możesz to zrobić sed do twojego rurociągu:

sed "$a$user" file | head -n 9 file ; tail -n +10 file | sort > temp
cat temp > file
rm temp

0 dla odpowiedzi nr 2

Minęło trochę czasu odkąd napisałem w BASH, ale myślę, że punktem wyjścia będzie

chown root $file // if you have a variable with the file name in

lub

chown root thefile.txt //if you want it hard coded;

Inna zmienna w równaniu brzmi: kto ma właściciela kota aplikacji? Myślę, że każdy, kto jest właścicielem uruchomionej aplikacji, decyduje o tym, w jaki sposób własność plików, z których korzysta, jest określona

może mógłbyś też spróbować

$ sudo cat temp > file

ponieważ sesja należałaby wtedy do katalogu głównego, a zatem wyjście należałoby do katalogu głównego ???


0 dla odpowiedzi № 3

Rozumiem, że użytkownik, który się loguje, nie może zostać rootem? Więc najlepszym rozwiązaniem jest użycie dd

dd if = tmpfile of = outfile

oczywiście wykonuj wszystkie zamówienia, seding, awking i greping w pliku tmp. dd w tym użyciu jest równoważny> bez tworzenia nowego pliku


0 dla odpowiedzi nr 4
#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
sudo mv temp file;
sudo chown root file
"

Będzie to działać lepiej, jeśli na komputerze xxxx użytkownik xxxx, którego zalogujesz, ma dostęp do sudo bez hasła. Możesz to zrobić, umieszczając ten wpis w pliku / etc / sudoers:

xxxx ALL=NOPASSWD: ALL