Linux KNOWLEDGE by Spreech 

 home |
Too Cool for Internet Explorer

Eigener Webkalender

Bloged in Programme,Server by manuel.schwab Dienstag Juli 31, 2007

Wer in Sachen Kalender nicht auf google, yahoo oder ähnliches zurückgreifen will, der kann sich auch einfach seinen eigenen installieren und einrichten.

Einen sehr guten Webkalender gibt es hier: http://www.k5n.us/webcalendar.php

auf mysql von außen zugreifen

Bloged in Server by manuel.schwab Dienstag Juli 31, 2007

Damit auf einen mysql Server auch von außen zugegriffen werden kann, und nicht nur von „localhost“, muss eine Änderung vorgenommen werden.

nano /etc/mysql/my.cnf
bind-address 0.0.0.0

0.0.0.0 = Zugriff von außen als auch von intern
127.0.0.1 = Zugriff nur von intern
SERVERIP = Zugriff nur von außen

Ein Zugriff von außen ist generell gefährlich. Daher sollten die Rechte via phpmyadmin entsprechend sicher eingerichtet werden.

ssh Rootzugang verbieten

Bloged in Server by manuel.schwab Dienstag Juli 31, 2007

Um zu erreichen dass sich keine „roots“ via ssh verbinden können,

nano /etc/ssh/sshd_config

Und dort den PermitRootLogin auf no setzen:

PermitRootLogin no

Proftpd mit MySQL (Inkl. Quota) auf Debian Etch

Bloged in Server by manuel.schwab Sonntag Juli 29, 2007

Hinweis: Hier handelt es sich ausschließlich um die Konfiguration für virtuelle User! Es handelt sich nicht um Systemuser!

1. Benötigte Pakete installieren:

aptitude install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

2. Dem mysql user root ein Passwort zuweisen

mysqladmin -u root password yourrootsqlpassword

3. ProFTPD mit MySQL Support installieren

aptitude install proftpd-mysql

Als Installationsvariante die standalone – nicht die inetd Variante wählen.

4. Als nächsten Schritt erstellen wir eine Ftpgruppe (ftpgroup) und einen Benutzer (ftpuser) auf welche alle virtuellen Benutzer weitergeleitet werden. Die Gruppen- und Benutzernummer 2001 kann durch eine beliebige freie Nummer ersetzt werden.

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c „proftpd user“ -g ftpgroup ftpuser

5. Nun erstellen wir die mysql Datenbank (ftp) und den mysql Benutzer proftpd, mit welchem wir uns später auf der Datenbank einloggen:

mysql -u root -p

create database ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO ‚proftpd’@’localhost‘ IDENTIFIED BY ‚password‘;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO ‚proftpd’@’localhost.localdomain‘ IDENTIFIED BY ‚password‘;
FLUSH PRIVILEGES;

6. Nun werden die benötigten Tabellen in der Datenbank ftp angelegt:

USE ftp;

CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default “,
`gid` smallint(6) NOT NULL default ‚5500‘,
`members` varchar(16) NOT NULL default “,
KEY `groupname` (`groupname`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=’ProFTP group table‘;

CREATE TABLE `ftpquotalimits` (
`name` varchar(30) default NULL,
`quota_type` enum(‚user‘,’group‘,’class‘,’all‘) NOT NULL default ‚user‘,
`per_session` enum(‚false‘,’true‘) NOT NULL default ‚false‘,
`limit_type` enum(’soft‘,’hard‘) NOT NULL default ’soft‘,
`bytes_in_avail` int(10) unsigned NOT NULL default ‚0‘,
`bytes_out_avail` int(10) unsigned NOT NULL default ‚0‘,
`bytes_xfer_avail` int(10) unsigned NOT NULL default ‚0‘,
`files_in_avail` int(10) unsigned NOT NULL default ‚0‘,
`files_out_avail` int(10) unsigned NOT NULL default ‚0‘,
`files_xfer_avail` int(10) unsigned NOT NULL default ‚0‘
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default “,
`quota_type` enum(‚user‘,’group‘,’class‘,’all‘) NOT NULL default ‚user‘,
`bytes_in_used` int(10) unsigned NOT NULL default ‚0‘,
`bytes_out_used` int(10) unsigned NOT NULL default ‚0‘,
`bytes_xfer_used` int(10) unsigned NOT NULL default ‚0‘,
`files_in_used` int(10) unsigned NOT NULL default ‚0‘,
`files_out_used` int(10) unsigned NOT NULL default ‚0‘,
`files_xfer_used` int(10) unsigned NOT NULL default ‚0‘
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default “,
`passwd` varchar(32) NOT NULL default “,
`uid` smallint(6) NOT NULL default ‚5500‘,
`gid` smallint(6) NOT NULL default ‚5500‘,
`homedir` varchar(255) NOT NULL default “,
`shell` varchar(16) NOT NULL default ‚/sbin/nologin‘,
`count` int(11) NOT NULL default ‚0‘,
`accessed` datetime NOT NULL default ‚0000-00-00 00:00:00‘,
`modified` datetime NOT NULL default ‚0000-00-00 00:00:00′,
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=’ProFTP user table‘ AUTO_INCREMENT=30 ;

quit;

7. Es folgt die Konfiguration von proftpd

Die Datei /etc/proftpd/proftpd.conf öffnen und IPv6 ausschalten indem UseIPv6 auf off gestellt wird.

In der gleichen Datei folgendes am Ende hinzfügen:

DefaultRoot ~

# The passwords in MySQL are encrypted using CRYPT

SQLAuthTypes Plaintext Crypt
SQLAuthenticate users groups

# used to connect to the database
# databasename@host database_user user_password

SQLConnectInfo ftp@localhost proftpd password

# Here we tell ProFTPd the names of the database columns in the „usertable“
# we want it to interact with. Match the names with those in the db
SQLUserInfo ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the „grouptable“
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members

# set min UID and GID – otherwise these are 999 each
SQLMinID 500

# create a user’s home directory on demand if it doesn’t exist
SQLHomedirOnDemand on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE „count=count+1, accessed=now() WHERE userid=’%u'“ ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE „modified=now() WHERE userid=’%u'“ ftpuser

# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT „name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = ‚%{0}‘ AND quota_type = ‚%{1}'“

SQLNamedQuery get-quota-tally SELECT „name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = ‚%{0}‘ AND quota_type = ‚%{1}'“

SQLNamedQuery update-quota-tally UPDATE „bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = ‚%{6}‘ AND quota_type = ‚%{7}'“ ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT „%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}“ ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
RootLogin off
RequireValidShell off
SQLNamedQuery gettally SELECT „ROUND((bytes_in_used/1048576),2) FROM ftpquotatallies WHERE name=’%u'“
SQLNamedQuery getlimit SELECT „ROUND((bytes_in_avail/1048576),2) FROM ftpquotalimits WHERE name=’%u'“
SQLNamedQuery getfree SELECT „ROUND(((ftpquotalimits.bytes_in_avail-ftpquotatallies.bytes_in_used)/1048576),2) FROM ftpquotalimits,ftpquotatallies WHERE ftpquotalimits.name = ‚%u‘ AND ftpquotatallies.name = ‚%u'“

SQLShowInfo LIST „226“ „UserQuota – Benutzt: %{gettally}MB von %{getlimit}MB. Sie haben noch %{getfree}MB verfügbaren Speicherplatz.“

SQLNamedQuery gettally2 SELECT „ROUND((bytes_xfer_used/1048576),2) FROM ftpquotatallies WHERE name=’%u'“
SQLNamedQuery getlimit2 SELECT „ROUND((bytes_xfer_avail/1048576),2) FROM ftpquotalimits WHERE name=’%u'“

SQLNamedQuery getfree2 SELECT „ROUND(((ftpquotalimits.bytes_xfer_avail-ftpquotatallies.bytes_xfer_used)/1048576),2) FROM ftpquotalimits,ftpquotatallies WHERE ftpquotalimits.name = ‚%u‘ AND ftpquotatallies.name = ‚%u'“

SQLShowInfo LIST „226“ „UserQuota – Benutzt: %{gettally2} MB von %{getlimit2} MB. Sie haben noch %{getfree2} MB verfügbaren Traffic.“

Anschließend wird die Datei /etc/proftpd/modules.conf editiert.
Hier muss der Bereich

LoadModule mod_sql_postgres.c

auskommentiert werden.

Anschließend starten wir Proftpd neu:

/etc/init.d/proftpd restart

8. Datenbank FTP mit Inhalten füllen

Als erstens kommt ein Eintrag in die Tabelle ftpgroup. Sie enthält Informationen über den Gruppennamen, die Gruppenid und den Benutzernamen des ftp users welcher vorher angelegt wurde.

mysql -u root -p

USE ftp;

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES (‚ftpgroup‘, 2001, ‚ftpuser‘);

In dieser Tabelle müssen zukünftig keine neuen Einträge vorgenommen werden!

Immer wenn ein neuer User angelegt werden muss, so müssen hierfür nur Einträge in den Tabellen ftpquotalimits und ftpuser vorgenommen werden!

Nun erstellen wir unseren ersten Benutzer: exampleuser mit einem Quota von 15 mb und dem Passwort secret.

INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES (‚exampleuser‘, ‚user‘, ‚true‘, ‚hard‘, 15728640, 0, 0, 0, 0, 0);

INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, ‚exampleuser‘, ’secret‘, 2001, 2001, ‚/home/www.example.com‘, ‚/sbin/nologin‘, 0, “, “);

quit;

Nun kann mithilfe eines FTP Clients versucht werden, ob man sich mit den angelegten Benutzerdaten exampleuser:secret einloggen kann.

9. Weitere Benutzer über phpmyadmin anlegen

Zum weiteren anlegen von Benutzern kann man bequem phpmyadmin benutzen.
Wie erwähnt müssen hierfür nur Einträge in den Tabellen ftpuser und ftpquotalimits gemacht werden.

Hier werden die wichtigsten Tabellenfelder erklärt:

ftpuser Tabelle:

  • userid: Der Name des virtuellen Proftpd Benutzers (z.B. exampleuser).
    passwd: Das unverschlüsselte Passwort des Benutzers
    uid: Die Benutzerid der FTP User welche vorher angelegt wurde (i.d.R. 2001)
    gid: Die Gruppenid der FTP User welche vorher angelegt wurde (i.d.R. 2001)
    homedir: Das Homeverzeichnis des Benutzers. Wenn dies nicht existiert, wird dieses angelegt sobald sich der Benutzer das erste Mal einloggt. Der Benutzer kann keine anderen Verzeichnisse, welche außerhalb des Homedirs liegen, einsehen.
    shell: Standarteintrag /sbin/nologin ist ok.

    ftpquotalimits Tabelle: (die folgend genannten Felder sind die wichtigsten. Die restlichen werden automatisch ausgefüllt und müssen nicht beachtet werden!)

  • name: Der Name des virtuellen Beenutzers (z.B. exampleuser)
  • quota_type: user oder group. Normal: user
  • per_session: true oder false. True bedeutet dass das quota limit nur für eine Session gültig ist. Wenn dem User beispielsweise ein Quota von 15 mb zugewiesen wird und dieser während der aktuellen Session 15 mb uploaded, kann dieser nichts mehr uploaden. Aber wenn er sich ausloggt und neu einloggt, kann er wieder 15 mb uploaden. false bedeutet, dass die 15 mb fix sind. Es spielt keine Rolle ob er sich ausloggt und neu einloggt.
  • limit_type: hard oder soft. Ein hard quota limit ist ein Limit, welches niemals abläuft. Während ein soft quota limit vorübergehend ablaufen kann. Standard: hard.
  • bytes_in_avail: Upload limit in Bytes (z.B 15728640 für 15 MB). 0 = unbegrenzt.
  • bytes_out_avail: Download limit in Bytes (z.B 15728640 für 15 MB). 0 = unbegrenzt.
  • bytes_xfer_avail: Traffic Limit in Bytes (Summe aus Up+Download). 0 = unbegrenzt.
  • files_in_avail:Upload limit in Dateien. 0 = unbegrenzt.
  • files_out_avail:Download limit in Dateien. 0 = unbegrenzt.
  • files_xfer_avail:Traffic Limit in Dateien (Summe aus Up+Download). 0 = unbegrenzt.
  • Die ftpquotatallies Tabelle benutzt Proftpd nur intern um die Quotas zu managen. Hier ist kein Eintrag erforderlich!

    Hinweis: Wie erwähnt kann über diese Variante nur virtuellen Usern ein Quota eingeräumt werden via mysql. Systemuser befinden sich nicht in der mysql Datenbank und ihnen kann daher auf diesen Weg kein Quota eingeräumt werden. Die einfachste Methode ist, dass man den Systemusern verbietet sich einzuloggen und man diese anschließend als Virtuelle User in der Datenbank anlegt.

    Hierzu kann man folgendes in die proftpd.conf einfügen:

    AllowUser ftpuser

    AllowGroup ftpgroup

    DenyAll

    Somit darf sich nur noch der user ftpuser auf dem ftpserver einloggen. Da alle virtuellen User über den ftpuser gesammelt werden, klappt es nun super, dass sich nur die virtuellen user einloggen können!

    Angepasst/übersetzt von (DANKE!):
    http://www.howtoforge.com/proftpd_mysql_virtual_hosting_debian_etch
    http://www.proftpd.de/43.0.html

    PHP Script: Passwort generieren

    Bloged in php,Server,Uncategorized by manuel.schwab Montag Juli 23, 2007
    [?php

    $pool = „qwertzupasdfghkyxcvbnm“;

    $pool .= „23456789“;

    $pool .= „WERTZUPLKJHGFDSAYXCVBNM“;

    srand ((double)microtime()*1000000);

    for($index = 0; $index < 5; $index++) { $pass_word .= substr($pool,(rand()%(strlen ($pool))), 1); } ?]

    Danke an: http://www.stadtaus.com/tutorials/content_cat_7_id_19.php

    Postfix: neue Mailadresse anlegen

    Bloged in Server by manuel.schwab Donnerstag Juli 12, 2007

    1. nano /etc/aliases

    Eintrag vornehmen.

    Alias: User

    2. newaliases

    3. nano /etc/postfix/sasl_sender

    Emailadresse User

    4. postmap sasl_sender

    5. /etc/init.d/postfix reload

    IT Bücher: www.terrashop.de

    Bloged in php,Sonstiges,SQL by manuel.schwab Montag Juli 9, 2007

    Eine klasse Auswahl an IT Büchern (nicht nur IT Bücher) erhält man unter www.terrashop.de .

    Habe mir eben ein php & mysql Kompendium bestellt und dabei sage und schreibe 40 % gegenüber dem Kauf bei amazon gespart!

    Speziell bei meinem Fall nun war es sogar so, dass terrashop.de der einzigste weit und breit war, der die aktuelle Auflage (Beginn 2007) da hatte. U.a. bei Amazon schlug die Suche danach leider fehl, dort wurde nur die alte Auflage (2005) angeboten.

    Ich kann terrashop.de nur weiterempfehlen, vom Preis und von der Auswahl her!
    Und ich denke vom Versand etc. her auch. Da muss ich aber erst mal abwarten, bis das Buch da ist :-) Danach werde ich weiter berichten.

    Ordner mit Ordnerinhalt löschen

    Bloged in Befehle,Problembehebung,Server by manuel.schwab Sonntag Juli 8, 2007

    Wer komplette Ordner mit dem kompletten Inhalt löschen will, für den ist
    rmdir
    die falsche Methode.

    Denn rmdir kann nur leere Verzeichnise löschen!

    Lösung:

    rm -r *.*

    Powered by Wordpress, theme by Dimension 2k