BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Herausfinden welche Befehle von make ausgeführt werden

Möchte man herausfinden welche Befehle von make(1) ausgeführt werden, kann make mit der -n Option aufgerufen werden. Danach werden alle Befehle angezeigt, jedoch nicht ausgeführt. Im folgenden Beispiel wird angezeigt, was ein make clean und ein make-doclean im FreeBSD Portsbaum ausführen:

# cd /usr/ports/ports-mgmt/portsopt
# make -n clean
cd /usr/ports/ports-mgmt/portsopt && make limited-clean-depends
echo "===> Cleaning for portsopt-1.4"
cd /usr/ports/ports-mgmt/portsopt && make do-clean

# make -n do-clean
if [ -d /usr/ports/ports-mgmt/portsopt/work ]; then if [ -w /usr/ports/ports-mgmt/portsopt/work ]; then /bin/rm -rf /usr/ports/ports-mgmt/portsopt/work; else echo "===> /usr/ports/ports-mgmt/portsopt/work not writable, skipping"; fi; fi
 Permalink

Aufgerufene Systemcalls eines Programms aufzeichen

Möchte man die Systemcalls aufzeichnen, welche von einem Programm aufgerufen werden, so kann man dazu truss verwenden. Damit truss eingesetzt werden kann, muss zuerst das procfs Dateisystem gemountet werden:

# mount_procfs procfs /proc

Ohne Optionen schickt truss die Ausgabe auf die Standard-Error-Ausgabe:

# truss <Befehl>

Durch das Verwenden der -d Option wird vor jedem Systemcall die Zeit angezeigt, die seit dem Aufrufen des Befehls vergangen ist, bis der Systemcall ausgeführt wurde. In folgendem Beispiel werden alle Systemcalls auf die Standard-Error Ausgabe ausgegeben, welche durch den sleep Befehl aufgerufen werden:

# truss -d sleep 1
0.000136889 mmap(0x0,3904,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 671559680 (0x28073000)
0.000414299 munmap(0x28073000,3904) = 0 (0x0)
0.000603429 __sysctl(0xbfbfe9f8,0x2,0x2806f738,0xbfbfe9f4,0x0,0x0) = 0 (0x0)
0.000799264 mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 671559680 (0x28073000)
0.000998731 issetugid() = 0 (0x0)
0.001246248 open("/etc/libmap.conf",O_RDONLY,0666) = 3 (0x3)
0.001419175 fstat(3,{mode=-r--r--r-- ,inode=49501,size=3055,blksize=4096}) = 0 (0x0)
0.001612775 read(3,"# /etc/libmap.conf for FreeBSD 6"...,4096) = 3055 (0xbef)
0.001860572 read(3,0x28077000,4096) = 0 (0x0)
0.002042159 close(3) = 0 (0x0)
0.002239391 open("/var/run/ld-elf.so.hints",O_RDONLY,00) = 3 (0x3)
0.002414274 read(3,"Ehnt\^A\0\0\0\M^@\0\0\0\M-+\0\0"...,128) = 128 (0x80)
0.002610388 lseek(3,0x80,SEEK_SET) = 128 (0x80)
0.002782477 read(3,"/lib:/usr/lib:/usr/lib/compat:/u"...,171) = 171 (0xab)
0.002967975 close(3) = 0 (0x0)
0.003166045 access("/lib/libc.so.6",0) = 0 (0x0)
0.003359087 open("/lib/libc.so.6",O_RDONLY,00) = 3 (0x3)
0.003532572 fstat(3,{mode=-r--r--r-- ,inode=16469,size=906276,blksize=4096}) = 0 (0x0)
0.003716395 read(3,"\^?ELF\^A\^A\^A\t\0\0\0\0\0\0\0"...,4096) = 4096 (0x1000)
0.003923404 mmap(0x0,925696,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_NOCORE,3,0x0) = 671592448 (0x2807b000)
0.004118680 mprotect(0x28140000,4096,PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
0.004304179 mprotect(0x28140000,4096,PROT_READ|PROT_EXEC) = 0 (0x0)
0.004487442 mmap(0x28141000,24576,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED,3,0xc5000) = 672403456 (0x28141000)
0.004695290 mmap(0x28147000,90112,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 672428032 (0x28147000)
0.004889169 close(3) = 0 (0x0)
0.005069080 mmap(0x0,36864,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 672518144 (0x2815d000)
0.005328890 sysarch(0xa,0xbfbfeb80) = 0 (0x0)
0.005506008 mmap(0x0,176,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 672555008 (0x28166000)
0.005712738 munmap(0x28166000,176) = 0 (0x0)
0.005887341 mmap(0x0,22384,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 672555008 (0x28166000)
0.006272585 munmap(0x28166000,22384) = 0 (0x0)
0.006495519 sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)
0.006731862 sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0)
1.006956751 nanosleep({1.000000000}) = 0 (0x0)
1.007179684 exit(0x0)
1.007179684 process exit, rval = 0

Möchte man die Ausgabe von truss in einer Datei speichern, kann die -o Option verwendet werden. Auch lassen sich die Systemcalls eines bereits laufenden Prozesses aufzeichnen, dazu muss nur die Prozess-ID mit der -p Option an truss übergeben werden. Folgendes Beispiel zeichnet die Systemcalls des laufenden portsnap Prozesses auf und speichert sie unter /tmp/portsnap.truss:

# portsnap fetch update &
[1] 20694
# truss -o /tmp/portsnap.truss -p 20694
[1] + Fertig

truss befindet sich auf FreeBSD bereits im Basissystem. Mehr Informationen zu truss findet man in der Manpage truss(1).

 Permalink

PDF-Datei in Textdatei umwandeln

Um eine PDF-Datei auf der Kommandozeile lesen zu können, kann diese mittels pdftotext in eine Textdatei umgewandelt werden. pdftotext wird mit xpdf ausgeliefert und befindet sich auf FreeBSD in graphics/xpdf Port. xpdf kann auch ohne graphische Unterstützung gebaut werden, so dass nur die Hilfsprogramme wie pdftotext und pdfinfo installiert werden, aber nicht xpdf selbst:

# cd /usr/ports/graphics/xpdf && make -DWITHOUT_X11 install clean

Nun kann die PDF-Datei umgewandelt werden. Damit die Formatierungen bestehen bleiben, was die Lesbarkeit verbessert, kann die Option -layout verwendet werden:

# pdftotext -layout <PDF-Datei>

Nun wird eine gleichnamige Textdatei mit der Endung txt im gleichen Verzeichnis erstellt.

Möchte man die Metainformationen einer PDF-Datei auslesen, kann dazu pdfinfo, welches ebenfalls mit xpdf installiert wird, verwendet werden:

# pdfinfo <PDF Datei>

Mehr Informationen findet man in den Manpages pdftotext(1) und pdfinfo(1).

 Permalink

Festplatten dauerhaft überwachen

Mit den smartmontools können nicht nur Festplatten auf Fehler überprüft, sondern mit der dazugehörigen smartd auch überwacht werden. Dazu müssen die smartmontools installiert sein. Diese findet man im FreeBSD Portbaum unter sysutils/smartmontools:

# cd /usr/ports/sysutils/smartmontools && make install clean

Nun kann eine Konfigurationsdatei für den smartd erstellt werden. Dazu wird zuerst die Vorlage kopiert:

# cp /usr/local/etc/smartd.conf.sample /usr/local/etc/smartd.conf

In der smartd.conf kann nun angegeben werden, welche Laufwerke überwacht werden sollen. Mit folgendem Eintrag werden alle gefundenen Laufwerke überwacht und Fehler und Warnungen werden an die angegebene E-Mailadresse gesendet:

DEVICESCAN -m <E-Mailadresse>

Nun kann manuell geprüft werden, welche Laufwerke gefunden werden und ob es smartd möglich ist, die Laufwerke zu überwachen. Der Test kann mit Ctrl + \ wieder beendet werden:

# /usr/local/sbin/smartd -d -c /usr/local/etc/smartd.conf
smartd version 5.37 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

Opened configuration file /usr/local/etc/smartd.conf
Drive: DEVICESCAN, implied '-a' Directive on line 23 of file /usr/local/etc/smartd.conf
Configuration file /usr/local/etc/smartd.conf was parsed, found DEVICESCAN, scanning devices
Device: /dev/ad4, opened
Device: /dev/ad4, found in smartd database.
Device: /dev/ad4, is SMART capable. Adding to "monitor" list.
Device: /dev/ad6, opened
Device: /dev/ad6, found in smartd database.
Device: /dev/ad6, is SMART capable. Adding to "monitor" list.
Monitoring 2 ATA and 0 SCSI devices
^\smartd received signal 3: Quit: 3
Memory still allocated for devices at exit is 0 bytes.
smartd is exiting (exit status 0)

Damit smartd automatisch gestartet wird, muss folgender Eintrag in der /etc/rc.conf gemacht werden:

smartd_enable="YES"

Nun kann smartd gestartet werden:

# /usr/local/etc/rc.d/smartd start

Alle Konfigurationsmöglichkeiten von smartd findet man in der Manpage smartd(8).

 Permalink

Ports testen und Pakete erstellen mit einer Tinderbox

Mit einer Tinderbox können FreeBSD Ports getestet und Pakete aus den Ports erstellt werden. Möchte man Ports für FreeBSD-7.0 oder FreeBSD 8-CURRENT testen, muss man auch eine solche Version installiert haben, da sich Aufgrund von ABI Änderungen, diese Versionen nicht mit FreeBSD-5.x oder FreeBSD-6.x testen lassen (vielen Dank an miwi für diesen Hinweis!). Die Tinderbox findet man in den FreeBSD Ports unter ports-mgmt/tinderbox:

# cd /usr/ports/ports-mgmt/tinderbox/ && make install clean

Im Konfigurationsmenü kann danach ausgewählt werden, was für eine Datenbank und was für ein Webserver verwendet wird und ob cvsup oder csup zum Aktualisieren der Quelldateien verwendet werden soll. Im folgenden Beispiel wird mySQL als Datenbank und ein Apache Webserver verwendet.

 [ ] PGSQL     With pgsql
 [X] MYSQL     With mysql
 [X] CSUP      Use csup for updates
 [ ] CVSUP     Use cvsup for updates
 [ ] WEB       Install web interface
 [X] WEB_EXP   Install the new web interface
 [X] APACHE    Use Apache for web interface
 [ ] LIGHTTPD  Use LightHTTPD for web interface

Ist noch kein Datenbank-Server installiert, muss dieser auch noch installiert werden:

# cd /usr/ports/databases/mysql50-server && make install clean

Nun kann die Webserverkonfiguration den eigenen Wünschen angepasst werden:

# vi /usr/local/etc/apache/httpd.conf

Sollen die Datenbank und der Webserver bei einem Systemstart automatisch gestartet werden, müssen die benötigten Einträge in /etc/rc.conf gemacht werden:

mysql_enable="YES"
apache_enable="YES"

Nun können mySQL und der Apache gestartet werden:

# /usr/local/etc/rc.d/apache.sh start
# /usr/local/etc/rc.d/mysql-server start

Danach kann mit der Konfiguration der Tinderbox begonnen werden:

# /usr/local/tinderbox/scripts/setup.sh

Dabei müssen verschieden Angaben gemacht werden:

Enter database driver (mysql pgsql): mysql
 
Does this host have access to connect to the Tinderbox database as a database administrator? (y/n)y
 
Enter database admin user [root]:<Benutzer>
Enter database host [localhost]:<DB Server>
Enter database name [tinderbox]:<Datenbankname>
Are these settings corrrect:
    Database Administrative User : root
    Database Host                : localhost
    Database Name                : tinderbox
(y/n)y
 
INFO: Checking to see if database tinderbox already exists on localhost ...
INFO: The next prompt will be for the root's password on the database server
localhost.
Enter password:<Passwort>
INFO: Database tinderbox does not exist.  Creating database tinderbox on localhost ...
INFO: The next prompt will be for root's password on the database server localhost.
Enter password:<Passwort>
DONE. INFO: Loading Tinderbox schema into tinderbox ... The next prompt will be for root's password to the tinderbox database. Enter password:<Passwort>
DONE. Enter the desired username for the Tinderbox database : <Benutzername> Enter the desired password for tinderbox : <Passwort> Are these the settings you want: Database username : tinderbox Database user password : **** (y/n)y INFO: Adding permissions to tinderbox for tinderbox ... INFO: The next prompt will be for root's password on the database server localhost. Enter password: <Passwort> DONE. INFO: Database configuration complete.

Nun müssen noch einige Dateien kopiert und angepasst werden:

# cp /usr/local/tinderbox/scripts/tinderbox.ph.dist /usr/local/tinderbox/scripts/tinderbox.ph

In der Datei /usr/local/tinderbox/scripts/tinderbox.ph müssen noch einige Variablen ausgefüllt werden. Verwendet man die neue Weboberfläche, müssen die Variablen für www auskommentiert und jene für www-exp einkommentiert werden:

$BUILD_ROOT      = '/usr/local/tinderbox';
$SUBJECT         = '<Betreff einer Tinderbox Mail>';
$SENDER          = '<Senderadresse>';
$SMTP_HOST       = '<Mailserver>';
$SERVER_HOST     = '<Tinderbox Server>'; 
 
$TINDERBOX_URI           = '/tb';
 
# for www:
#$SHOWBUILD_URI           = $TINDERBOX_URI . '/showbuild.php?name=';
#$SHOWPORT_URI            = $TINDERBOX_URI . '/showport.php?id=';
 
# for www-exp:
$SHOWBUILD_URI           = $TINDERBOX_URI . '/index.php?action=list_buildports&build=';
$SHOWPORT_URI            = $TINDERBOX_URI . '/index.php?action=describe_port&id=';

Danach müssen noch zwei PHP Scripts kopiert und angepasst werden:

# cp /usr/local/tinderbox/scripts/www-exp/inc_ds.php.dist /usr/local/tinderbox/scripts/www-exp/inc_ds.php
# cp /usr/local/tinderbox/scripts/www-exp/inc_tinderbox.php.dist /usr/local/tinderbox/scripts/www-exp/inc_tinderbox.php

Einträge in der /usr/local/tinderbox/scripts/www-exp/inc_ds.php:

$DB_HOST = '<DB Server>';
$DB_USER = '<DB User>';
$DB_PASS = '<DB Passwort>';

Einträge in der /usr/local/tinderbox/scripts/www-exp/inc_tinderbox.php:

 
$rootdir = '/usr/local/tinderbox';
$wwwrooturi  = '/tb';
$tinderbox_name  = '<Tinderbox Name>';
$tinderbox_title = '<Tinderbox Titel>';

Jetzt kann die Tinderbox initialisiert werden:

# cd /usr/local/tinderbox/scripts && ./tc init

Möchte man die Tinderbox über das Web-GUI steuern, muss noch der tinderd Dienst aktiviert werden:

# cp /usr/local/tinderbox/scripts/etc/rc.d/tinderd.sh /usr/local/etc/rc.d/
# chmod +x /usr/local/etc/rc.d/tinderd.sh
# echo 'tinderd_enable="YES"' >> /etc/rc.conf
# echo 'tinderd_directory="/usr/local/tinderbox/scripts"' >> /etc/rc.conf
# echo 'tinderd_flags="-nullfs"' >> /etc/rc.conf

Nun muss noch ein Benutzer für das Web-GUI erstellt werden:

# cd /usr/local/tinderbox/scripts && ./tc addHost
# ./tc addUser -u <Benutzername> -e <E-Mailadresse> -p <Passwort> -w
# ./tc setWwwAdmin -u <Benutzername>

Nun müssen noch die Einträge in der /usr/local/etc/apache/httpd.conf gemacht werden:

 Alias /tb/logs/ "/usr/local/tinderbox/logs/"
 Alias /tb/packages/ "/usr/local/tinderbox/packages/"
 Alias /tb/errors/ "/usr/local/tinderbox/errors/"
 Alias /tb/ "/usr/local/tinderbox/scripts/www-exp/"
 <Directory "/usr/local/tinderbox/">
         Order allow,deny
         Allow from all
 </Directory>

Danach kann der Apache neu gestartet werden:

# /usr/local/etc/rc.d/apache.sh restart

Als erstes wird ein Portbaum mit der Bezeichnung FreeBSD erstellt:

# cd /usr/local/tinderbox/scripts
# ./create PortsTree -p FreeBSD -d "FreeBSD ports tree" -w http://www.freebsd.org/cgi/cvsweb.cgi/ports/

Mit einer Tinderbox können Packet für verschieden FreeBSD Versionen erstellt werden. Folgender Befehl erstellt eine Tinderbox-Jail für FreeBSD 6.2:

# ./create Jail -j 6.2 -d "FreeBSD 6.2" -t RELENG_6_2

Nun wird der Tinderbox-Jail dem Portbaum zugewiesen:

# ./create Build -b 6.2-FreeBSD -j 6.2 -p FreeBSD -d "6.2-RELEASE with FreeBSD ports tree"

Es können nun auch weiter Tinderbox-Jails mit anderen FreeBSD Versionen und unterschiedliche Portbäume erstellt werden.

Danach können schon Ports, in diesem Beispiel www/fluxcms, getestet und Pakete dafür erstellt werden:

# ./tc addPort -b 6.2-FreeBSD -d www/fluxcms -r
# ./tinderbuild -nullfs -b 6.2-FreeBSD www/fluxcms

Die Logdateien und die Pakete können ganz einfach über das Web-GUI gefunden werden. Dieses ist über http://tinderboxserver/tb/ erreichbar.

Auch lassen sich bestehende Portbaume aktualisieren. Folgender Befehl aktualisiert den Portbaum welcher FreeBSD benannt wurde:

# ./tc updatePortsTree -p FreeBSD

Mehr Informationen zur Tinderbox findet man auf der Homepage http://tinderbox.marcuscom.com/.

Related Entries:
Tinderbox aufräumen
Wartezeit von tinderd ändern
Quellcode in der Tinderbox speichern
Tinderbox-Jail ohne Kompilieren erstellen
RSS-Feed der zuletzt gebauten Ports einer Tinderbox
Comments (4)  Permalink

pkg_updating: ports/UPDATING Meldungen anzeigen

Gestern Abend wurde pkg_updating in 8.0-CURRENT commited. Damit können sich nun Benutzer eines aktuellen CURRENT's Einträge aus ports/UPDATING anzeigen lassen, die installierte Ports betreffen oder nach denen sie suchen. Folgender Befehl durchsucht ports/UPDATING nach allen Einträgen, die einen installierten Port betreffen:

# pkg_updating

Möchte man nur Einträge seit dem 01.01.2007 anzeigen lassen, die einen installierten Port betreffen, benutzt man die -d Option:

# pkg_updating -d 20070101

Auch kann man nach Einträgen eines bestimmten Ports suchen:

# pkg_updating apache

Oder gleich eine Liste von gewünschten Ports übergeben:

# pkg_updating apache mysql perl

Auch hier kann mit einem Datum die Suche eingegrenzt werden. Im folgenden Beispiel werden nur Einträge der übergebenen Ports seit dem 01.06.2007 angezeigt:

# pkg_updating -d 20070601 apache mysql perl

Mehr Informationen zu pkg_updating findet man in der Manpage pkg_updating(1).

Comments (5)  Permalink

Herausfinden wieso ein Programm mit rc.d Skript nicht startet

Möchte man unter FreeBSD ein Programm mit dem rc.d Skript starten, dies schlägt aber fehl, so kann man in der /etc/rc.conf mit folgendem Eintrag zusätzliche Ausgaben aktivieren:

rc_debug="YES"

Im folgenden Beispiel ist die rc_debug Variable nicht gesetzt und der Apache wird auch nicht gestartet:

# /usr/local/etc/rc.d/apache2 start
#

Setzt man nun die rc_debug Variable, werden zusätzliche Informationen angezeigt:

# echo 'rc_debug="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/apache2 start
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2ssl_enable is set to NO.
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2_enable is set to NO.

Gemäss der Ausgabe ist die enable Variable nicht gesetzt. Überprüft man das nun, sieht man, dass sich ein Schreibfehler eingeschlichen hat:

# grep apache /etc/rc.conf
apache_enable="YES"

Ist der Fehler korrigiert, startet nun auch der Apache wie gewünscht:

# /usr/local/etc/rc.d/apache2 start
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2ssl_enable is set to NO.
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2_enable is set to YES.
/usr/local/etc/rc.d/apache2: DEBUG: pid file (/var/run/httpd.pid): not readable.
/usr/local/etc/rc.d/apache2: DEBUG: run_rc_command: evaluating apache2_precmd().
Performing sanity check on apache2 configuration:
Syntax OK
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2limits_enable is set to NO.
Starting apache2.
/usr/local/etc/rc.d/apache2: DEBUG: run_rc_command: _doit: /usr/local/sbin/httpd
Mehr Informationen zu den rc.conf Variablen findet man in der Manpage rc.conf(5).
 Permalink

Mehrere SSH Verbindungen mit einer Authentifizierung

Möchte man mehrere SSH Verbindung zu einem Rechner aufbauen, aber nur einmal das Benutzerpasswort oder das Zertifikatspasswort eingeben, kann man ControlMaster von OpenSSH verwenden. Einfach folgende Zeilen in die ~/.ssh/config Datei einfügen:

Host *
ControlMaster auto
ControlPath ~/.ssh/%r@%h:%p

Nun wird beim ersten Verbindungsaufbau zum Rechner das Passwort abgefragt und ein Socket unter ~/.ssh/ erstellt. Baut man nun weitere Verbindungen zum selben Rechner auf, wird man automatisch ohne Passwortabfrage eingeloggt. Sobald die erste Verbindung beendet wird, wird auch der Socket entfernt und man muss sich wieder ganz normal mit Passwort auf dem Rechner anmelden.

Mehr Informationen zu ControlMaster von OpenSSH findet man in der Manpage ssh_config(5).

Comments (1)  Permalink

Datei mit OpenSSL ver- und entschlüsseln

Möchte man eine Datei verschlüsseln, jedoch nicht mit privaten und öffentlichen Schlüsseln sondern mit einem Passwort arbeiten, so kann man OpenSSL dazu nehmen. Mit folgendem Befehl wird die Datei "datei" mit dem Blowfish-Algorithmus verschlüsselt und als datei.enc gespeichert:

# openssl enc -blowfish -salt -in datei -out datei.enc
enter bf-cbc encryption password: <Passwort>
Verifying - enter bf-cbc encryption password: <Passwort>

Nun kann die ursprüngliche Datei gelöscht werden:

# rm -P datei

Soll nun die Datei wieder entschlüsselt und als Datei "datei" gespeichert werden, kann einfach folgender Befehl verwendet werden:

# openssl enc -d -blowfish -in datei.enc > datei
enter bf-cbc decryption password: <Passwort>

OpenSSL befindet sich natürlich auf FreeBSD und OpenBSD im Basissystem. Mehr Informationen zu OpenSSL findet man in der Manpage openssl(1) und in den darin unter SEE ALSO verwiesenen Manpages.

 Permalink

Systemzugang für Benutzer auf SFTP beschränken

Möchte man bestimmte Benutzer nur per sftp(1) aufs System lassen, so kann man scponly dazu verwenden. scponly findet man im FreeBSD Portbaum unter shells/scponly:

# cd /usr/ports/shells/scponly && make install clean

Im danach folgenden Konfigurationsmenu kann man auswählen, welche zusätzlichen Protokolle ausser SFTP zugelassen werden sollen. Mit SCPONLY_SCP wird neben SFTP auch scp erlaubt. Wählt man die Option SCPONLY_CHROOT, lassen sich die Benutzer auch noch in eine chroot einsperren.

Um scponly bei einem Benutzer zu aktivieren, muss einfach die Shell des Benutzers auf /usr/local/bin/scponly gewechselt werden:

# chsh <Benutzer>
Login: <Benutzer>
Password: $1$xxxxxxxxxxxxxxxxxxxxxxx.
Uid [#]: <UID>
Gid [# or name]: >GID>
Change [month day year]:
Expire [month day year]:
Class: guest
Home directory: /home/<Benutzer>
Shell: /usr/local/bin/scponly
Full Name: <Name>
Office Location:
Office Phone:
Home Phone:
Other information:
:x

Hat man die chroot-Option ausgewählt, kann mit einem Script ein Benutzer angelegt werden, welcher gleich in eine chroot eingesperrt wird:

# cd /usr/local/share/examples/scponly/ && /bin/sh setup_chroot.sh
Next we need to set the home directory for this scponly user.
please note that the user's home directory MUST NOT be writeable
by the scponly user. this is important so that the scponly user
cannot subvert the .ssh configuration parameters.

for this reason, a writeable subdirectory will be created that
the scponly user can write into.

-en Username to install [scponly]<Benutzername>

-en home directory you wish to set for this user [/home/scponly]<home Verzeichnis>

-en name of the writeable subdirectory [incoming]<Schreibbares Unterverzeichnis>

creating /home/scponly/incoming directory for uploading files

please set the password for scponly:
Changing local password for scponly
New Password:<Passwort>
Retype New Password:<Passwort>
if you experience a warning with winscp regarding groups, please install
the provided hacked out fake groups program into your chroot, like so:
cp groups /home/scponly/bin/groups

Nun muss noch ein mini-devfs in die chroot gemountet werden:

# /usr/local/etc/rc.d/scponlyc start

Der Benutzer wird nun in sein home-Verzeichnis eingesperrt und hat nur für das schreibbare Unterverzeichnis Schreibrechte. Mehr Informationen zu scponly findet man in der Manpage scponly(8).

 Permalink
Prev Next211-220/325