Kullanıcı -t'ye dokunamaz


10

Fedora sunucuma SCP gönderirken, kullanıcı dosya zaman damgalarını değiştirememe konusunda hatalar almaya devam eder ("ayarlanan saat: işleme izin verilmez"). Kullanıcı dosyanın sahibi değil, ancak chowngüvenlik nedeniyle bu kullanıcıya dosya gönderemiyoruz . Kullanıcı bunu yapabilir sudo, ancak bu bir SCP / FTP istemcisi aracılığıyla gerçekleştiği için bunu yapmanın da bir yolu yoktur. Ve son olarak, bu kullanıcıya root erişimi vermek zorunda değiliz, sadece rsync veya WinSCP gibi zaman damgalarını ayarlaması gereken bir senkronizasyon kullanmasına izin vermek zorunda değiliz.

Kullanıcı, rwilgili tüm dosya ve dizinlerde tam izinlere sahip bir grubun parçasıdır . Kullanıcıya touch -tbu dosyalara izin vermeden nasıl izin verileceği hakkında bir chownfikriniz var mı?

Ek Bilgi Tüm bunlar tek bir geliştirici senaryosunda PHP geliştirmeyi etkinleştirmekle ilgilidir (yani: SCM olmadan). Kullanıcı "anında" geliştirme sunucusunda yaptığı değişiklikleri önizleme izin verirken, PHP tabanlı (WordPress) sitenin yerel bir kopyası üzerinde çalışmak için Eclipse veya NetBeans ile çalışmaya çalışıyorum. Kullanıcı uzaktan çalışacaktır. Şimdiye kadar, otomatik senkronizasyona yönelik tüm girişimler başarısız oldu - yerel bir klasörü izlediği ve her zaman tarih / zaman damgasını ayarlamaya çalıştığı için uzak klasör hatasına kadar herhangi bir değişiklik yüklemeye çalıştığı "izleme klasörü" modunda WinSCP kullanıldığında bile başarısız oldu .

Kullanıcı sudo erişimi var, ama 'root' altında çalışmak gerçekten iyi bir fikir olmadığı söylendi, bu yüzden sadece bu işi yapmak için kök olarak giriş yapmak istemiyordum. Ayrıca, gerekli olmamalıdır. Süper kullanıcı olmayan başka bir kullanıcının da aynı şeyi yapabilmesini isterdim - hesap bilgilerini kullanarak, bir FTP bağlantısı kurabilir ve senkronizasyon yoluyla uzaktan çalışabilirim. Bu yüzden çözümün root erişimi olmayan biri için çalışması gerekir.

Beni şaşırtan şey ne kadar zorluk çektiğim. Tüm bu yazılımlar (NetBeans, Eclipse, WinSCP) senkronizasyona izin vermek için tasarlanmıştır ve hepsi zaman damgasını yazmaya çalışır. Bu yüzden mümkün olmalı. WinSCP, "zaman damgasını ayarla" seçeneğini kapatma seçeneğine sahiptir, ancak klasörü izleme / senkronize etmeyi seçtiğinizde bu seçenek kullanılamaz (her zaman "açık") olur. Bu yüzden oluyor var oldukça standarttır şey olmaya.

Linux söz konusu olduğunda tam bir aptal olduğumu ve dev "sunucu yöneticisi" olduğumu göz önünde bulundurduğumda, bunun sadece yaptığım ya da yapılandırdığım (aptal) bir aptalca şey olduğunu varsayabilirim.

Özet Özetle, bir dizine grup r / w erişimi olan tüm kullanıcıların, bu dizindeki dosyalar üzerindeki zaman damgasını SCP ile değiştirmesini istiyorum.


1
Dosya sisteminiz komik bir şeyle mi monte edildi? ACL kullanıyor musunuz? Normalde bu grup üyeliği ile mümkün olur.
Caleb

5
Temel olarak sisteminiz size "-t'ye dokunamazsınız" diyor.
boehj

@Caleb: Hayır, yalnızca sahibi değilseniz geçerli tarihe ayarlayabilirsiniz. @Tom: Tarihe uyulması önemli mi? Gereksinimleri biraz genişletebilir misiniz: kullanıcı dosyaya yazabiliyorsa, dosyalara sahip olması neden önemlidir? Genellikle, bu durumlarda, dosyaya en son yazan kişi ona sahiptir.
Gilles 'SO- kötü olmayı bırak'

@Tom: “Bu kullanıcıya root erişimi vermek istemiyoruz” ve “Kullanıcı sudo yapabilir” arasında açık bir çelişki var, bu kısmı daha iyi açıklayabilir misiniz? rootGrubu kullanımınızla ilgili olarak : rootGrubun özel izinleri yoktur, yalnızca rootkullanıcı izin verir .
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


10

Neden çalışmıyor?

Bir dosyanın değiştirme süresini touchveya daha genel olarak temel alınan sistem çağrısı ile değiştirmeye çalıştığınızda utime, iki durum söz konusudur.

  • Dosyanın değişiklik zamanını belirli bir zamana ayarlamaya çalışıyorsunuz. Bu, dosyanın sahibi olmanızı gerektirir. (Teknik olarak, sürecin etkin kullanıcı kimliği dosyanın sahibi olmalıdır .²)
  • Dosyanın değişiklik zamanını geçerli saate ayarlamaya çalışıyorsunuz. Bu, yalnızca dosyaya yazma izniniz varsa çalışır. Bu istisnanın nedeni, aynı değere sahip dosyanın mevcut bir baytının üzerine yazarak yine de aynı etkiyi elde edebilmenizdir¹.

Bu neden önemli değil

  • Dosyaları ftp, scp, rsync vb. İle kopyaladığınızda, kopya, kopyayı kimin yaptığını içeren yeni bir dosya oluşturur. Bu nedenle, fotokopi makinesinin dosyanın zamanlarını ayarlama izni vardır.
  • Rsync ile mevcut dizinlerin zamanını ayarlayamazsınız: bunlar bir dosyanın içinde en son senkronize edildiği saate ayarlanacaktır. Çoğu durumda, bu önemli değil. Rsync'e, --omit-dir-times( -O) iletisini kullanarak dizin zamanlarıyla uğraşmamasını söyleyebilirsiniz .
  • Sürüm kontrol sistemleri ile, revizyon tarihleri ​​dosyaların içinde saklanır; dosyalardaki meta veriler çoğunlukla önemsizdir.

Çözümler

Tüm bunlar, tek bir geliştirici senaryosunda PHP geliştirmeyi etkinleştirmekle ilgilidir (yani: SCM olmadan).

Tamam, orada dur. Tek bir geliştirici olması, SCM kullanmamanız gerektiği anlamına gelmez. SCM kullanıyor olmalısınız. Geliştiricinin bir dosyayı teslim etmesini sağlayın ve ona SCM'den canlı dizine göz atmak için bir “dağıt” düğmesine basmasını sağlayın.

SCM kullanmamanız için kesinlikle teknik bir neden yoktur, ancak insani bir neden olabilir. Bu dosyalar üzerinde çalışan kişi kendisini "geliştirici" olarak şekillendiriyorsa, SCM kullanıyor olmalıdır. Ancak bu, dokümanları içeri iten teknik olmayan bir kişi ise, SCM çok karmaşık olabilir. Bu yüzden dosyaları FTP veya SSH üzerinden aktarmaya devam edin. Bunun üç yolu vardır.

  • Zamanları gerçekten senkronize etmeniz mi gerekiyor? Yukarıda belirtildiği gibi, rsynczamanları senkronize etmeme seçeneği vardır. Scp bunu söylemedikçe yapmaz. WinSCP bilmiyorum ama muhtemelen de olabilir.
  • Yaptığınız işi yapmaya devam edin, sadece zamanlarla ilgili mesajları görmezden gelin. Dosyalar hala kopyalanıyor. Bu iyi bir seçenek değildir, çünkü hataları görmezden gelmek her zaman risklidir. Ancak teknik olarak mümkündür.
  • apacheKullanıcının sahip olduğu dosyaları doldurmak için esnekliğe ihtiyacınız varsa , genel yaklaşım, kullanıcının SSH'sine erişimine izin vermek olacaktır apache. Kolay yaklaşım kullanıcı bir SSH özel anahtarı oluşturmak ve karşılık gelen kamu anahtarı eklemek sahip olmaktır ~apache/.ssh/authorized_keys. Bu, kullanıcının rastgele komutları apachekullanıcı olarak çalıştırabileceği anlamına gelir . Yine de kullanıcıya sudo hakları vermekte sorun yaşamadığınız için durumunuz önemli değildir. Daha fazla kısıtlama koymak mümkündür, ancak o kadar kolay değildir (farklı bir adla, aynı kullanıcı kimliğine, kısıtlanmış bir kabuğa ve bir kroke hapishanesine sahip ayrı bir kullanıcı veritabanı girişine ihtiyacınız vardır; ancak bu zaten ele alınmış olabilir. bu sitede veya Sunucu Hatası üzerinde ).

¹ Veya boş bir dosya için bir bayt yazın ve ardından kısaltın.
² Ek komplikasyonları engellemek, ama bildiğim hiçbiri burada geçerli değil.


İlginç açıklama için teşekkürler Gilles. Ancak kullanım durumu hakkında ne kadar açık olabileceğimden emin değilim. NetBeans her senkronizasyon yaptığımda "bağlantıyı kesemiyorum" hataları atmaya devam ediyor (dosya doğru bir şekilde aktarılmış ve sunucuda doğrulanmış olmasına rağmen); WinSCP 'ayarlanan zaman: işleme izin verilmiyor' hataları veriyor; Bir dosyanın yıldızını kaldırdığımda gelecekte bir zaman damgasını ayarlayamama konusunda uyarılar alıyorum. Bunun ötesinde sorunun nerede olduğunu bilmiyorum. Sadece yerel bir uzak dizin ile senkronize etmek istiyorum. SCP / FTP ile sorun ve zaman damgaları gibi görünüyor. Bu yardımcı olur mu? Muhtemelen değil.
Tom Auger

@Tom: Neden kullanıcıların sadece dosyalara sahip olamadığını anlamıyorum.
Gilles 'SO- kötü olmayı bırak'

Bazı dosyalar Apache (örneğin, uploads dizini) tarafından sahip olunması gerekir, bu yüzden sadece biri dizindeki bazı dosyaları üzerinde çalışıyor, çünkü sahibinin değiştirilmesini olamaz. Söyledikleriniz mantıklı değil - FTP kullanarak bir dosyayı aşırı yazdığımda, sahibin mutlaka değişmesi gerekmez. Bu davranışı değiştirme gereğini görmüyorum.
Tom Auger

@Tom: Sahip yalnızca bunlar varolan dosyalar olduğu için değişmez. Kullanıcıların neden dosya yüklemesine izin vermediğini anlamıyorum apache- o zaman zaman ayarlayabilirler. Doğru çözüm ve birkaç yetersiz çözüm için gözden geçirilmiş cevabımı görün.
Gilles 'SO- kötü olmayı kes'

Bu soruya sadık kaldığınız için teşekkürler Gilles. SVN veya bir varyant kullanmak geliştirme perspektifinden düşüktür. Web geliştirmeyi uzaktan yapan herkes, sürecin genellikle mikro-artımlı olduğunu söyleyebilir - özellikle görsel olarak şekillendirirken - böylece her 30-60 saniyede bir taahhütte bulunuyorsunuz. IDE'nizden sürekli olarak çıkmanız, bir taahhütte bulunmanız ve ardından tarayıcınızı önizlemeniz gerekiyorsa, basit bir işlem olması gereken şeylere bir ton ek yük eklersiniz. SVN, yalnızca bir sitenin aynı bölümünde birden çok geliştirici çalışırken bağlamda anlamlıdır. Programlamadan farklı.
Tom Auger

2

Rsync'i uzak uçta sudo kullanacak şekilde şu şekilde ayarlayabilirsiniz:

rsync -ave ssh --rsync-path="sudo rsync" /source/ user@host:/dest/

Sudo kuralı ne olurdu? Sadece rsync'e izin vermek kullanıcının rasgele dosyaların üzerine yazmasına izin verecektir. Argüman sınırlamalarını doğru yapmak oldukça zordur ve yine de burada bir sarmalayıcı komut dosyası ile teknik olarak mümkün olan ancak kolay olmayan rsync girdisine kısıtlamalar koymanız gerektiğini düşünüyorum.
Gilles 'SO- kötü olmayı bırak'

Haklısın, izin vermek sudo rsyncçok zor. Ben sadece OP zaten kullanıcının sudo erişimi olduğunu söyledi çünkü önerdi.
Caleb

Teşekkürler - bu ilginç, geliştirici bir Windows kutusunda olmasına rağmen, bu yüzden rsync gitmek için en iyi yol olduğundan emin değilim. Yine, yazıma yapılan düzenlemede bahsettiğim gibi, bu çözümün, belirli bir dizine sahip olan gruba ait birinin ötesinde, bazı ayrıcalıklı kullanıcılar için değil, ortalama bir kullanıcı için çalışmasını istiyorum.
Tom Auger

Bakmak için bir sonraki şey ACL (Erişim Kontrol Listeleri) kurmak olduğunu düşünüyorum, ancak bu alanda çok az deneyimim var, bu yüzden belki bazı guru bir cevap ekleyebilir ve bunun nasıl ve nasıl yapılacağını açıklayabilir.
Caleb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.