Linux: data ważności konta

2024-04-16

Jeśli pracownik ma być zatrudniony tylko na określony czas, to warto od razu podczas tworzenia konta ustawić datę końca ważności tego konta.

USERNAME='test'
EXPIRY=$(date -d "+45 days" '+%Y-%m-%d')
sudo adduser -m -c "$USERNAME" -e $EXPIRY -G operator $USERNAME

A co, jeśli ten początkowy okres trzeba przedłużyć?

Po pierwsze, łatwo można sprawdzić datę wygasania konta (zignoruj kwestie wymuszania zmiany hasła – tu skupiamy się na ważności konta, a to dwie różne rzeczy):

sudo chage --list test
Last password change                                    : Jun 06, 2024
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Aug 31, 2024
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

Teraz można zmodyfikować konto:

sudo usermod -e 2024-09-30 test

By Rafał Kraik in Linuxy

Terraform: Index value required

2024-04-11

Operacje na terraform state to coś, czego raczej należy unikać, ale czasami coś tam trzeba zadziałać…

Polecenie

terraform state list

zwraca listę wszystkich zasobów którymi zarządza Terraform. Na tej liście w moim przypadku pojawił sie taki oto wpis:

module.net_conf.azurerm_private_endpoint.private_endpoint[„update_key”]

Ten oto wpis trzeba było usunąć. Zwykle wystarcza do tego polecenie terraform state rm, po którym podaje sie nazwę obiektu do usunięcia, o tak:

terraform state rm module.net_conf.azurerm_private_endpoint.private_endpoint["update_key"]

Niestety polecenie kończyło się brzydkim błędem:

│ Error: Index value required
│   on  line 1:
│  (source code not available)
│Index brackets must contain either a literal number or a literal string.

No jak to! Przecież w nawiasie jest „literal string”!

Przyczyna – problemy z interpretacja w linii komend cudzysłowa. Komendę oryginalnie uruchamiałem w powershell. Przeniosłem ją do cmd i delikatnie zmieniłem:

terraform state rm module.net_conf.azurerm_private_endpoint.private_endpoint[\"update_key\"]

Po tej zmianie, wszystko zadziałało!

By Rafał Kraik in Azure

AWS: Błąd połączenia do EC2 z Putty

2024-04-06

Podczas tworzenia instancji EC2 na AWS można wygenerować klucz pozwalający na połączenie się do EC2 za pomocą Putty. Niestety, przy takiej próbie połączenia można dostać też nieciekawy błąd: „Server Refused our key”

Poza sprawdzeniem standardowych rzeczy:

  • czy łączymy się do właściwego serwera
  • czy korzystamy z właściwego konta użytkownika
  • czy korzystamy z właściwego klucza – w sensie do właściwego serwera, ale też właściwego typu (Putty oczekuje PPK, a nie PEM).

można jeszcze sprawdzić:

  • czy połączenie konfigurujemy na adres IP czy na nazwę. Lepiej jest wskazywać na nazwę
  • w adresie można jednocześnie podać nazwę użytkownika i hasło wpisując
    username@server_address
    np.:
    ec2-user@<my.public.addres.name>
  • czy na komputerach jest właściwa data i czas
  • no i wreszcie czy mamy najnowszą wersję Putty.

U mnie pomogła właśnie ta ostatnia wskazówka. Putty było za stare 😉

By Rafał Kraik in AWS

Linux: Ważność hasła, wymuszanie zmiany hasła

2024-03-16

Jedno hasło ważne przez 9999 dni? To nie jest dobry pomysł:

sudo chage --list testuser
Last password change                                    : Jun 06, 2024
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Aug 31, 2024
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

Na szczęście na Linuxie można zmieniać daty ważności hasła i wymaganą częstotliwość zmian.

Żeby haslo było ważne jeszcze tylko przez 90 dni użyj:

sudo chage --expiredate $(date -d +90days +%Y-%m-%d) testuser

Dodatkowo, można jeszcze określić politykę zmiany hasła dla użytkownika:

  • wymuś zmianę, co 180 dni (to i tak dużo)
  • ostrzegaj o wygasaniu hasła 14 dni wcześniej
  • pozwól na ponowną zmianę hasła dopiero po 3 dniach od poprzedniej zmiany:

sudo chage --mindays 3 --maxdays 180 --warndays 14 testuser

Teraz konto wygląda tak:

sudo chage --list testuser
Last password change                                    : Jun 06, 2024
Password expires                                        : Dec 03, 2024
Password inactive                                       : never
Account expires                                         : Oct 14, 2024
Minimum number of days between password change          : 3
Maximum number of days between password change          : 180
Number of days of warning before password expires       : 14
By Rafał Kraik in Linuxy

Git diff – survival

2024-03-14

Ogólnie git diff wymaga wskazania CO z CZYM ma być porównane:

git diff <commit_hash> <commit_hash> <file_name>

Ponieważ branch można postrzegać jako ostatni commit w zadanej gałęzi kodu, to zadziała również:

git diff <branch_name1> <branch_name2> <file_name>

Czasami jednak opuszczamy CO ma być porównane i regulujemy to wyłącznie opcjami. Oto takie przypadki:

Zobacz czym różni się kod w working directory od kodu w staging area:

git diff <file_name>

Czym różni się kod w staging area od skommitowanego kodu w repo

git diff --staged <file_name>
git diff --cached <file_name>

Czym różni się kod w working directory od skommitowanego kodu w repo:

git diff HEAD <file_name>

By Rafał Kraik in Git

Windows: Nie można odtworzyć MP4: Server execution failed

2024-03-11

Jeśli jesteś ofiarą błędu „Server execution failed”, to

  • otwórz Managera zadań (Ctrl+Shift+Esc),
  • przejdź na „szczegóły”
  • odszukaj procesu „Windows Media Player” i zakończ go

Jest szansa, że po tej akcji, pliki będą sie poprawnie odtwarzać 😉

By Rafał Kraik in Helpdesk

Azure: Jak skopiować plik na blob storage container za pomocą AZ CLI?

2024-02-21

Zacznijmy od tego, że się trzeba zalogować. Można to zrobić na różne sposoby, ale powiedzmy, że wykonamy polecenie:

az login

i dokończymy logowanie w przeglądarce.

Istotne jest, aby mieć odpowiednie uprawnienia. W przeciwnym razie dostaje się komunikat podobny do poniższego:

You do not have the required permissions needed to perform this operation.
Depending on your operation, you may need to be assigned one of the following roles:
„Storage Blob Data Owner”
„Storage Blob Data Contributor”
„Storage Blob Data Reader”
„Storage Queue Data Contributor”
„Storage Queue Data Reader”
„Storage Table Data Contributor”
„Storage Table Data Reader”

Jeśli dodasz sobie uprawnienia, bo były za niskie, to poczekaj chwilę przed kolejną próbą. Azure nie od razu widzi nadane uprawnienia. Dla pewności można sie nawet wylogować i zalogować ponownie. Polecenie do wylogowania to:

az logout

No i przechodzimy do esencji, czyli kopiowania pliku. Odpowiednia komenda to az storage blob copy start. Polecenie trochę długie, ale ma sens. Na początku az, czyli nazwa komendy. Potem storage, bo pracujemy ze storage. Blob, bo kopiowanie ma się odbyć na blob service, dalej copy, bo chcemy przekopiować plik i ostatecznie start, bo to polecenie jest asynchroniczne – komenda się wykona, a kopiowanie może nadal trwać w tle. Dodatkowe parametry do przekazania to:

  • –destination-blob <filename> – określa nazwę, pod jaką plik ma się pojawić na blobie
  • –destination-container <containername> – określa nazwę kontenera, do którego plik ma być przesłany
  • –account-name <storageaccountname> – tutaj podaj krótką nazwę storage account. Nie trzeba podawać długiej nazwy, bo Azure już wie, że chodzi o blob service, a krótka nazwa i tak musi być unikalna globalnie w skali całego świata
  • –source-uri <uri> – określa adres źródłowy, pod jakim znajduje się plik do przekopiowania
  • –authmode login – mówi, że żądanie ma być uwierzytelnione w oparciu o EntraID – właśnie dlatego ten przykład zaczął się od zalogowania do Azure

Oto przykład pełnej komendy, która „kradnie” plik z wikipedii i umieszcza na twoim storage account

az storage blob copy start --destination-blob comp1.jpg --destination-container test_container --account-name stoacc7635442 --source-uri https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/IMac.jpg/330px-IMac.jpg --auth-mode login
By Rafał Kraik in Azure