Pagina 1 di 2
Problema creazione utenti
Inviato: gio 22 dic 2005, 10:07
da simplex
Ho installato Slackware 10.2 su un vecchio pc che avevo a casa.
Finita l'installazione configuro xorg, le consle, ecc. ecc. e creo un utente...mi loggo e sorpresa, la shell dice
adduser non dà nessun tipo di errore, però le directory degli utenti hanno i seguenti permessi rwx--x--x, ho provato a cambiarli ma nulla da fare.
Qualcuno sa cosa c'è che non va?
Inviato: gio 22 dic 2005, 10:17
da Paoletta
in /etc/passwd c'è la riga dedicata all'utente appena creato? se sì, postala
Inviato: gio 22 dic 2005, 14:06
da l1q1d
hai chiamato il tuo pc "I have no name!"?
posta il risultato di
Inviato: gio 22 dic 2005, 14:19
da simplex
Creo l'utente test, il file passwd sembra a posto:
@l1q1d: l'host è thermos, il prob. è che al posto di "test@thremos" esce fuori "i ha no name!@thermos" e non crea correttamente la directory dell'uaser poichè mancano pure i permessi.

Inviato: gio 22 dic 2005, 18:05
da Paoletta
cambia il nome utente da "test" in "guest"; "test" è il nome di un eseguibile e la shell va in tilt quando legge la riga di /etc/passwd in questione;
Inviato: gio 22 dic 2005, 20:15
da simplex
Ho già provato con altri nomi di utenti ma nulla da fare....
Inviato: ven 23 dic 2005, 10:42
da Paoletta
ed usando useradd al posto di adduser?
Inviato: ven 23 dic 2005, 11:16
da Eurialo
Paoletta ha scritto:cambia il nome utente da "test" in "guest"; "test" è il nome di un eseguibile e la shell va in tilt quando legge la riga di /etc/passwd in questione;
la shell non ha idea di cosa sia un login... /bin/login effettua il login ed e' chiamato da agetty (nel caso piu' comune) ... la shell ancora non entra in gioco! (ti sembra possibile che la shell possa aprire un file in cui e' specificato che shell usare?

)
pero' sul fatto che sia bash a combinare questo inghippo hai pienamente ragione... lo possiamo vedere esaminando shell.c:
Codice: Seleziona tutto
void
get_current_user_info ()
{
struct passwd *entry;
/* Don't fetch this more than once. */
if (current_user.user_name == 0)
{
entry = getpwuid (current_user.uid);
if (entry)
{
current_user.user_name = savestring (entry->pw_name);
current_user.shell = (entry->pw_shell && entry->pw_shell[0])
? savestring (entry->pw_shell)
: savestring ("/bin/sh");
current_user.home_dir = savestring (entry->pw_dir);
}
else
{
current_user.user_name = _("I have no name!");
current_user.user_name = savestring (current_user.user_name);
current_user.shell = savestring ("/bin/sh");
current_user.home_dir = savestring ("/");
}
endpwent ();
}
}
quindi vediamo che e' la getpwuid() chiamata sullo uid dell'utente che da' un risultato non voluto (ovvero NULL)... perche'?
ce lo dice "man getpwuid":
Codice: Seleziona tutto
RETURN VALUE
The getpwnam() and getpwuid() functions return a pointer to a passwd structure, or NULL if the matching
entry is not found or an error occurs. If an error occurs, errno is set appropriately. If one wants to
check errno after the call, it should be set to zero before the call.
quindi.... se proprio non riesci a capire qual'e' l'errore e hai assoluta necessita' di far funzionare quei login... metti mano al codice di bash in modo che faccia un printf del numero dell'errore e confrontalo con quelli riportati in "man getpwuid".
si,ok, questa e' una soluzione abbastanza complicatina... ma nel frattempo avresti aggiunto una feature a bash e potresti proporla al team di sviluppo!
ciao!
Inviato: ven 23 dic 2005, 13:33
da Paoletta
a shell non ha idea di cosa sia un login... /bin/login effettua il login ed e' chiamato da agetty (nel caso piu' comune) ... la shell ancora non entra in gioco! (ti sembra possibile che la shell possa aprire un file in cui e' specificato che shell usare?)
ok, chiedo scusa...c'è sempre da imparare!

Inviato: ven 23 dic 2005, 17:35
da Paoletta
P.S. in effetti avevo pensato che, dopo aver effettuato il login, la bash andasse a leggere quel file (per prendere come parametro il nome dell'utente) e questo non è per nulla incompatibile con il fatto che sia /bin/login a fare il login;
difatti la bash lo legge poichè, dal codice che riporti, il contenuto della riga relativa a chi si logga è puntato da entry;
Inviato: ven 23 dic 2005, 17:51
da simplex
Ok proverò! Grazie mille

Inviato: ven 23 dic 2005, 18:57
da Eurialo
Paoletta ha scritto:P.S. in effetti avevo pensato che, dopo aver effettuato il login, la bash andasse a leggere quel file (per prendere come parametro il nome dell'utente) e questo non è per nulla incompatibile con il fatto che sia /bin/login a fare il login;
difatti la bash lo legge poichè, dal codice che riporti, il contenuto della riga relativa a chi si logga è puntato da entry;
quel che voglio dire e' che la bash lo legge proprio dal suo codice sorgente... per questo e' alquanto improbabile che trovando un nome che casualmente e' uguale ad un comando "decida" di provare ad eseguirlo!
altra cosa sarebbe se negli script di inizializzazione della bash (profile, bashrc e simili) ci fosse una cosa come "source /etc/passwd".. ma questa non c'e'! dal momento che avevi messo in relazione il nome dell'utente con quello del programma e che questa relazione e' figurabile solo in quest'ultimo caso, credevo che ti riferissi proprio a questa eventualita'!
Inviato: ven 23 dic 2005, 19:43
da Paoletta
non ho guardato il codice della bash prima di rispondere ed ho pensato che chiamare un utente come un comando fosse fonte di qualche problema (non necessariamente leagto all'esecuzione dello stesso)...devo prendere l' abitudine di esaminare il codice sorgente, e mi sa che dopo questo errore lo farò più spesso; ciao e grazie!

@simplex: per quel che devi fare ti può essere utile anche la funzione perror;
Inviato: dom 25 dic 2005, 15:13
da Paoletta
simplex, prova anche a dare un'occhiata ai permessi di /etc/passwd (che devono essere "-rw-r--r--");
questo perchè ho trovato questa pagina web, che forse ti può servire:
http://www.comptechdoc.org/os/linux/how ... lbash.html
Inviato: gio 29 dic 2005, 21:00
da simplex
Una cosa importante: ho sisteatio i permessi di /etc/passwd, che erano --x------ ???? Però non funzionava corretamente la creazione degli utenti...forse qulche pacchetto era corrotto...Ho reinstallato tuto ed ora funziona alla grande!
Grazie a tutti