Aplicații
E-mail 1006 Solutii
I coded my own Spotify wrapped with Python
[mai mult...]Artefacte grafice (ale texturilor) in aplicatii 2D sau 3D pe terminale iOS/Android (ARM)
Daca se respecta anumite “conditii”, desi dispozitivul este sau a fost perfect functional fara a avea disfunctionalitati de natura hardware, putem observa ca in anumite aplicatii si/sau motoare grafice texturile/imaginile/loading bars fie sunt albe sau incarca lent, fie prezinta tipare de culori la intamplare.
Desigur, sunt posibile si alte simptome dar cele de mai sus au fost observate si remediate cu metoda prezentata in continuare.
[mai mult...]Arduino Fingerprint Sensor
Required Components
| Component | Quantity | Description |
|---|---|---|
| Arduino Uno / Nano / Mega | 1 | Main controller |
| Fingerprint Sensor (R307 / ZFM-20 / Adafruit) | 1 | Biometric identification |
| 16×2 LCD with I2C Module | 1 | Display user messages |
| 12V Solenoid Lock | 1 | Door/box locking mechanism |
| 5V Relay Module | 1 | Controls solenoid lock |
| 12V Power Supply | 1 | Powers solenoid |
| Jumper Wires | – | Connections |
The fingerprint sensor scans the user’s finger. Arduino checks if the fingerprint matches a stored ID. If it matches, the relay is activated and unlocks the solenoid lock. The LCD shows:
- Scanning
- Access Granted
- Access Denied
Fingerprint Sensor → Arduino
VCC → 5V GND → GND TX → D2 RX → D3
I2C LCD → Arduino
VCC → 5V GND → GND SDA → A4 SCL → A5
Relay Module → Arduino
IN → D8 VCC → 5V GND → GND
Solenoid Lock Power Wiring
12V+ → COM on Relay NO → Solenoid + Solenoid - → 12V -
IMPORTANT: Use a diode (1N4007) across solenoid terminals to prevent voltage spikes.
Arduino Code (Copy & Paste)
This code controls the fingerprint module, LCD display, and solenoid lock.
#include <Adafruit_Fingerprint.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
SoftwareSerial fingerSerial(2, 3); // RX, TX
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerSerial);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int relayPin = 8;
void setup() {
lcd.init();
lcd.backlight();
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // lock OFF at start
lcd.setCursor(0, 0);
lcd.print("Fingerprint");
lcd.setCursor(0, 1);
lcd.print("Access System");
delay(2000);
lcd.clear();
finger.begin(57600);
if (finger.verifyPassword()) {
lcd.print("Sensor Ready");
} else {
lcd.print("Sensor Error");
while (1);
}
delay(2000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Place Finger...");
lcd.setCursor(0, 1);
lcd.print(" ");
int result = getFingerprintID();
if (result >= 0) {
lcd.clear();
lcd.print("Access Granted");
unlockDoor();
} else if (result == -1) {
lcd.clear();
lcd.print("Access Denied");
delay(1500);
}
lcd.clear();
}
int getFingerprintID() {
finger.getImage();
if (finger.image2Tz() != FINGERPRINT_OK) return -1;
if (finger.fingerSearch() != FINGERPRINT_OK) return -1;
return finger.fingerID; // valid ID returned
}
void unlockDoor() {
digitalWrite(relayPin, HIGH); // open lock
delay(3000); // unlock duration
digitalWrite(relayPin, LOW); // lock again
}
You must add fingerprints before using the system.
- In Arduino IDE, go to File → Examples → Adafruit Fingerprint Sensor Library → Enroll
- Upload the sketch
- Open Serial Monitor
- Type the fingerprint ID number (1–127)
- Place finger twice when instructed
Fingerprint is now stored.
LCD Display Messages
| Event | Message |
|---|---|
| Startup | Fingerprint Access System |
| Ready | Sensor Ready |
| Waiting | Place Finger… |
| Match | Access Granted |
| No Match | Access Denied |
Troubleshooting
- Fingerprint not detected: TX/RX wiring reversed
- LCD not showing text: Wrong I2C address (try 0x3F)
- Solenoid not activating: Check relay NO/COM wiring
- Machine resets: Solenoid drawing current — use separate 12V supply.
Instalare Pure-FTPd pe Ubuntu 24.04
Pure-FTPd este un software gratuit, open-source, pentru servere FTP, disponibil pentru Ubuntu și alte distribuții Linux. Conceput cu accent pe securitate, performanță și ușurință în utilizare, Pure-FTPd oferă funcții robuste, cum ar fi suport pentru utilizatori virtuali, conexiuni criptate folosind TLS/SSL și diverse mecanisme de autentificare. De asemenea, oferă funcții precum limitarea lățimii de bandă,restricționarea permisiunilor utilizatorilor și activarea accesului FTP anonim. Pure-FTPd este adesea ales pentru simplitatea sa în configurare în comparație cu alte servere FTP, ceea ce îl face o alegere populară atât pentru implementări mici, cât și pentru cele la scară largă pe sistemele Ubuntu.
Protocolul de transfer de fișiere (FTP) este un protocol de rețea standard utilizat pentru transferul de fișiere între un client și un server printr-o rețea, cum ar fi internetul. Dezvoltat la începutul anilor 1970, FTP permite utilizatorilor să încarce, să descarce și să gestioneze fișiere pe un server la distanță. Acesta funcționează folosind două canale: un canal de comandă pentru controlul conexiunii și un canal de date pentru transferul de fișiere.
Cerințe preliminare pentru instalarea Pure-FTPd
Înainte de a continua instalarea, asigurați-vă că aveți:
- Configurarea unui server Ubuntu
- Accesul la un cont de utilizator cu
sudoprivilegii
Instalarea pas cu pas a Pure-FTPd
Actualizarea pachetelor de sistem
Mai întâi, actualizați lista de pachete a sistemului:
sudo apt update
Instalarea Pure-FTPd
Apoi, instalați Pure-FTPd folosind următoarea comandă:
sudo apt install pure-ftpd
Configurarea Pure-FTPd pentru securitate îmbunătățită
Configurarea unui mediu securizat
Creați un grup dedicat utilizatorilor FTP:
sudo groupadd ftpgroup
Creați un utilizator pentru Pure-FTPd:
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser
Gestionarea accesului utilizatorilor
Pentru a adăuga un utilizator la serverul FTP:
sudo pure-pw useradd [username] -u ftpuser -g ftpgroup -d /home/ftpusers/[username]
sudo pure-pw mkdb
Înlocuiți [username]cu numele de utilizator dorit.
Configurarea TLS pentru transfer securizat de date
Generați un certificat autosemnat:
sudo openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Modificați configurația Pure-FTPd pentru a activa TLS:
echo 1 | sudo tee /etc/pure-ftpd/conf/TLS
sudo service pure-ftpd restart
Opțiuni avansate de configurare
Iată o listă de setări comune care pot fi configurate pentru Pure-FTPd în directorul /etc/pure-ftpd/conf/ pe Ubuntu. Numele fișierului de configurare este scris cu caractere aldine.
- AltLog : Specifică metode alternative de înregistrare în jurnal. De exemplu, AltLog clf:/var/log/pureftpd.log va înregistra transferurile în format W3C.
- AnonymousOnly : Când este activată (prin crearea unui fișier numit AnonymousOnly), restricționează serverul să permită doar conectări anonime.
- AntiWarez : Dacă acest fișier există, utilizatorilor le este interzis să încarce fișiere care există deja pe server.
- Redenumire automată : Redenumește automat fișierele încărcate dacă există un fișier cu același nume.
- Bind : Leagă serverul la o anumită adresă IP și un port. De exemplu, Bind 21 se leagă la portul 21 pe toate adresele disponibile.
- BrokenClientsCompatibility : Permite compatibilitatea cu clienții FTP care nu respectă strict standardele FTP.
- ChrootEveryone : Dacă este activat, restricționează toți utilizatorii la directorul lor principal.
- CreateHomeDir : Creează automat directoarele principale dacă acestea nu există atunci când un utilizator se conectează.
- Rezistență la clienți : Crește rezistența împotriva greșelilor frecvente făcute în configurațiile și comenzile clientului.
- Daemonizare : Când acest fișier există, Pure-FTPd va rula ca un daemon.
- DisplayDotFiles : Controlează dacă fișierele cu puncte (fișiere ascunse) sunt afișate sau nu.
- DontResolve : Împiedică rezoluția DNS pentru înregistrarea în jurnal și controlul lățimii de bandă, ceea ce poate îmbunătăți performanța.
- ExtAuth : Specifică un program extern pentru autentificarea utilizatorului.
- ForcePassiveIP : Forțează serverul să raporteze o anumită adresă IP clienților în mod pasiv.
- FSCharset : Setează setul de caractere al sistemului de fișiere, util pentru numele de fișiere non-ASCII.
- IPv4Only sau IPv6Only : Restricționează serverul să asculte doar adresele IPv4 sau IPv6.
- KeepAllFiles : Previne ștergerea oricăror fișiere de pe server.
- LDAPConfigFile : Specifică calea către fișierul de configurare LDAP pentru autentificare.
- LimitRecursion : Limitează adâncimea recursivității și numărul de fișiere afișate în listele de directoare.
- MaxClientsNumber : Limitează numărul maxim de clienți simultani.
- MaxClientsPerIP : Restricționează numărul de conexiuni simultane de la o singură adresă IP.
- MaxDiskUsage : Limitează procentul de utilizare a discului.
- MaxIdleTime : Setează timpul maxim de inactivitate în minute înainte de deconectarea unui client.
- MaxLoad : Deconectează clienții sau refuză conexiuni noi peste o anumită sarcină de sistem.
- MinUID : Setează UID-ul minim pentru autentificare. Utilizatorii cu un UID mai mic nu se pot autentifica.
- MySQLConfigFile : Specifică calea către fișierul de configurare MySQL pentru autentificarea bazată pe baze de date.
- NoAnonymous : Dezactivează autentificările anonime dacă acest fișier există.
- NoChmod : Dezactivează comanda CHMOD pe server.
- NoRename : Împiedică utilizatorii să redenumească fișierele.
- PassivePortRange : Definește un interval de porturi pentru conexiuni pasive (de exemplu, 30000 35000).
- PerUserLimits : Setează limite pentru fiecare utilizator în parte.
- PureDB : Specifică calea către fișierul bazei de date de utilizatori PureDB.
- Cotă : Setează limitele cotei pentru utilizatori.
- SyslogFacility : Definește facilitatea syslog pentru înregistrare în jurnal.
- TLSCipherSuite : Specifică cifrurile TLS permise pentru conexiunile criptate.
- TrustedGID : Specifică o listă de ID-uri de grup de încredere pentru autentificare.
- UMask : Setează umaska implicită pentru crearea fișierelor.
- UnixAuthentication : Activează autentificarea în baza de date de parole UNIX.
- UploadScript : Specifică un script care va fi rulat după o încărcare reușită.
Această listă acoperă cele mai utilizate opțiuni de configurare, dar nu este exhaustivă. Consultați întotdeauna documentația oficială Pure-FTPd sau utilizați
pure-ftpd-wrapper --help
comandă pentru cele mai precise și complete informații.
Exemple
Iată o listă de setări Pure-FTPd în /etc/pure-ftpd/conf/ cu exemple pentru a ilustra tipurile de valori pe care le acceptă:
- AltLog :
AltLog clf:/var/log/pureftpd.log- Exemplu:
clf:/var/log/pureftpd.log
- Exemplu:
- AnonymousOnly : Activați prin crearea unui fișier numit
AnonymousOnly.- Nu este nevoie de valoare.
- AntiWarez : Activați prin crearea unui fișier numit
AntiWarez.- Nu este nevoie de valoare.
- Redenumire automată : Activați prin crearea unui fișier numit
AutoRename.- Nu este nevoie de valoare.
- Legătură :
Bind 21- Exemplu:
192.168.0.1,21
- Exemplu:
- BrokenClientsCompatibility : Activați prin crearea unui fișier numit
BrokenClientsCompatibility.- Nu este nevoie de valoare.
- ChrootEveryone : Activați prin crearea unui fișier numit
ChrootEveryone.- Nu este nevoie de valoare.
- CreateHomeDir : Activare prin crearea unui fișier numit
CreateHomeDir.- Nu este nevoie de valoare.
- CustomerProof : Activați prin crearea unui fișier numit
CustomerProof.- Nu este nevoie de valoare.
- Daemonizare : Activați prin crearea unui fișier numit
Daemonize.- Nu este nevoie de valoare.
- DisplayDotFiles : Activați prin crearea unui fișier numit
DisplayDotFiles.- Nu este nevoie de valoare.
- DontResolve : Activați prin crearea unui fișier numit
DontResolve.- Nu este nevoie de valoare.
- ExtAuth :
ExtAuth /path/to/authenticator- Exemplu:
/usr/local/bin/myauth
- Exemplu:
- ForcePassiveIP :
ForcePassiveIP 192.168.0.1- Exemplu:
192.168.0.1
- Exemplu:
- Set de caractere FSCharset :
FSCharset utf-8- Exemplu:
utf-8
- Exemplu:
- IPv4Only sau IPv6Only : Activați prin crearea unui fișier numit
IPv4OnlysauIPv6Only.- Nu este nevoie de valoare.
- KeepAllFiles : Activați prin crearea unui fișier numit
KeepAllFiles.- Nu este nevoie de valoare.
- Fișier de configurare LDAP :
LDAPConfigFile /etc/pure-ftpd/ldap.conf- Exemplu:
/etc/pure-ftpd/ldap.conf
- Exemplu:
- LimitRecursivitate :
LimitRecursion 10000 8- Exemplu:
10000 8(10000 de fișiere, 8 niveluri de adâncime)
- Exemplu:
- Număr maxim de clienți :
MaxClientsNumber 50- Exemplu:
50
- Exemplu:
- CliențiMaximiPerIP :
MaxClientsPerIP 8- Exemplu:
8
- Exemplu:
- UtilizareMaxDisk :
MaxDiskUsage 95- Exemplu:
95(95%)
- Exemplu:
- Timp maxim de inactivitate :
MaxIdleTime 15- Exemplu:
15(15 minute)
- Exemplu:
- Încărcare maximă :
MaxLoad 4.0- Exemplu:
4.0
- Exemplu:
- UID minim :
MinUID 1000- Exemplu:
1000
- Exemplu:
- Fișier de configurare MySQL :
MySQLConfigFile /etc/pure-ftpd/mysql.conf- Exemplu:
/etc/pure-ftpd/mysql.conf
- Exemplu:
- NoAnonymous : Activați prin crearea unui fișier numit
NoAnonymous.- Nu este nevoie de valoare.
- NoChmod : Activați prin crearea unui fișier numit
NoChmod.- Nu este nevoie de valoare.
- NoRename : Activați prin crearea unui fișier numit
NoRename.- Nu este nevoie de valoare.
- IntervalPortPasiv :
PassivePortRange 30000 35000- Exemplu:
30000 35000
- Exemplu:
- Limite per utilizator :
PerUserLimits 8- Exemplu:
8(8 conexiuni simultane per utilizator)
- Exemplu:
- PureDB :
PureDB /etc/pure-ftpd/pureftpd.pdb- Exemplu:
/etc/pure-ftpd/pureftpd.pdb
- Exemplu:
- Cotă :
Quota 1000M- Exemplu:
1000M(1000 megaocteți)
- Exemplu:
- Facilitatea Syslog :
SyslogFacility ftp- Exemplu:
ftp
- Exemplu:
- TLSCipherSuite :
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3- Exemplu:
HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3
- Exemplu:
- IDG de încredere :
TrustedGID 1000- Exemplu:
1000
- Exemplu:
- Mască U :
UMask 133:022- Exemplu:
133:022(Fișiere: 133, Directoare: 022)
- Exemplu:
- UnixAuthentication : Activați prin crearea unui fișier numit
UnixAuthentication.- Nu este nevoie de valoare.
- ÎncărcareScript :
UploadScript /path/to/script- Exemplu:
/usr/local/bin/uploadscript
- Exemplu:
Aceste exemple ar trebui să clarifice modul de configurare a diverselor opțiuni în Pure-FTPd.
Monitorizare și întreținere
Verificați periodic jurnalele /var/log/pure-ftpd/pentru a depista orice activități neobișnuite sau erori.
Rezolvarea numelor de domeniu DNS folosind comanda dig pe Linux
Comanda dig din Linux, prescurtare de la „Domain Information Groper”, este un instrument de administrare a rețelei utilizat pentru interogarea serverelor DNS (Domain Name System) . Permite utilizatorilor să recupereze informații despre nume de domeniu, cum ar fi adrese IP, servere de mail (înregistrări MX) și alte înregistrări de resurse DNS. Utilizată în principal pentru depanarea problemelor DNS, dig oferă rezultate detaliate, inclusiv timpul de răspuns al interogărilor și serverul DNS care a furnizat informațiile.
Flexibilitatea și precizia sa îl fac un instrument preferat de administratorii de rețea pentru diagnosticarea problemelor DNS, testarea configurațiilor de domeniu și efectuarea de căutări DNS, comparativ cu comenzi mai simple, cum ar fi nslookup.
Folosește comanda dig pentru a rezolva un nume de domeniu
Rezolvarea problemei domeniului example.com:
dig example.com
Dacă domeniul poate fi rezolvat, rezultatul va fi similar cu acesta:
root@server1:~# dig howtoforge.com ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> howtoforge.com ;; opțiuni globale: +cmd ;; Răspuns primit: ;; ->>ANTET<<- cod de operare: INTEROGARE, stare: NOERROR, id: 50297 ;; flags: qr rd ra; INTEROGARE: 1, RĂSPUNS: 2, AUTORITATE: 0, SUPLIMENTAR: 1 ;; PSEUDOSECȚIE OPT: ; EDNS: versiune: 0, flags:; udp: 512 ;; SECȚIUNE DE ÎNTREBĂRI: ;howtoforge.com. ÎNTR-O ;; SECȚIUNE DE RĂSPUNSURI: howtoforge.com. 299 ÎNTR-O 104.24.0.68 howtoforge.com. 299 ÎNTR-O 104.24.1.68 ;; Timp de interogare: 233 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; CÂND: Miercuri, 8 august 2024, ora 12:35:15 CEST ;; DIMENSIUNE MSG primit: 75
Cum se interoghează serverul DNS local cu dig
Pentru a verifica dacă serverul web local este responsabil pentru acest domeniu, utilizați următoarea comandă:
dig @localhost example.com
Obțineți numele serverului de mail cu dig
Dacă vrei să știi care server de mail este responsabil pentru gestionarea mailurilor de pe example.com, poți folosi comanda:
dig MX example.com
Rezultatul va fi similar cu acesta:
root@server1:~# dig MX howtoforge.com ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> MX howtoforge.com ;; opțiuni globale: +cmd ;; Răspuns primit: ;; ->>ANTET<<- cod de operare: INTEROGARE, stare: NOERROR, id: 14115 ;; flags: qr rd ra; INTEROGARE: 1, RĂSPUNS: 1, AUTORITATE: 0, SUPLIMENTAR: 1 ;; PSEUDOSECȚIE OPT: ; EDNS: versiune: 0, flags:; udp: 512 ;; SECȚIUNE ÎNTREBĂRI: ;howtoforge.com. ÎN MX ;; SECȚIUNE RĂSPUNS: howtoforge.com. 299 ÎN MX 10 mail.howtoforge.com. ;; Timp de interogare: 205 msec ;; SERVER: 8.8.4.4#53(8.8.4.4) ;; CÂND: Miercuri, 8 august 2024, ora 10:36:30 CEST ;; DIMENSIUNEA MESAJULUI PRIVAT: 64
Obțineți mai multe opțiuni ale comenzii dig
Pentru a obține toate opțiunile disponibile pentru comanda dig, puteți rula:
dig --help
O descriere mai detaliată veți găsi în pagina de manual a comenzii dig:
man dig
Iată un fragment din pagina de manual a instrumentului care explică din plin cum se utilizează dig:
O invocare tipică a comenzii dig arată astfel: dig @server name type unde: server este numele sau adresa IP a serverului de nume care urmează să fie interogat. Aceasta poate fi o adresă IPv4 în notație zecimală punctată sau o adresă IPv6 în notație delimitată prin două puncte. Când argumentul server furnizat este un nume de gazdă, dig rezolvă acel nume înainte de a interoga serverul de nume respectiv. Dacă nu este furnizat niciun argument server, dig consultă /etc/resolv.conf; dacă se găsește o adresă acolo, interoghează serverul de nume la acea adresă. Dacă oricare dintre opțiunile -4 sau -6 este utilizată, atunci se vor încerca doar adresele pentru transportul corespunzător. Dacă nu se găsesc adrese utilizabile, dig va trimite interogarea către gazda locală. Se afișează răspunsul de la serverul de nume care răspunde. name este numele înregistrării resursei care urmează să fie căutată. type indică ce tip de interogare este necesar - ANY, A, MX, SIG etc. type poate fi orice tip de interogare valid. Dacă nu este furnizat niciun argument type, dig va efectua o căutare pentru o înregistrare A.
Dacă doriți, puteți forța comanda dig să elimine anumite secțiuni din afișajul rezultatului. De exemplu, pentru a comuta afișarea liniilor de comentarii în rezultat sau în secțiunea de întrebări a unei interogări atunci când este returnat un răspuns, utilizați opțiunile +nocomments și +noquestion.
Următoarea captură de ecran prezintă aceste opțiuni în acțiune:
Obțineți serverele de nume ale unui domeniu
Continuând, puteți interoga înregistrări NS precum înregistrări MX prin comanda dig. Iată cum puteți face acest lucru:
dig NS example.com
Următorul este rezultatul pe care l-a produs această comandă în cazul nostru:
Obțineți adresa IP a unui nume de domeniu cu comanda dig
Dacă doriți ca dig să afișeze doar adresa IP a serverului, utilizați opțiunea +short.
De exemplu:
dig example.com +short
Dacă doriți să interogați mai multe site-uri web/servere simultan, puteți crea o listă de nume într-un fișier și puteți transmite numele fișierului respectiv ca intrare pentru opțiunea -f a comenzii dig.
-f fișier Mod batch: dig citește o listă de cereri de căutare pentru a fi procesate din fișierul dat. Fiecare linie din fișier ar trebui să fie organizată în același mod în care ar fi prezentată ca interogări către dig folosind interfața din linia de comandă.
Iată un exemplu:
[mai mult...]


