Ce face os.Chown
os.Chown setează utilizatorul (uid) și grupul (gid) care dețin fișierul, ca chown din terminal. Valoarea -1 înseamnă „nu schimba”: os.Chown(f, -1, gid) schimbă doar grupul.
Pe Linux și macOS doar root poate da un fișier altui utilizator. Un utilizator obișnuit poate schimba grupul doar într-unul din grupurile lui. Pe Windows funcția returnează mereu o eroare.
Dacă name este o legătură simbolică, Chown schimbă fișierul spre care arată. os.Lchown schimbă chiar legătura.
Parametri
| Parametru | Descriere |
|---|---|
name |
Calea fișierului. |
uid |
ID-ul utilizatorului nou; -1 = neschimbat. |
gid |
ID-ul grupului nou; -1 = neschimbat. |
Ce returnează
nil la succes sau eroarea (de obicei „operation not permitted”).
Exemple
Exemplul 1: Setarea proprietarului curent
Să dai fișierul propriului utilizator este mereu permis.
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("raport.txt", []byte("ok"), 0o644)
err := os.Chown("raport.txt", os.Getuid(), os.Getgid())
fmt.Println("Chown:", err)
err = os.Chown("raport.txt", -1, -1) // nu schimbă nimic
fmt.Println("Chown cu -1:", err)
}
Rezultat
Chown: <nil>
Chown cu -1: <nil>
Exemplul 2: Fără drepturi de administrator
Un utilizator obișnuit nu poate da fișierul lui root (uid 0).
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("raport.txt", []byte("ok"), 0o644)
if os.Geteuid() == 0 {
fmt.Println("rulezi ca root, Chown ar reuși")
return
}
err := os.Chown("raport.txt", 0, 0)
fmt.Println(err)
}
Rezultat
chown raport.txt: operation not permitted
Exemplul 3: Lchown pe o legătură simbolică
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("date.txt", []byte("123"), 0o644)
os.Symlink("date.txt", "scurtatura")
fmt.Println("Lchown:", os.Lchown("scurtatura", os.Getuid(), os.Getgid()))
fmt.Println("Chown:", os.Chown("scurtatura", os.Getuid(), os.Getgid()))
}
Rezultat
Lchown: <nil>
Chown: <nil>
Greșeli frecvente
- Rulezi programul ca utilizator obișnuit și te aștepți ca
Chownspre alt utilizator să meargă. Ai nevoie deroot(de exemplu prinsudo). - Scrii numele utilizatorului în loc de ID. Funcția primește numere; numele se transformă cu
os/user.Lookup.
Comenzi înrudite
os.Chmod: Schimbă drepturile de acces (citire, scriere, execuție) ale unui fișier sau director.os.Getuid: Returnează ID-ul utilizatorului și al grupului care rulează programul (reale și efective) și lista grupurilor.os.Symlink: Creează o legătură simbolică (scurtătură) spre alt fișier; Readlink citește spre ce arată.