Kiedy SCP'uje się na mój serwer Fedory, użytkownik ciągle otrzymuje błędy związane z niemożnością modyfikacji znaczników czasu pliku („ustaw czas: operacja niedozwolona”). Użytkownik nie jest właścicielem pliku, ale nie możemy chown
przesyłać plików do tego użytkownika ze względów bezpieczeństwa. Użytkownik może sudo
, ale ponieważ dzieje się to za pośrednictwem klienta SCP / FTP, również nie ma na to sposobu. I wreszcie, nie chcemy dawać temu użytkownikowi uprawnień roota, aby pozwolić mu na użycie synchronizacji takiej jak rsync lub WinSCP, która musi ustawić znaczniki czasu.
Użytkownik należy do grupy z pełnymi rw
uprawnieniami do wszystkich odpowiednich plików i katalogów. Czy są jakieś przemyślenia na temat tego, jak udzielić użytkownikowi uprawnień do touch -t
tych konkretnych plików bez chown
ich udostępniania ?
Dalsze informacje Wszystko to ma związek z włączeniem programowania PHP w scenariuszu jednego programisty (tj. Bez SCM). Próbuję współpracować z Eclipse lub NetBeans, aby pracować nad lokalną kopią witryny opartej na PHP (WordPress), jednocześnie pozwalając użytkownikowi na „natychmiastowe” wyświetlenie podglądu jego zmian na serwerze programistycznym. Użytkownik będzie pracował zdalnie. Do tej pory wszystkie próby automatycznej synchronizacji nie powiodły się - nawet przy użyciu WinSCP w trybie „obserwuj folder”, gdzie monitoruje folder lokalny i próbuje przesłać wszelkie zmiany aż do błędu katalogu zdalnego, ponieważ zawsze próbuje ustawić datę / znacznik czasu .
Użytkownik ma dostęp do sudo, ale powiedziano mi, że naprawdę nie jest dobrym pomysłem praca w trybie „root”, więc nie chciałem zalogować się jako root, aby wykonać tę pracę. Poza tym nie powinno to być konieczne. Chciałbym, aby jakiś inny, nieużytkownik mógł zrobić to samo - używając informacji o koncie, nawiązać połączenie FTP i móc pracować zdalnie za pośrednictwem synchronizacji. Więc rozwiązanie musi działać dla kogoś bez dostępu do roota.
To, co mnie zdumiewa, to poziom trudności. Wszystkie te oprogramowanie (NetBeans, Eclipse, WinSCP) są zaprojektowane tak, aby umożliwić synchronizację i wszystkie próbują zapisać znacznik czasu. To musi być możliwe. WinSCP ma opcję wyłączenia „ustaw znacznik czasu”, ale ta opcja staje się niedostępna (zawsze „włączona”) po wybraniu opcji monitorowania / synchronizacji folderu. Więc to dostaje się coś, co jest dość standardowe.
Biorąc pod uwagę, że jestem kompletnym idiotą, jeśli chodzi o Linuksa i jestem deweloperem „administratorem serwera”, mogę tylko założyć, że to coś idiotycznego, co robię lub że mam (źle) skonfigurowane.
Podsumowanie W skrócie, chcę, aby wszyscy użytkownicy, którzy mają dostęp grupowy do / z katalogu, mogli zmienić znacznik czasu plików w tym katalogu za pośrednictwem SCP.
źródło
root
grupy:root
grupa nie ma specjalnych uprawnień, tylkoroot
użytkownik.Odpowiedzi:
Dlaczego to nie działa
Podczas próby zmiany czasu modyfikacji pliku za pomocą
touch
lub bardziej ogólnie za pomocą wywołania systemowegoutime
, istnieją dwa przypadki.Dlaczego to zwykle nie ma znaczenia
--omit-dir-times
(-O
).Rozwiązania
Ok, zatrzymaj się tutaj. To, że istnieje jeden programista, nie oznacza, że nie powinieneś używać SCM. Powinieneś używać SCM. Poproś programistę, aby sprawdził plik i dał mu możliwość naciśnięcia przycisku „wdróż”, aby pobrać pliki z SCM do katalogu na żywo.
Nie ma absolutnie żadnego technicznego powodu, dla którego nie powinieneś używać SCM, ale może być ludzki powód. Jeśli osoba pracująca nad tymi plikami nazywa się „programistą”, powinien używać SCM. Ale jeśli jest to osoba nietechniczna, która wpycha dokumenty, SCM może być zbyt skomplikowane. Więc dalej pchaj pliki przez FTP lub SSH. Można to zrobić na trzy sposoby.
rsync
ma opcję niesynchronizowania czasów. Scp nie zrobi tego, chyba że to powiesz. Nie znam WinSCP, ale prawdopodobnie też może.apache
użytkownika, wówczas zwykłym podejściem byłoby zezwolenie użytkownikowi na SSH dostęp jakoapache
. Proste podejście jest, aby użytkownik utworzyć prywatny klucz SSH i dodać odpowiedni klucz publiczny~apache/.ssh/authorized_keys
. Oznacza to, że użytkownik będzie mógł uruchamiać dowolne polecenia jakoapache
użytkownik. Ponieważ i tak dajesz użytkownikowi uprawnienia do sudo, w twoim przypadku nie ma to znaczenia. Możliwe jest, ale nie tak łatwe, nałożenie dodatkowych ograniczeń (potrzebujesz osobnego wpisu bazy danych użytkownika o innej nazwie, tym samym identyfikatorze użytkownika, ograniczonej powłoce i więzieniu chroot; szczegóły w osobnym pytaniu, choć może to już być omówione na tej stronie lub na usterce serwera ).¹ Lub, dla pustego pliku, napisz bajt, a następnie obetnij.
² Z wyjątkiem dodatkowych komplikacji, ale żadne, o których wiem, nie ma tutaj zastosowania.
źródło
apache
- wtedy mogliby ustalić czasy. Zobacz moją poprawioną odpowiedź, aby znaleźć właściwe rozwiązanie i kilka nieoptymalnych.Możesz skonfigurować rsync do używania sudo na zdalnym końcu w następujący sposób:
źródło
sudo rsync
jest bardzo trudne do ograniczenia. Zasugerowałem to tylko dlatego, że OP powiedział, że użytkownik ma już dostęp do sudo.