[Ubuntu 12.04] Als root Programm installieren

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich habe gelesen, dass das root-Konto unter Distro Ubuntu deaktiviert ist. Aber wenn das der Fall ist, warum kann ich zum Beispiel den Befehl:
sudo su -
ausführen?

Es geht darum, dass ich ein Programm als root installieren soll. Dazu habe ich folgenden Befehl erstmal ausgeführt:
sudo su -
Ich bin mir allerdings nicht sicher ob ich damit auch schon als root bin. Zumal, wie gesagt sollte das root-Konto ja deaktiviert sein und ich habe nichts aktivierte, also kann ich nicht als root sein, oder?

Jedenfalls nach dem Ausführen dieses Befehls, bekomme ich folgenden Prompt:
root@ratna-Laptop:~#

Es sieht also aus, als wäre ich wirklich root. Aber was ist mit dem "deaktiviert"-Widerspruch?

Danke zusammen.

Schöne Grüße aus Rheinland,

Eure Ratna:D
 
Hi

wo hast du das gelesen?
Ubuntu (oder irgendein anderes Linux) ohne root-Möglichkeit wäre nicht zu gebrauchen.
Genauso wie Windows ohne Adminkonto.
 
root ist nicht deaktiviert, es ist nur nicht möglich sich direkt einzuloggen ohne vorher ein Passwort zuzuweisen.

Statt root sollte man sudo (substitude user) nutzen, da hier die Gefahr das System zu schädigen geringer ist. Dazu solltest Du Befehle mit "sudo $COMMAND" ausführen.
 
Hallo sheel und Navy:D,

danke für die Erklärungen. Eine Sache diesbzg. verstehe ich noch nicht:
Wenn ich mich in meine Instanz einer Datenbank einloggen möchte, dann muss ich folgendes eintippen
sudo su - db2inst1

Soweit ich weis, su bewirkt, dass wir uns als root befinden. Da dachte ich -> wenn ich aber zum Beispiel mich als root einlogge, dann müsste ich ja nur noch sudo - db2inst1 ausführen. Es klappt aber nicht.

Wisst Ihr vielleicht warum?

Vielen Dank:rolleyes:

Schöne Grüße aus Rheinland,
Eure Ratna
 
Hi,

ich glaub du hast sudo und su ein bisschen falsch verstanden.
Nochmal ganz grundlegend :) :
sudo (substitute userdo) führt den nachfolgenden Befehl einfach nur mit root-Rechten aus(oder als anderer Benutzer per Parameter)
su (switch user) macht genau das, den benutzer wechseln, ohne argument auch zu root, das "-" heißt einach nur, dass die Shell zu einer Login-Shell gemacht wird(siehe man bash, was genau eine Login-Shell ist und wo der Unterschied ist).

Da in Ubuntu per default der Login als Root deaktiviert ist kann man sich nicht direkt über su als root einloggen, aber per sudo su [-] da dann der su Befehl schon mit root-Rechten ausgeführt ist(alternativ kannst du auch sudo -s machen, dann startet sudo eine Shell mit Root-Rechten).

Um zu deinem Problem zurückzukehren, bei dir müsste eigentlich einfach nur sudo db2inst1 reichen um das Programm erfolgreich mit root-Rechten zu starten. Oder, wenn du dich vorher als root eingeloggt hast(wie auch immer) einach nur db2inst1 weil du dann ja schon als root drin bist.

Noch ne kleine Anmerkung, du kannst unter Ubuntu auch dem Root-user ein Password geben(sudo passwd) und dich dann direkt über su - einloggen, aber wie oben schon erwähnt ist das bei Ubuntu ja bewusst aus sicherheitstechnischen Gründen deaktivert und man kommt auch ganz gut ohne aus.

Gruß
Matt
 
Hallo Matt:),

vielen Dank für die Eklärungen. Ich habe recherchiert:
das Zeichen "-" bewirkt, dass einige Konfigurationsdatein während des Logins durchlaufen werden. Dies ist unter anderem nötig, da in Verbindung mit su [db2inst1] vielleicht bestimmte Informationen zu Umgebungsvariablen vom Benutzer [db2inst1] nötig sind.

Und du hast Recht, statt sudo su - db2inst1, hätte ich auch sudo su db2inst1 ausführen können:

ratna@ratnaslaptop:~$ sudo su db2inst1
db2inst1@ratnaslaptop:/home/ratna$

ratna@ratnaslaptop:~$ sudo su - db2inst1
db2inst1@ratnaslaptop:~$

Man sieht, beide Befehle switchen auf den DB2-Benutzer db2inst1. Der Unterschied zwischen mit "-" und ohne "-" ist, dass unterschiedliche Ausgangsverzeichnisse nach dem Befehl im Prompt stehen. Ich wüsste gerne, was hierbei noch wichtig sind bzw. was für Unterschiede hier noch zu beachten sind.

Also, soweit ich bisher verstehe:
1. Man möchte mit jedem dieser Befehle einen Benutzerwechsel bewirken. In diesem Fall ist es der Benutzer db2inst1. Wie zu vermuten ist, dies ist der User von einer DB2-Instanz. Dieser Benutzer wurde während der Installation des DB2-Produktes erstellt.

2. ICH NEHME AN, dass bei der Installation vom DB2-Produkt notwendige Umgebungsvariablen für den Benutzer db2inst1 gesetzt wurden. Ich kann jedenfalls aus beiden Ausgangsverzeichnissen direkt die Verbindung zu meiner Datenbank herstellen.

3. Es ist mir lediglich ein Unterschied zu sehen, was mit "-" und ohne "-" angeht. DER AUSGANGSVERZEICHNIS:
Mit "-" = db2inst1@ratnaslaptop:~$
der Benutzer db2inst1 befindet sich direkt im "DB2-Datenbank"-Verzeichnis. Denn, wenn ich ls ausführe, kommen folgende Dateien bzw. Verzeichnisse raus:
db2inst1
db2inst1.db
examples.desktop
sqllib

Ohne "-" = db2inst1@ratnaslaptop:/home/ratna$
der Benutzer db2inst1 befindet sich im home-Verzeichnis von ratna? Beim Ausführen von ls tauchen unter anderem folgende Dateien auf:
Arbeitsfläche
Bilder
Dokumente
Downloads
examples.desktop
Musik
Öffentlich
...
...

Nun zu meiner Frage:
Liege ich richtig mit der Annahme, dass "-" bestimmte Konfigurationsdatein während des Logins durchläuft? Diese Konfigurationsdatein, die nichts anderes als Shell-Skripte sind, bewirken in diesem Fall "lediglich", dass der Benutzer db2inst1 sich doch bitte direkt im DB-Datenbank-Verzeichnis befindet?

Vielen Dank.

Schöne Grüße aus Rheinland,
Eure Ratna:)
 
Hi,

db2inst1 ist also dein Benutzer ich dachte das wär ein Programm, das macht einiges klarer :)

Also zu dem "-" nochmal, wie du ja schon gelesen hast startet das eine Login-Shell, was genau eine Login-Shell siehst du unter der Man-Page von bash('man bash') in dem Kapitel "INVOCATION", hier mal einen Absatz daraus, der das wichtigste beschreibt:

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

Semantisch gesehen bedeutet das, dass ohne "-"(also ohne Login-Shell) einfach nur die Identität gewechselt wird, aber die Arbeitsumgebung unverändert bleibt, mit "-" wird wirklich als der Benutzer eingeloggt, sprich alle seine Konfigurationsdateien geladen, in sein Home-Verzeichnis gewechselt, etc.

Zu deinem Benutzer db2inst1, du kannst dir ja mal seine Einstellungen(Home-Verzeichnis etc angucken), und zwar mit 'grep db2inst1 /etc/passwd' (als root). Wegen dem Login, ich glaube eher weniger dass das was mit Umgebungsvariablen zu tun hat sondern eher mit dem Benutzer selbst. Ich kenne DB2 jetzt zwar nicht, aber ich kenne das so von postgreSQL so, dass per Default der Datenbankserver als der Benutzer 'postgres' läuft, und wenn man sich dann als der Systembenutzer postgres einloggt, konnte man sich auch direkt mit dem Datenbankserver verbinden.

Gruß
 
Hallo Matt :),


dass ohne "-"(also ohne Login-Shell) einfach nur die Identität gewechselt wird, aber die Arbeitsumgebung unverändert bleibt

in der Tat, siehe:
ratna@ratnaslaptop:~$ sudo su db2inst1
db2inst1@ratnaslaptop:/home/ratna$

Ich befinde mich ja im Homeverzeichnis von ratna?

Allerdings kann ich mir keine Situationen vorstellen, wann man so einen Identitätswechsel ohne veränderte Umgebung gebrauchen könnte. Könntest du vielleicht ein Beispiel dazu geben?

Ich bin mal klenlich:rolleyes::
wieso kann ich eigentlich von
db2inst1@ratnaslaptop:/home/ratna$
aus auf die Datenbank zugreifen -wir haben doch gesagt, dass dies nur ein Identitätswechsel ist, was bedeutet, dass die Arbeitsumgebung noch von ratna ist-?
Ich kann jedenfalls von
ratna@ratnaslaptop:~$
NICHT auf die Datenbank zugreifen.

Och je, hoffentlich habe ich die Fragen verständlich ausgedrückt.:p

Vielen Dank.

Schöne Grüße aus Rheinland,
Eure Ratna:D
 
Hi,

um das zu beantworten, musst du erst genau definieren was "auf die Datenbank zugreifen" bedeutet. Startest du ein Programm oder was genau meinst du?

Wenn es ein Programm ist(wovon ich einfach mal ausgehen) liegt es vermutlich irgendwie um PATH, also unter /bin oder /usr/bin oder so.

Was genau passiert denn wenn du das(was auch immer es genau ist ;) ) als Benutzer ratna machst?

Gruß
Matt
 
Hallo Matt,

"auf die Datenbank zugreifen" :
1. ich kann eine Verbindung mit der Datenbank herstellen(die Datenbank heißt in dem Fall sample).
2. ich kann die Tabellen von sample anzeigen lassen.

Name der Datenbank = sample
Anzahl der Tabellen = sehr viel :p

Konkret:

ratna@ratnaslaptop:~$ sudo su db2inst1
db2inst1@ratnaslaptop:/home/ratna$ db2 connect to sample

Database Connection Information

Database server = DB2/LINUXX8664 9.7.5
SQL authorization ID = DB2INST1
Local database alias = SAMPLE

db2inst1@ratnaslaptop:/home/ratna$ db2 "select * from employee"

EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE JOB EDLEVEL SEX BIRTHDATE SALARY BONUS COMM
------ ------------ ------- --------------- -------- ------- ---------- -------- ------- --- ---------- ----------- ----------- -----------
000010 CHRISTINE I HAAS A00 3978 1995-01-01 PRES 18 F 1963-08-24 152750,00 1000,00 4220,00
000020 MICHAEL L THOMPSON B01 3476 2003-10-10 MANAGER 18 M 1978-02-02 94250,00 800,00 3300,00

Eklärung:
Mit
ratna@ratnaslaptop:~$ sudo su db2inst1
db2inst1@ratnaslaptop:/home/ratna$
habe ich mich als der Instanz-User db2inst1 eingeloggt. Da hierzu der Befehl ohne "-" erfolgte, ist die Umgebung weiterhin die Arbeitsumgebung vom "normalen" Benutzer ratna. Richtig?

Trotzdem kann ich mit dem Befehl
db2 connect to sample
eine Verbindung mit der Datenbank namens sample herstellen. Siehe oben. Also, mir scheint es, sobald sich der Instanz-Benutzer(db2inst1) im Prompt befindet, dann ist die Verbindung zu DB2 sofort hergestellt:

db2inst1@ratnaslaptop:/home/ratna$ db2start
SQL1026N The database manager is already active.

Ich möchte ja nicht meckern, warum das möglich ist. Eher möchte ich wissen, warum das möglich ist. Meine Vermutung:
Für den Instanz-User db2inst1 sind die Umgebungsvariablen gesetzt(wo kann man sich die gesetzten Umgebungsvariablen eigentlich ansehen?). Der Hacken: wir haben doch aber gesagt, dass die Umgebung weiterhin die Umgebung von ratna ist. Also, Widerspruch.

Nun, wenn ich als ratna im Terminal bin und versuche, mich mit der Datenbank sample zu verbinde, dann klappt es nicht:

ratna@ratnaslaptop:~$ db2 connect to sample
No command 'db2' found, did you mean:
Command 'dbd' from package 'netatalk' (universe)
Command 'sb2' from package 'scratchbox2' (universe)
Command 'd52' from package 'd52' (universe)
db2: command not found

Dass es in diesem Fall nicht klappt, ist es mir halbwegs klar = da die Umgebungsvariablen noch nicht gesetzt sind. Ich bin mir nicht sicher, ob man unter DB2 unter einem "normalen" Benutzer sich mit der Datenbank verbinden kann. Sprich, ob es überhaupt möglich ist, von ratna aus auf die Datenbank zuzugreifen. ODER ob das nur mit "speziellen" Benutzern möglich ist, zum Beispiel db2inst1 (der Benutzer db2inst1 wurde bei der Installation von DB2 automatisch erstellt).

Vielen Dank für die Kommentare.

Schöne Grüße aus Rheinland,
Eure Ratna:)
 
Zurück