Operating Systems 2026F Lecture 8: Difference between revisions

From Soma-notes
 
Line 25: Line 25:
* [https://homeostasis.scs.carleton.ca/~soma/os-2026f/lectures/comp3000-2026f-lec08a-20261008.mp4 Lecture 8A]
* [https://homeostasis.scs.carleton.ca/~soma/os-2026f/lectures/comp3000-2026f-lec08a-20261008.mp4 Lecture 8A]
* [https://homeostasis.scs.carleton.ca/~soma/os-2026f/lectures/comp3000-2026f-lec08b-20261009.mp4 Lecture 8B]
* [https://homeostasis.scs.carleton.ca/~soma/os-2026f/lectures/comp3000-2026f-lec08b-20261009.mp4 Lecture 8B]
Unfortunately the screen capture got messed up with these, my apologies.


==Notes==
==Notes==

Latest revision as of 15:00, 9 October 2026

Readings

The following readings are supplemental but may help you understand what has been covered in previous classes:

UNIX permissions

  • Operating System Concepts, Section 13.4.2, Access control (p. 552-554)

setuid

  • Operating System Concepts, Section 17.4.2, Example: UNIX (p. 674-675)

Files and directories

Topics

  • Introduction to networking
  • UNIX accounts
  • password security
  • Public key cryptography
  • ssh configuration and usage

Video

Video from the lectures given on October 8th and 9th, 2026 are now available:

Unfortunately the screen capture got messed up with these, my apologies.

Notes

Lecture 8A

Lecture 8A
----------

Wooclap: ALMBSXY

Why tutorials then assignments?
 - we can grade only so much
 - but I also want to encourage you to judge whether you understand something or not

How does the Internet work?
 - postcards going this way and that

Why postcards?
 - because they show who they are from and who they are for
 - limited in size
 - "public"

What if you wanted to communicate a lot of information via postcards?
 - break up the message into postcard-sized chunks
 - number the postcards

But then what if they arrive out of order, get delayed, or get lost?
 - need some way of checking what information is missing

IP <- postcards (packets)
TCP <- strategy for getting continuous communication over IP packets,
       making sure it is reliable
UDP <- let me manage the postcards myself

So how can we protect these postcards?
 - cryptography!

Classic cryptography relies on shared secrets
 - both sides know the "password"

But a shared secret only works if both parties have been previously introduced
 - not the case on the Internet!

In the 1970's, cryptographers figured out something much more clever:
public key cryptography

public key cryptography splits the "secret" into two:
 - a public key that is shared with everyone
 - a private key that is...private


With public key cryptography, you can
 - send a secret message to anyone you have the public key for
 - verify the authenticity & integrity of a message for anyone you have the public key (check the digital signature)

Now the sharing a secret key problem - we can just send a key as a public key-encrypted message
 - but how do I know I have the right public key?


To enable passwordless login to an openstack VM
 - generate an SSH key pair
 - copy the public key (the .pub  file) to the .ssh/authorized_keys file
   on the openstack VM
 - add the key pair to your local ssh agent
   - this varies depending on your operating system, but is
     generally "ssh-add" and the private key file

The purpose of ssh-add is to add your unlocked private key to your local ssh agent
 - the idea is that you don't want to keep having to unlock your private key, but you want your private key to be protected on disk

PASSWORDS
 - so passwords are stored locally, but does that mean if someone logs into your computer they automatically know your password?
 - passwords are stored with secure hashes
   - the hash of the password is remembered, not the password
   - if you have the hash you only know the password if you guess it correctly

Lecture 8B

Lecture 8B
----------
wooclap: EUJSUZN

There are textbook resources
 - read them for contextual information

but you need to approach the material intentionally
 - I can't build a conceptual model for you


Before explaining SSH, we need to explain why we need it
So...networking

Why postcards?
 - have a sender and a receiver (source and destination)
 - limited size
 - "public" - anyone who handles the postcard can read it

packets are basically postcards
 - and that's what is sent around on the Internet

If you want to send a lot of information, that means a lot of postcards
 - what order?
 - what if one gets lost? Delayed?
 - privacy?
 - integrity (no changes)
 - authenticity (correct sender)?

The Internet was built originally with NO SECURITY
 - no privacy, integrity, authenticity

Instead it was "best effort"
 - mistakes will be made

Internet routers - think the post office

So how do we solve the security problem? By using cryptography!
 - classic cryptography is all about ciphers for encryption

symmetric key cryptography:
  plaintext + secret key => ciphertext
  ciphertex + secret key => plaintext

Old: substitution ciphers, enigma
Recent: DES
Current: AES

The challenge of symmetric key cryptography is a chicken & egg problem:
 - how do you share a key?

Solution: public key cryptography

public key cryptography:
  plaintext + public key => ciphertext
  ciphertex + private key => plaintext

public and private key are a matched pair that are generated together

But how do I make sure things haven't been changed in transit?
 - integrity, authenticity?

secure hash functions
 - generating hashes from a document are easy
 - finding a document with a given hash is hard

So if I have the hash of a document and the hash is correct, I know I got the right document

But then, how do I know I got the right hash?

public key cryptography (digital signature):
  hash + private key => signature
  signature + public key => hash

To check a signature of a document:
  compute hash(document)
  hash(document) ?= hash from signature

If they match, then document is authentic (came from owner of key) and hasn't been changed

(don't implement your own cryptography!)

So how do I know I have the right public key for someone?
 - well, we can just use digital signatures again!

certificate: public key + metadata (name, expiration, etc)

setuid bit
 - goes with the execute bit
 - when execve is run, makes the euid of the process the uid of the executable

euid: effective uid, the real uid the kernel uses to decide access

normally uid=euid for a process, but setuid lets this change