Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Valmiin ohjelman suorittaminen

Sivun loppuun

Hanva [26.10.2015 18:49:00]

#

Tyhmä kysymys: Miten esimerkiksi Pythonilla koodattu valmis ohjelma suoritetaan? En nyt tarkoita Pythonin kehitysympäristöä vaan sitä oikeaa ympäristöä mihin ohjelma on tehty...esimerkiksi windowsia

peran [26.10.2015 19:28:23]

#

Linuxissa se menee ainakin seuraavasti:

python ohjelma.py

Sitä ei siis tarvitse kääntää tavukoodille tai exe:ksi (Tämä siis koskee sekä Windowsia että muita ympäristöjä).

Jos ohjelma ei käynnisty kyseisellä tavalla, niin silloin python.exe pitää liittää polkumäärityksiin.

Metabolix [26.10.2015 19:55:54]

#

Python-ohjelman suorittamiseen tarvitaan aina Python-tulkki. On mahdollista paketoida tulkki ja koodi Windows-sovellukseksi tietyillä apuohjelmilla (ks. cx_Freeze). Näin luodut ohjelmat ovat usein aika isoja. Sama ongelma koskee monia skriptikieliä. Toisaalta esimerkiksi Linuxissa käyttäjällä on yleensä valmiiksi Python-tulkki, jolloin riittää pelkän koodin antaminen.

Joissain kielissä koodia ei tulkata ensinkään, vaan koodi käännetään binäärimuotoiseksi sovellukseksi jo kehitysvaiheessa. Tällöin taas ohjelmasta tarvitaan oma versio kaikille käyttöjärjestelmille, mitä voi olla vaikea järjestää.

Hanva [26.10.2015 21:58:52]

#

Kiitoksia valaisevista vastauksista. Jatkan vielä samoilla linjoilla. Miten yksinkertaistettuna homma toimii käytännössä jos esim. koodaisin pythonilla (onko tämä mahdollista?) ohjelman joka asettaisi jollain editorilla (esim.windowsin notepad) tehdylle tekstitiedostolle salasanan.

Tällaisia asioita miten koodatut ohjelmat soveltuvat/otetaan käytäntöön on käsitelty aika vähän aloittelijoille suunnatuissa oppaissa. Tietenkin ensin pitää oppia koodaamaan että saadaan valmiita ohjelmia mutta itseäni ainakin motivoi enemmän jos ymmärrän millaisia valmiita sovelluksia on mahdollista luoda.

Grez [27.10.2015 09:29:45]

#

Hanva kirjoitti:

Kiitoksia valaisevista vastauksista. Jatkan vielä samoilla linjoilla. Miten yksinkertaistettuna homma toimii käytännössä jos esim. koodaisin pythonilla (onko tämä mahdollista?) ohjelman joka asettaisi jollain editorilla (esim.windowsin notepad) tehdylle tekstitiedostolle salasanan.

Periaatteessa homassa on pari vaihetta

1) Päätetään mitä ohjelma tarkasti ottaen tekee. Esimerkiksi "tiedoston suojaaminen salasanalla" voi tarkoittaa esimerkiksi että asetetaan levyjärjestelmään tiedostolle salasana (vaatii tietenkin että käyttöjärjstelmä ja käytetty levyjärjestelmä tukee sellaista) tai että esimerkiksi salataan tiedosto käyttäen salausavainta joka on johdettu annetusta salasanasta. Tai ehkä tarkoitit itse vielä jotain muuta.

2) Selvitetään miten haluttu asia on mahdollista tehdä

3) Kirjoitetaan koodi joka tekee sen

Hanva kirjoitti:

itseäni ainakin motivoi enemmän jos ymmärrän millaisia valmiita sovelluksia on mahdollista luoda.

Yleisesti ottaen jos joku asia on mahdollista tehdä tietokoneella, niin sellaisen voi luoda. Ja kuten varmaan tiedätkin niin tietokoneilla voi tehdä aika paljon asioita.

Hanva [27.10.2015 09:55:50]

#

Grez kirjoitti:

Päätetään mitä ohjelma tarkasti ottaen tekee. Esimerkiksi "tiedoston suojaaminen salasanalla" voi tarkoittaa esimerkiksi että asetetaan levyjärjestelmään tiedostolle salasana (vaatii tietenkin että käyttöjärjstelmä ja käytetty levyjärjestelmä tukee sellaista) tai että esimerkiksi salataan tiedosto käyttäen salausavainta joka on johdettu annetusta salasanasta. Tai ehkä tarkoitit itse vielä jotain muuta.

Tarkoitin sellaista ohjelmaa jolla voisi jälkeenpäin esim. notepadilla tehdyn tiedoston suojata siten että se ei aukea ennenkuin on kirjoittanut oikean salasanan. Nähtävästi tämä tarkoittanee tuota tiedostolle levyjärjestelmään asetettavaa salasanaa??

Tiedä sitten kumpi olisi järkevämpää...salata tiedosto käyttäen salausavainta vai tuota toista....

Kuten kysymyksistäni voi päätellä tietämykseni ohjelmoinnista ja tietokoneista on todella alkeellisella tasolla, joten pyydän kärsivällisyyttä :)

groovyb [27.10.2015 11:18:41]

#

Jos nyt puhutaan windows maailmasta, niin tiedostot eivät tue salasanasuojausta, koska windows käyttää security principalsia.

Ohjelmallisesti voit toki antaa tiedostolle windows/linux käyttöoikeuksia - Rajoittaa tiedoston oikeudet vain tiettyihin käyttäjiin tai käyttäjäryhmiin. Eli itse suojaukset tehdään pääsääntöisesti käyttöoikeuksin, niin windowsissa kuin linuxissakin.

Mutta noin yleisesti ottaen jos salasanasuojaaminen kiinnostaa, tiedoston suojaaminen salasanalla tarkoittaa käytännössä tiedoston kryptausta, jossa salasana toimii purun avaimena.

Käyttöoikeuksien asettamisesta:

Linuxissa voit käyttää os.chmod() Metodia käyttöoikeuksien asettamiseen (Windowsissa toimii tuosta vain Read-only flag)

import os

"""
stat.S_ISUID: Set user ID on execution.

stat.S_ISGID: Set group ID on execution.

stat.S_ENFMT: Record locking enforced.

stat.S_ISVTX: Save text image after execution.

stat.S_IREAD: Read by owner.

stat.S_IWRITE: Write by owner.

stat.S_IEXEC: Execute by owner.

stat.S_IRWXU: Read, write, and execute by owner.

stat.S_IRUSR: Read by owner.

stat.S_IWUSR: Write by owner.

stat.S_IXUSR: Execute by owner.

stat.S_IRWXG: Read, write, and execute by group.

stat.S_IRGRP: Read by group.

stat.S_IWGRP: Write by group.

stat.S_IXGRP: Execute by group.

stat.S_IRWXO: Read, write, and execute by others.

stat.S_IROTH: Read by others.

stat.S_IWOTH: Write by others.

stat.S_IXOTH: Execute by others.
"""
FILENAME = "foo.txt"
os.chmod(FILENAME, stat.S_IRWXU)

Windowsissa tulee käyttää pywin32:sen moduulia win32security:

import win32security
import ntsecuritycon as con

FILENAME = "foo.txt"

usera, domain, type = win32security.LookupAccountName ("", "Käyttajä A")
userb, domain, type = win32security.LookupAccountName ("", "Käyttäjä B")

sd = win32security.GetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl()

dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ | con.FILE_GENERIC_WRITE, usera)
dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS, userb)

sd.SetSecurityDescriptorDacl(1, dacl, 0)
win32security.SetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION, sd)

Metabolix [27.10.2015 21:06:35]

#

Hanva kirjoitti:

Tarkoitin sellaista ohjelmaa jolla voisi jälkeenpäin esim. notepadilla tehdyn tiedoston suojata siten että se ei aukea ennenkuin on kirjoittanut oikean salasanan.

Sellaista ohjelmaa ei voi tehdä, koska salasanasuojaus ei ole yleispätevä tekstitiedoston ominaisuus. Eihän ole myöskään olemassa tulostinta, jolla saisi tulostettua paperin, jota ei voi lukea kirjoittamatta paperiin salasanaa; paperitulosteeseen ei kerta kaikkiaan liity tällaista mahdollisuutta, vaan paperissa joko on luettavaa tekstiä tai ei ole luettavaa tekstiä.

Voi kyllä tehdä ohjelman, joka salaa tiedoston jollakin salausalgoritmilla. Tästä syntyy uusi tiedosto, jossa on salakirjoitusta. Salattua tiedostoa ei voi avata Notepadilla, koska Notepad avaa vain tavallisia tiedostoja. Jotta tiedoston voisi taas avata, salaus täytyy ensin purkaa (eli tiedosto pitää palauttaa alkuperäiseen muotoonsa). Tähän tarvitaan samankaltainen ohjelma kuin alussa tiedoston salaamiseen. Analogisesti paperille voidaan tulostaa salakirjoitusta, mutta jonkun pitää erikseen purkaa salakirjoitus, ennen kuin tekstiä voi taas lukea.

kayttaja-11960 [27.10.2015 22:12:00]

#

Hanva kirjoitti:

– –

Mihin tarvitset salasanalla suojattuja tiedostoja?

Hanva [28.10.2015 17:01:51]

#

Kiitoksia selventävistä vastauksista. En tarvi salasanalla suojattuja tiedostoja. Tämä esimerkki tuli vain jostain mieleen kun pohdin miten ohjelmia voidaan soveltaa käytäntöön.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta