php &

2 Cevap php

itiraf etmeliyim, ben gerçekten tamamen * nix dosya sistemi izni modeli var asla. oh, rwxrwxrwx şeyler çok karmaşık değildir, ancak programlar yeni dosyaları oluşturmak ve ben onları işleyebilir nasıl zaman ben kolayca karışık olsun.

benim şimdiki sorun ftp ve php üzerinde yüklenenler (özel bir sunucu üzerinde ve veri gerçekten kritik değildir dosya yapan bir (kapalı kaynak) java-Appletinizin karışımı, yani dünya-writeability hakkında tüm çok endişeli değilim .)

ftp (1000) ve apache / php (81): yani, ben iki kullanıcımız var. grupları uyuşmuyor, yani yanılmıyorsam eğer, temelde "diğerleri" demektir.

ftp ait 0777 için ayarlanmış bir "ithalat" dizin.

Bir ziyaretçi yükleme sayfasını acesses varsa, onun adı adını bir alt benim komut dosyası tarafından oluşturulur. en ziyaretçiler adı "foo", bu yüzden 0777 için set "import / foo", kullanıcı 81/php var, diyelim.

yanında, ziyaretçi bu dizinde (test.jpg) için bir dosya yüklemek için java uygulaması kullanır. r - -, kullanıcı ftp dosya izinleri şimdi rw-r.

first question

the first thing i don't understand is: i'm able to unlink that file through php.
why? the users don't match, and the file isn't world writeable.
is this because of the parent directories world-write permission? understandably, i can't chown or chmod through php.

şimdiye kadar hiçbir sorun, uzun okudum ve everythings tamam bağlantısını gibi çünkü.

second question

java uygulaması güzel tüm dizinleri, upload yapabiliyor. Ben bunu eğer, yeni alt ithalat / foo / test izinleri rwxr-xr-x/ftp vardır. Bu dizindeki dosyaları rw-r--r--/ftp vardır.

şimdi sansızım. i (i başarılı bir şekilde yapmak okuma dışında) bu dosyalar, hiçbir Unlinking, hayır chmod / Chowning ile bir şey yapamaz. onlar sadece oturup ve Diskspace yalayıp yutmak.

bu nedenle, yeni dosyalar var varsayılan izinleri arkasındaki plan ne? benim tahminim bu sürece oluşturma komut dosyası başka bir şey onları chmodlayın değil, Umask yoluyla ayarlanmış iznine sahip olduğunu. Haklı mıyım?

third question

ben ne bu konuda ne yapabilirim? demek, mantıklı bir kişi ne yapardı? i / i ftp kullanıcı için izin maskesini değiştirmek gerekir mi? (Ben sadece dün Umask öğrendim). Bu tüm ftp trafiği etkileyecek gibi ben bu konuda çok rahat değilim, değil mi? Ayrıca, sunucu adanmış ama bir yönetici değilim, bu yüzden benim erişimi kısıtlanmış edilir.

i just had another idea. before starting this post i read up on the basic linux permission stuff. first, the sticky bit isn't set anywhere in the directory chain. and then, there it was: the "set user ID bit".
so, my current plan is to write a simple shell script with owner ftp that is other-executable with setuid. the script just transfers the file in the import directories ownership to user php.
then, after each import i just exec() that file from my php-script and process files further.

O çalışmak istiyorsunuz? ve daha önemli: bu temiz ve yasaldır? veya sysadmin kafamda bir ödül koymak istiyorsunuz?

çok THX!

update: ben sadece (bir ftp bağlantısı üzerinden) WinSCP ile uid bit (4755) ayarlamak için çalıştı, ancak bu şekilde çalışmıyor - o (diğer bit olsun sadece uid bit "unutmak" gibi görünüyor ) ayarlayın. neden? neden sahibi uid kendisi ayarlayamıyor? bu sunucu-özel ya da genel durum nedir?

update 2:
wikipedia says it all

Yürütülebilir kabuk komut uygulandığında nedeniyle güvenlik açıkları ihtimalinin artması nedeniyle, birçok işletim sistemleri setuid niteliğini görmezden.

root uid-bit ayarlamak için hala mümkün mü?

2 Cevap

First answer

Doğru, sen dosyayı bağlantısını böylece dizini değiştirmek için izniniz. Bu dosya okunabilir ya da yazılabilir olup olmadığı önemli değildir.

Second answer

Script / applet sonra başka bir şey için dosya izinlerini chmodlarını sürece Evet kullanıcının varsayılan umask'ı kullanılan olacağına doğru

Third answer

Ftp için varsayılan izin maskesini ayarlama basit çözüm, ancak bu daha sonra ftp kullanıcı tarafından oluşturulan tüm dosyaları etkiler dediğiniz gibi. Bu kullanıcı sadece uygulaması (ve gerçekten olması gerektiği) üzerinden yükleme için kullanılan sonra bu gerçekten derim bir sorun değildir.

Diğer seçenek (önermek gibi) webroot üzerinde bir yerlere FTP yükleme alanından dosyaları (ve belki virüs bunları tarama vb) sahibi / chmoding, bir komut yürüten bir cron iş çalışan sahip olmaktır.

Readonly Apache bu dosyaları sahip belki de mantıklı bir çözüm için gelin yardımcı olacağını açıklayan bir konudur (ya da FTP kök web kök altında değil mi? Gerçektir) neden devlet yok? Genellikle size ilk onaylanıp sürece kullanıcının size verdiği şey güven istemiyorum.

EDIT - sadece şeyleri zorlaştırıyor makinenin bir yönetici değilsin görüldü.

ben bugün ne öğrendim: setuid bit genellikle komut için devre dışı bırakılır.

Ben yerleşti ettik çözüm: apache / php ftp-ya da apache-kullanıcı olarak çalışabilir certain scripts (webroot dışında bir dizindeki bütün komut dosyaları) için sudoer-haklarını alır. i sonra sistem / exec / vb php üzerinden sudo ile bu komut arayabilirsiniz.

i sudo bu şekilde yapılandırılmış olabilir bilmiyordum. amazing