Pokazywanie postów oznaczonych etykietą bezpieczeństwo. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą bezpieczeństwo. Pokaż wszystkie posty

Argumenty przekazywane do procesu (również bash)

Powłoka czyta polecenia jako jeden ciąg tekstowy. Następnie przeprowadza analizę wczytanych danych. O sposobie analizy decyduje:
a) Zmienna IFS, powodująca, że domyślnie argumenty oddzielone są spacjami.
b) Jednocześnie powłoka umożliwia obejmowanie części poleceń pojedynczymi lub podwójnymi cudzysłowami. Cudzysłowy powodują wyłączenie specjalnego interpretowania niektórych znaków, jak choćby spacje.
c) Interpretowane są znaki wieloznaczne (wildcards), jeżeli ich interpretacja jest włączona (wtedy następuje ich podmiana).


Tablica argc[]:
a) argc[0] - nazwa polecenia
b) argv[argc-1] - ciąg odpowiadający ostatniemu argumentowi
c) argv[argc] - null odpowiadający końcowi tablicy. Czyli przekazując wskaźnik argv+1 faktycznie przekazujemy listy argumentów bez nazwy polecenia.


Pełna deklaracja funkcji main():
int main(int argc, char const *argv[], char const *envp[]) {
Uproszczona deklaracja funkcji main()
int main(int argc,char *argv[], char *envp[]) {

int main(
    int argc,      /* licznik argumentów
    char *argv[]   /* tablica argumentów
)


Wniosek:
Każdy napis argumentu może zawierać cokolwiek, byle był zakończany null. Jest problem z przekazywaniem binarnej wartości "zero".


Warto zobaczyć:
https://github.com/torvalds/linux/blob/master/lib/argv_split.c
Oraz:
- getopt()
- argp_parse()


Tablica envp[]:
- ostatni element to null
- nie ma licznika (takiego jak w argv[] stanowi argc)
- Dostęp do środowiska uzyskiwany przez
extern char **environ;
Jest równoznaczny z environ[x] odpowiadającemu envp[x]


Aby przetworzyć listę dowolnego rodzaju:
mydata=("$somedata"*.txt)
program "${mydata[@]}"


Nazwami plików zaczynające się od -? (kreska lub minus):
Większość poleceń zinterpretuje jako oznaczenie opcji. Można użyć oznaczeni końca opcji:
set -- "$filelist"*.txt
program -- "$@"
Możesz też upewnić się, że nazwy plików zaczynają się od znaku innego niż - (kreska lub minus) Można dodać "/" lub "./"
case "$f" in -*) "f=./$f";; esac


Pozostaje jeszcze interpretacja jako standardowego wejścia lub standardowe wyjście.  Sprawdź różnicę:
"du -sh *"
a,
"du -sh ./*"?


Przypisanie polecenia do zmiennej - przykłady:
command_path="$1"
"$command_path" --option --message="test"

cmd=(/bin/program --option --message="test" --)
cmd=("${cmd[@]}" "$file1" "$file2")
"${cmd[@]}"

set -- /bin/program --option --message="test" --
set -- "$@" "$file1" "$file2"
"$@"

code='/bin/program --option --message="test" -- /var/local/file1 | grep "test"'
eval "$code"

Jeszcze lepszym rozwiązaniem jest użycie funkcji.


Polecenia xargs / find - podpowiedzi:
xargs -L1
xargs -l
xargs -0
find cos -exec program parm1 parm2 parm3 {} +

find cos -exec sh -c '
  for x do
    program "$x"
  done
' find-sh {} +


Maksymalna długość (wielość) przekazywanych argumentów:
1) Silnie zależny od systemu.
2) Wypróbuj:
- getconf ARG_MAX (od wersji 4.4BSD i System V)
- sysconf(_SC_ARG_MAX)
- sys/limits.h  ARG_MAX
- xargs --show-limits
3) Test:
MAXA=`perl -e 'print "a"x150000'`
bash test.sh $MAXA

Patrząc na ARG_MAX/NCARGS, musisz wziąć pod uwagę konsumpcję przestrzeni zarówno przez argv[] i envp[] (argumenty i otoczenie).
Niektóre powłoki umożliwiają eksportowanie funkcji do środowiska. Powyższa sytuacja lekko się komplikuje, ponieważ ich definicje zawierają nowe znaki, które zmogą zostać błędnie zinterpretowane jako nowe envp[].  To samo dotyczy sytuacji, gdy wartości zmiennych zawierają znaki nowej linii.

Od 2.6.23 jest inaczej, niż w UNIX'ach:
- Dodano: AX_ARG_STRLEN i MAX_ARG_STRINGS.
- ARG_MAX zazwyczaj będzie o wielkości 1/4 stosu (RLIMIT_STACK).
- Dla systemów wbudowanych bez MMU limit nie ma zastosowania.

Dokładnie jest to sprawdzane w:
- "do_execve()" w fs/exec.c  ( PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *) / sizeof(void *) )
- linux/binfmts.h


Można próbować używać poleceń typu:
expr `getconf ARG_MAX` - `env|wc -c` - `env|egrep '^[^ ]+='|wc -l` \* 4 - 2048
W teorii powinny dać jakieś poglądowe wartości, nawet uwzględniając istnienie funkcji powłoki w tym obszarze pamięci, ale faktycznie zazwyczaj zawyżają wartości. Używając jednak:
getconf ARG_MAX
I wiedząc, że:
- Długość tablicy wskaźników do tych ciągów to zwykle 8 bajtów dla x86_64
- Używając również: limit stacksize lub ulimit -a
Otrzymujemy: jeden milion pustych argumentów utworzy listę wskaźników o wielkości 8 MB, a taki jest rozmiar stosu na moim 64 bitowym Debianie.
Lecz trzeba pamiętać, że w Linuksie maksymalny rozmiar pojedynczego argumentu to 128 kiB.
1000 = kB kilobyte
1024 = KiB kibibyte

Jak uniknąć ograniczeń przekazywanych argumentów?
for i in *; do command "$i"; done  #powolne
printf '%s\0' *|xargs -0 command
find . -exec command {} \;     #powolne
find . -exec command {} +
find . -print0|xargs -0 command
find . -print|xargs command   #bez spacji
"find . ! -name . -prune [...]"
cd /directory/with/long/path; command *
command [a-e]*; command [f-m]*; ...
Nie używać argumentów do przekazywania dużych ilości danych.


********

Więcej informacji:
Informatyka, FreeBSD, Debian


***

Inne wpisy:



Update: 2018.06.12
Create: 2018.06.12

Biblioteczka informatyczna

Niestety, nie mam miejsca, by trzymać wszystkie przeczytane książki. W miarę starzenia się technologii i ich wycofywania z użycia wyrzucałem zbędne pozycje. Po co komuś teraz specyfikacja przerwań DOS, czy opis BIOS... Tak samo różne odmiany UNIX'ów, starych Winzgroz.


2018.07.20
















**********************************
ARCHIWUM

Zdjecia z 2018.02.15













********

Więcej informacji:
Informatyka, FreeBSD, Debian


***

Inne wpisy:



Update: 2018.07.20
Create: 2018.02.15

Odzyskanie hasla administratora lub użytkownika do Windows

Wszystkie operacje są przedstawione na filmie:



Opis komend:

1)
Shift + F10   - uruchamia okno komend przy uruchamianiu systemu z dysku instalacyjnego.

2)
move c: \ windows \ system32 \ Utilman.exe   c: \ windows \ system32 \ Utilman.exe.bak
copy c: \ windows \ system32 \ cmd.exe   c: \ windows \ system32 \ Utilman.exe
Wykonuje kopię pliku "Utilman.exe", oraz podmienia go na "cmd.exe".

3)
"wpeutil reboot"   - komenda wykonująca bezpieczny restart komputera.

4)
Komendy dodające użytkownika, zmieniające hasło i dodające go do grupy lokalnych administratorów:
net user   nazwa_użytkownika   /add
net user   nazwa_użytkownika   hasło_użytkownika
net localgroup   administratorów  nazwa_użytkownika   /add

5)
Aktywowanie konta lokalnego administratora:
net user   administrator   /active:yes
net user   administrator  hasło_administratora

6)
a) Wymuszenie zmiany hasła przy pierwszym logowaniu:
net user   nazwa_użytkownika   /logonpasswordchg:yes

b) Zabronienie użytkownikowi zmiany hasła:
net user nazwa_użytkownika /passwordchg:no

c) Skasowanie restrykcji czasowych dla danego konta:
net user   nazwa_konta   /times:all
net user   nazwa_użytkownika   /expires:never

********

Więcej informacji:
Informatyka, FreeBSD, Debian


***

Inne wpisy:



Update: 2015.11.10
Create: 2015.11.10

Informatyczna bajka

Pewną telefoniczną historię mogę opowiedzieć tylko jako bajkę, a brzmi ona tak: w czasach przed Internetem (tuż po dinozaurach) dane na duże dystanse przenosiło się za pomocą BBS'ów (Bulletin Board System) i za pomocą tasiemek do streamerów, przewożonych w bagażu.

Również za pomocą tanich taśm o pojemności 120 MB (megabajtów!). To były rozmiary większych twardych dysków...  Windows 3.1 zajmował 8 dyskietek 3,5" 1,44 MB.
Tak to dane ze zgniłego zachodu, może również ze Szwecji, trafiały do raczkującego kapitalizmu.

Natomiast problemem z BBS'ami był koszt rachunku telefonicznego.
Więc w pewnym mieście wojewódzkim, za lasami, za górami, była duża centrala, a do niej instrukcje obsługi po francusku... W centrali był modem, z ustawionym jakimś pancernym protokołem i prędkością 300 bodów. Wolno to działało nawet jak na tamte czasy, ale praktycznie nie dało się zerwać transmisji.
Dzięki temu modemowi, skrzaty i elfy, potrafiły ustawić sobie numery z bilingowaniem: darmowym, z jednokrotnym naliczeniem, lub naliczane jako numer lokalny. Ustawiało się też ponoć przekierowanie - po zadzwonieniu na numer "lokalny" automatycznie uzyskiwało się połączenie z wcześniej zaprogramowanym numerem. Od tej pory - jak wieść gminna niesie - BBS'y w USA stały się bardziej dostępne (dla rycerzy okrągłego stołu, oczywiście).

Ciągłe połączenia (czas liczony w miesiącach) zrywane tylko co kilka godzin i zaraz nawiązywane ponownie. Do tego modemy US Robotics Courier i Sportster. Łącza takie, że 56 kb ciężko było zestawić do centrali... To były czasy. Nie zna życia, kto modemu nie słyszał...

Z takich numerów to nawet pirackie radio korzystało... podobno. Gnomy mogły ustawić antenę na wysokim bloku - wysokim, że hej!, jak na Manhattanie - a nadajnik wcisnąć do kanału wentylacyjnego (jakże pomocne okazywały się lewarki samochodowe).
Może do tego była radiolinia, porządna, a jakże, aż do odległej krainy! Zrobiona na "totolotku" łączyła ze studiem, czyli z małym pokojem.
Prywatny numer telefonu na noc przekierowany na budkę z automatem, a tam kumple z piwem i ręcznymi radyjkami zapewniającymi łączność ze studiem... Że też wtedy chciało się tym krasnoludkom tak ciężko pracować... Ja rozumiem TV, nieco parna i duszna, już bez D2MAC, o zasięgu kilku ulic, ale radio z łącznością ze słuchaczami?!

Niestety stare, dobre, czasy minęły szybko. Do centrali złe wiedźmy podłączyły jakiś większy (centralny) system bilingowy i numery z numerami się skończyły.

Wtedy jednak pojawiła się sieć sieci, jakieś wół-wół-wół, a znajomi króliczka potrafili np. w nocy 3/4 pasma przeznaczonego do obsługi dużego miasta zarezerwować na potrzeby własne... tak to bywa, gdy w prawiekach miasto obsługiwało (prawie) jedno łącze... I to koniec tej bajki.

Dobranoc!


Hacking --- Hacker, kto to taki? 

Enigma - zasada działania, historia, oraz słabości Enigmy. 



********

Więcej informacji:
Informatyka, FreeBSD, Debian

Bezprzewodowy licznik energii elektrycznej OWL -rozpakowanie (unboxing)



Update: 2016.04.22
Create: 2016.04.22

Energia wydzielona podczas katastrofy lotniczej

Ćwiczenie z obliczeń: mamy dwa warianty samolotów:

A:
- Prędkość: 200 km/h.
- Masa 80 ton.

B:
- Prędkość: 280 km/h.
- Masa 70 ton.


Obliczenia (arkusz kalkulacyjny Google):



Energia uwalnia się (jest przekazywana) wolno, w stosunku do normalnych czasów eksplozji. Zderzenie porównał bym do bardzo szybkiego spalania, ale nie do detonacji.
Przykład wybuchu 40 kg trotylu:


********


Więcej tu:
Inne wpisy, oraz krótko o blogu

***




Update: 2015.08.31 
Create:  2015.08.31

Fatalne bidony POWERADE

Miałem bidony z promocji POWERRADE. Trzy, dla każdego członka rodziny. Dobrze pasowały do uchwytów w rowerach. Niestety okazały się strasznie badziewne. Zastanawiam się nawet, czy nie były szkodliwe dla zdrowia. Zaczęły ostatnio okrutnie śmierdzieć plaskiem. Nalewałem do nich tylko wodę.

Wyrzuciłem je. Tak samo jak markę POWERIDE z listy moich zakupów.






Inne wpisy:


Update: 2015.08.20 
Create:  2015.08.20

R-20F Rozgałęźnik przeciwprzepięciowy - poważny problem

Około miesiąca temu zauważyłem, że R-20F chroniący pralkę w dużej łazience ma popękaną obudowę. Ponieważ są to tanie urządzenia, więc pomyślałem, że może obudowa nie wytrzymała obciążenia wtyczką i kablem. W ogóle nie pomyślałem, że może to być coś poważnego. Skleiłem po prostu obudowę przemysłowym klejem cjanoakrylowym. Nawet go nie rozbierałem.
Pralka pobiera do 10 A, przeciwprzepięciowy R20-F jest sprzedawany z informacją, że wytrzymuje 16 A. Co mogło się stać, prawda?

Dla porządku dodam:

1) Obwód zasilający pralkę jest dedykowany i zabezpieczony wyłącznikiem nadprądowym B10A:
Nie ma więc możliwości przekroczenia nominalnego obciążenia R-20F. Sama instalacja elektryczna była kontrolowana 6-mc temu (w grudniu 2014) przez elektryka:

2) W łazience nie ma zwiększonej wilgotności. Metr od jej drzwi znajduje sie jeden z domowych higrometrów:

***

Przechodząc do meritum:

Tydzień temu zauważyłem, że wspomniany przeciwprzepięciowy R-20F ma ponownie spękaną obudowę, a do tego dziwnie zwisa... Odłączyłem go i poddałem oględzinom. W ostatniej chwili. Za moment to R-20F przetestował by zabezpieczenia zainstalowane na tym obwodzie i/lub czas dojazdu straży pożarnej.

Bolce wtopiły się w obudowę:

Klejone pęknięcia, pękły ponownie:


Widać jak bolce przechyliły się od temperatury:


Tak samo temperatura spowodowała, że popękały elementy wewnątrz zabezpieczenia:

Widać, w jakim stanie są przewody. Ich izolacje zaczęły się topić i sklejać:

Ciekawy kolor mają metalowe elementy. Mocno się utleniły.




To nie wina jakości plastiku. On popękał od temperatury.

Coś się rozprysło wewnątrz zabezpieczenia przeciwprzepięciowego R-20F. Warystory i iskierniki są całe i nieuszkodzone. To nie jest wynik absorpcji przepięcia! Potwierdza to też dioda kontrolna R-20F.

Nawet izolacje sczerniały:

Ten czarny plastik rozpadał się w ręku. Widać reż pęknięcia na metalowej końcówce bolca, w której był zaciśnięty przewód.

Jak to się utleniło!



Zniszczone gniazdko:

Sprawdziłem, czy to nie wina gniazdka. Tak wygląd w środku. 

Sprawdziłem dociśniecie śrub mocujących kable w gniazdku. Użyłem do tego duży śrubokręt i nie stwierdziłem luzu. Śruby były dobrze dokręcone.

Jeszcze jedno zdjecie wnętrza gniazdka. Wszystko jest OK.

Tak wygląda wtyczka:

Podłączyłem tą wtyczkę bezpośrednio (czyli bez R-20F) do gniazdka i sprawdziłem, czy coś się nie będzie nagrzewać. Wykonałem dwa prania (90 stopni). W trakcie nagrzewania wody w pralce zatrzymywałem pranie i sprawdzałem temperaturę bolcy wtyczki. Były ledwo, ledwo ciepłe. Czyli, nie tu był problem.


Ponieważ używam około 20 takich zabezpieczeń:



Zacząłem je sprawdzać. Problem dotyczył tych R-20F, które pośredniczyły w zasilaniu urządzeń dużej mocy - znalazłem posklejane od temperatury izolacje od przewodów. Tak wygląda R-20F zabezpieczający zmywarkę:

Ponownie widać charakterystyczne pęknięcia:



Izolacje przewodów skleiły się. Biały ślad jest po ich rozerwaniu:


W tym momencie zadzwoniłem do firmy Elgotech, gdzie ustaliłem, że wyślę e-mail'em zdjęcia. W kolejnej rozmowie firma poprosiła o przesłanie trzech R-20F. Opłacony przez Elgotech kurier stawił się po zabezpieczenia:
  1. Pralki.
  2. Suszarki do ubrań.
  3. Zmywarki.
Zabezpieczenia od suszarki do ubrań nie rozkręcałem. Tak się umówiłem z Elgotech. Po kilu dniach otrzymałem paczkę z trzema nowymi R-20F. Firma nie chciała nawet paragonów, których zresztą nie posiadam.
Niestety, nie otrzymałem informacji jaka była przyczyna takiej awarii. Oczekiwałem, że odniosą się do tej kwestii. Tak samo uszkodzone gniazdko też pozostało bez echa. Szkoda.

W takiej sytuacji sam też nie dzwoniłem do Elgotech. Sorry, ale ich urządzenie rozpadło się i mogło spowodować poważne szkody, a inny R-20F zaczął wykazywać podobne objawy. W takiej sytuacji oczekiwał bym bardziej zdecydowanej reakcji, niż sama wymiana urządzeń. Na przykład e-mail z informacją, że to był jednostkowy wypadek i mogę użytkować inne R-20F, był by pożądany.

Nie miałem innego wyjścia, niż rozebrać nowe R-20F i sprawdzić samemu, czy ich konstrukcja różni się od posiadanych modeli. Nie zauważyłem różnic, czyli problem mógł powrócić.

Ponieważ cena R-20F jest bezkonkurencyjna w stosunku do ich funkcjonalności i wyglądu, postanowiłem zmodyfikować je wg. własnego pomysłu i wniosków z obserwacji uszkodzonych egzemplarzy.

Podzieliłem posiadane w domu przeciwprzepięciowe R-20F na dwie kategorie: 
  • Te które zasilają urządzenia do 500 W.
  • I te zasilające odbiorniki pobierające ponad 500 W.

Te pierwsze zmodyfikowałem w taki sposób, że zlutowałem ich kable w złączach. Użyłem do tego odpowiedniego preparatu, ułatwiającego lutowanie niklowanych i utlenionych powierzchni. W żadnym nie znalazłem "sklejonych" przewodów, co potwierdza, że problem można powiązać z poborem prądu przez zasilane urządzenia.
Dzięki temu utleniające się  połączenia kabli nie nagrzewają się. Zmodyfikowałem R-20F zabezpieczające:
  1. Lodówkę.
  2. Radio w kuchni.
  3. Alarm.
  4. Sprzęt RTV w sypialni.
Zastanawiałem się, czy warto powyższe R-20F modyfikować. Powinny z takim obciążeniem pracować bezproblemowo. Ponieważ jednak taka modyfikacja nie jest bardzo pracochłonna to wolałem ją wykonać. Będę spokojniej spać. Wolę odrobinę więcej zrobić i zapomnieć o problemie.


Inaczej zmodyfikowałem R-20F zabezpieczające:
  1. Pralkę.
  2. Suszarkę do ubrań.
  3. Zmywarkę.
  4. Ekspres do kawy.
  5. Sprzęt RTV w salonie.
  6. Sprzęt RTV, komputerowy i laboratoryjny (moje biurko).

Do oryginalnych przewodów zabezpieczenia przeciwprzepięciowego R-20F dolutowałem równolegle nowe kable. Dzięki temu zachowałem oryginalne kable zaciśnięte w złączach, które oczywiście też zlutowałem. 
Oryginalne kable mają  0,75 mm2. 

Wg. różnych opracowań pozwala to na przeniesienie ciągłe od 9 A do 15 A (w zależności od źródła podającego informację). Oznacza to, że przewody powinny wytrzymać 10 A (2 kW) - a taką moc pobiera pralka, czy suszarka do ubrań. Ekspres do kawy pobiera już tylko około 1450 W. Przypomnę, że R-20F sprzedawany jest jako wytrzymujący natężenie 16 A (3600 W).

Mam jednak nadzieję, że równolegle poprowadzone przewody pozwolą zmniejszyć nagrzewanie się przewodów, a zlutowanie oryginalnych przewodów w złączach zmniejszy ich rezystancję i co za tym idzie, zmniejszy wydzielanie się ciepła. Zastosowałem bardzo wysokiej jakości przewody 1,5 mm2 w silikonowej izolacji. Ten typ izolacji jest odporny na temperaturę.
Izolacja oryginalnych przewodów nie jest odporna na temperaturę:

Wiem, że moje modyfikacje naruszają oryginalną konstrukcję. Jednak "sklepowe" R-20F nie sprawdził mi się. Wręcz stanowiły zagrożenie. Bez tych modyfikacji musiał bym je wyrzucić, a przypomnę, że za taką cenę nawet podobnej obudowy nie kupię, nie wspominając o jej zawartości.

Kilka drobiazgów wymagało poprawy:

Takie złącza przy u życiu odpowiedniego topnika zalałem cyną. Cyna została zassana do wnętrza złącza. 

Modyfikacja wszystkich domowych R-20F zajęła mi kilka godzin. W wolnej chwili muszę dobrać się do działkowych i piwnicznych R-20F... To dopiero połowa pracy. 

Przed  lutowaniem zalałem cyną złącze, a następnie przywiązałem drutem dodatkowy przewod do złącza. Dopiero tak przygotowane złącze i przewód zlutowałem. Na poniższym zdjęciu widać drut w trakcie owijania. Owinąć należy kilka razy.

Skręcając drut powoduję lepsze dociśnięcie przewodu do złącza. Tu widoczna skręcona końcówka, która będzie też owinięta wokół złącza i zlutowana z nim.

Po lewej stronie widać doprowadzone dodatkowe przewodu. Tak przygotowany R-20F odpowiednio oznaczam i odbiornik o większej mocy podłączony będzie tylko do zmodyfikowanego złącza (gniazda).

Należy pamiętać też o modyfikacji przewodu ochronnego!

Widoczne owinięcie drutem prze jego zlutowanie. Ten sposób montażu powoduje też większą pewność takiego złącza w przypadku przepływu prądu o znacznym natężeniu, np. przy zwarciu w zasilanym urządzeniu.

Ten R-20F ma zmodyfikowane oby dwa gniazda.




Będę je teraz bacznie obserwować by przekonać się, czy właściwie zdiagnozowałem przyczynę usterki i czy modyfikacja pomoże.


***

Inne wpisy:



Update: 2015.05.27
Create: 2015.05.27