- GitHub Actions'ta
run: bloğunu çalıştırırken kullanılan kabuk shell anahtar sözcüğüyle belirtilebiliyor
- Workflow içinde isteğe bağlı olsa da, tek tek action tanımlarında zorunlu bir alan
- Varsayılan değer işletim sistemine göre otomatik atanıyor: Linux/macOS için
bash, Windows için pwsh
shell: bash açıkça ayarlanırsa, aşağıdaki varsayılan bayraklar da ekleniyor: --noprofile --norc -eo pipefail
Herhangi bir çalıştırılabilir dosya shell olarak belirtilebiliyor
- Genelde
shell için kullanılabilecek değerlerin sınırlı olduğunu düşünmek kolay
- Gerçekte
$PATH içindeki tüm çalıştırılabilir dosyalar kabuk olarak kullanılabiliyor
- Çalıştırma komutu dosya girdisi almıyorsa, özel bir argüman olan
{0} geçirilmesi gerekiyor
{0} GitHub tarafından otomatik olarak geçici dosya yoluyla değiştiriliyor
Deneysel örnekler
- C derleyicisi
tcc'yi kabuk gibi kullanıp doğrudan çalıştırmak da mümkün
$PATH değiştirilerek sahte bir bash kabuğu oluşturup kullanmak da mümkün
- GitHub,
shell alanında belirtilen değerin gerçekte hangi çalıştırılabilir dosya olduğuyla ilgilenmiyor
Güvenlik açısından çıkarımlar
- GitHub Actions'ta dosya yazma ile çalıştırma arasındaki sınır belirsiz (
GITHUB_ENV, $GITHUB_PATH vb. üzerinden de çalıştırma ihtimali var)
shell: bash gibi iyi bilinen değerler bile $PATH üzerinden aranıyor; sabit bir çalıştırma yolu (/bin/bash) kullanılmıyor
- Beklenenin aksine,
python gibi değerler de yalnızca bir toolcache referansı değil, gerçek yol tabanlı çalıştırma kullanıyor
2 yorum
github/runner-image deposuna baksanız bile, doğrudan kullanılabilecek epey fazla paket kurulu oluyor....
İmajı oluşturunca 1GB zaten hemen doluyor....
Hacker News görüşleri
-xbayrağını kullandığım oldu. Bu, hata ayıklama için çok faydalırepository_dispatcholay adını eşleştirmek için joker karakter kullanmakScriptHandler.csiçinde süreç ortamını, argümanları vb. hazırlayan tüm kod bulunuyorbashshell'ini kandırarak herhangi bir programı çalıştırabilirsinizgoevalhenüz doğrudan dosya girdisini desteklemiyorgoeval'in yazarı benim