عن طريق روبي وSCP / SSH، وكيفية تحديد ما إذا كان يوجد ملف قبل تحميل نسخة

StackOverflow https://stackoverflow.com/questions/1625693

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا تحميل ملف إلى ملقم بعيد باستخدام SCP، ولكن ما هي الطريقة الصحيحة لرؤية ما إذا كان يوجد هذا الملف قبل القيام بذلك؟

هل كانت مفيدة؟

المحلول

وحذار الاختيار آنذاك تحميل: هذه ليست الذري وربما يؤدي إلى شروط السباق (أو نقاط الضعف TOCTOU)

.

وربما يكون المهاجمين أفضل طريقة لتعيين أذونات الملف على الملف الذي تم تحميله بحيث يكون قابل للكتابة (400 أو 444 أو ما شابه ذلك على أنظمة مثل UNIX)، ثم أي الإضافات اللاحقة إلى نفس اسم الملف فشلت ببساطة. (سوف تحصل على "تم رفض الإذن" العودة الذي يمكن أن يخضع إلى القليل من التفسير (على سبيل المثال لم تتغير أذونات الدليل تحميل؟)، وهذا هو الجانب السلبي واحدة إلى هذا الأسلوب).

وكيف تعيين الأذونات على الملف البعيد؟ إن أبسط طريقة لذلك هي ان مجموعة منهم على الملف المحلي ومن ثم الحفاظ عليها عند القيام التحميل. صافي روبي :: SCP README يقول أنه يمكن في الواقع "الحفاظ على سمات الملف عبر نقل".

نصائح أخرى

وأنت لا تستطيع أن تفعل هذا مع اللجنة الدائمة. ولكن يمكنك أن تفعل ذلك مع . انها تبدو شيئا مثل هذا:

require 'net/sftp'

remote_path = "/path/to/remote/file"
Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
  sftp.stat!(remote_path) do |response|
    unless response.ok?
    sftp.upload!("/path/to/local/file", remote_path)
  end
end

وهذا لا يحل بالتأكيد سؤالك وسوف تعطي معلومات اضافية كذلك. http://ruby.about.com/od/ssh/ss/netscp.htm

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top