Оптимизируем FreeRADIUS для защиты беспроводной сети с помощью Heimdal-Kerberos. Часть 1 Михаил Кондрин $./configure --prefix=/usr --sysconfdir=/etc --enable-heimdal-krb5 $ make # make install prefix = /usr exec_prefix = ${prefix} sysconfdir = /etc localstatedir = ${prefix}/var sbindir = ${exec_prefix}/sbin logdir = ${localstatedir}/log/radius raddbdir = ${sysconfdir}/raddb radacctdir = ${logdir}/radacct name = radiusd confdir = ${raddbdir} run_dir = ${localstatedir}/run/radiusd db_dir = ${raddbdir} libdir = ${exec_prefix}/lib pidfile = ${run_dir}/${name}.pid max_request_time = 30 cleanup_delay = 5 max_requests = 1024 listen { type = auth ipaddr = * port = 0 } hostname_lookups = no allow_core_dumps = no regular_expressions = yes extended_expressions = yes log { destination = files file = ${logdir}/radius.log stripped_names = no auth = yes } checkrad = ${sbindir}/checkrad security { max_attributes = 200 reject_delay = 1 status_server = yes } proxy_requests = no $INCLUDE clients.conf $INCLUDE policy.conf thread pool { start_servers = 5 max_servers = 32 min_spare_servers = 3 max_spare_servers = 10 max_requests_per_server = 0 } modules { $INCLUDE ${confdir}/modules/ $INCLUDE eap.conf } $INCLUDE sites-enabled/ client localhost { ipaddr = 127.0.0.1 secret = testinpass } client 192.168.0.0/16 { secret = testinpass } policy { } eap { default_eap_type = peap timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no max_sessions = 2048 tls { certdir = ${confdir}/certs cadir = ${confdir}/certs private_key_password = whatever private_key_file = ${certdir}/server.pem certificate_file = ${certdir}/server.pem CA_file = ${cadir}/ca.pem dh_file = ${certdir}/dh random_file = ${certdir}/random fragment_size = 1024 include_length = yes check_crl = no cipher_list = "DEFAULT" make_cert_command = "${certdir}/bootstrap" } ttls { default_eap_type = mschapv2 copy_request_to_tunnel = yes use_tunneled_reply = yes virtual_server = "inner-tunnel" } peap { default_eap_type = mschapv2 copy_request_to_tunnel = yes use_tunneled_reply = yes virtual_server = "inner-tunnel" } mschapv2 { } } authorize { preprocess mschap eap files } authenticate { Auth-Type PAP { krb5 } Auth-Type MS-CHAP { mschap } eap } post-auth { noop } server inner-tunnel { $INCLUDE sites-enabled/default } DEFAULT Auth-Type = PAP kadmin -l add -r radius/server.example.ru ktutil get radius/server.example.ru krb5 { } user = radius group = radius ----------------------------------------------------------------------------------------------------------------- Управление правами доступа к LUN Иван Коробко Листинг 1. Определение идентификатора тома по папке подключения $path = "C:\LUNs\Фотогалерея " $letter = "k:\" $obj=Get-WmiObject -class Win32_Volume -computername localhost $obj | ? {$_.caption -like $path+"*"} Листинг 2. Подключение тома как диска $provider = New-Object Microsoft.CSharp.CSharpCodeProvider $params = New-Object System.CodeDom.Compiler.CompilerParameters $params.GenerateInMemory = $True $refs = "System.dll $params.ReferencedAssemblies.AddRange($refs) $txtCode = @" using System.Runtime.InteropServices; class mBox { [DllImport("kernel32.dll", EntryPoint = "SetVolumeMountPointA")] public static extern int SetVolumeMountPointA(string DiskLetter,string VolumeGUID); public void Mount(string letter,string volume) { SetVolumeMountPointA(letter,volume); } } "@ $results = $provider.CompileAssemblyFromSource($params, $txtCode) $results $mAssembly = $results.CompiledAssembly $i = $mAssembly.CreateInstance("mBox") $r = $i.Mount($letter, $_.deviceID) Листинг 3. Копирование ACL $path = "C:\LUNs\Фотогалерея " $letter = "k:\" … Set-Acl -Path $letter -AclObject (Get-Acl $path) Листинг 4. Отключение тома как диска $provider = New-Object Microsoft.CSharp.CSharpCodeProvider $params = New-Object System.CodeDom.Compiler.CompilerParameters $params.GenerateInMemory = $True $refs = "System.dll" $params.ReferencedAssemblies.AddRange($refs) $txtCode = @" using System.Runtime.InteropServices; class mBox { [DllImport("kernel32.dll", EntryPoint = "DeleteVolumeMountPointA")] public static extern int DeleteVolumeMountPointA(string DiskLetter); public void UnMount(string letter) { DeleteVolumeMountPointA(letter); } } "@ $results = $provider.CompileAssemblyFromSource($params, $txtCode) $results $mAssembly = $results.CompiledAssembly $i = $mAssembly.CreateInstance("mBox") $r = $i. UnMount ($letter) ----------------------------------------------------------------------------------------------------------------- Управление Linux-системами с помощью m23 Сергей Яремчук $ wget -T1 -t1 -q http://m23.sourceforge.net/m23-Sign-Key.asc -O – | apt-key add - $ nano /etc/apt/source.list deb http://switch.dl.sourceforge.net/project/m23/m23inst ./ $ sudo apt-get update $ sudo apt-get install m23 $ cd /tmp $ wget http:///work.php -O work.php $ sudo sh work.php ----------------------------------------------------------------------------------------------------------------- Этот загадочный MTU Рашид Ачилов ${fwcmd} add 700 <сделать-что-то> log tcp from { 192.168.0.0/16 or 10.0.0.0/8 } to 10.54.200.0/24 tcpflags syn ng_ipfw_load="YES" ng_tcpmss_load="YES" setup_tcpmss_fix() { case ${use_tcpmss_fix} in [Yy][Ee][Ss]) if [ -n "${set_tcpmss}" ]; then ngctl mkpeer ipfw: tcpmss 100 setfix ngctl msg ipfw:100 config \ { inHook=\"setfix\" outHook=\"setfix\" maxMSS=${set_tcpmss} } ${fwcmd} add 700 netgraph 100 log tcp from { 192.168.0.0/16 or 10.0.0.0/8 } to ${inet} tcpflags syn ${fwcmd} add 705 netgraph 100 log tcp from ${inet} to { 192.168.0.0/16 or 10.0.0.0/8 } tcpflags syn fi ;; esac } use_tcpmss_fix="YES" set_tcpmss=1402 ----------------------------------------------------------------------------------------------------------------- Проект ownCloud. Организация облачного хранения и обмена файлами Ренат Гараев # yum install mysql-server -y # chkconfig mysqld on # chkconfig httpd on # mysqladmin -u root password 'secret_password' # chown apache:apache -R owncloud* #setenforce 0 yum search mbstring yum search php-zip #yum install gcc make libxml2-devel libcurl-devel freetype-devel libpng-devel libjpeg-turbo-devel gmp-devel mysql-devel httpd-devel -y ./configure '--enable-zip' '--enable-mbstring' '--with-mysql' '--with-libdir=lib64' # make && make install && make clean ;Максимальное количество памяти, выделяемое скрипту по умолчанию ;memory_limit = 128M ;Максимальный размер POST-данных, которое сможет получить PHP ;post_max_size = 8M ;Максимальное количество файлов, которые могут быть отправлены (upload) на сервер за один запрос max_file_uploads = 20 > sc stop WebClient > sc start WebClient #yum install davfs http://ip_adres/owncloud/files/webdav.php user password #mount -t davfs http://ip_adres/owncloud/files/webdav.php /mnt/davfs -o rw # openssl genrsa -out ca.key 1024 # openssl req -new -key ca.key -out ca.csr # openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt # mv ca.crt /etc/pki/tls/certs # mv ca.key /etc/pki/tls/private/ca.key # mv ca.csr /etc/pki/tls/private/ca.csr SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key ----------------------------------------------------------------------------------------------------------------- Добро пожаловать на планету AIX Антон Борисов Листинг 1. Подключение к системе происходит по старому доброму протоколу telnet anthony@laptop:~> telnet 192.168.0.200 Листинг 2. Вывод информации о системе и дисковым разделам # uname -a # mount Листинг 3. Таблица маршрутизации и настройка сетевых карт доступна через команды netstat/ifconfig # netstat -rn # ifconfig -a Листинг 4. Проверка системных сообщений при старте AIX # alog -t boot -o Листинг 5. Проверка системных сообщений при старте AIX # lscfg -vp Листинг 6. Файловая система фактически представлена в виде LVM-томов # lsvg -l rootvg # cat /etc/filesystems Листинг 7. Запуск определенного сервиса # startsrc -s nfsd # lssrc -a | grep nfs ----------------------------------------------------------------------------------------------------------------- Принтер как источник угрозы. Антируководство по взлому локальных сетей. Часть 2 Игорь Савчук savgor@corelink# telnet 168.188.1.12 > allow:0 > quit > allow:168.188.18.57 > allow:168.188.21.0 255.255.255.0 > allow:list > quit http://198.68.0.1/TopAccess/Administrator/Setup/ScanToFile/list.htm http://198.68.0.1/TopAccess/Administrator/Login/Login.htm http://198.68.0.1/TopAccess//Administrator/Setup/ScanToFile/list.htm praeda.pl target_file tcp-port project_name output_file [-ssl] ./praeda.pl target.lst 80 pentest1 data-file.log Syslog-svr: 128.255.*.* Syslog-max: 100 Syslog-priority: 5 ----------------------------------------------------------------------------------------------------------------- Управление IP-телефонными аппаратами Александр Морозов [office](!) type=friend nat=no host=dynamic context=context1 language=ru context=tensor-out dtmfmode=rfc2833 callgroup=1 pickupgroup=1 disallow=all allow=g729 allow=alaw allow=ulaw qualify=yes directmedia=no subscribecontext=subscribe [101](office) username=101 secret=123456 [102](office) username=102 secret=78910 ----------------------------------------------------------------------------------------------------------------- HTML5 – технология будущего. Продолжаем погружение Кирилл Сухов sessionStorage.setItem('name','Vasya'); …......................................................... var name = sessionStorage.getItem('name'); sessionStorage.removeItem('name'); localStorage.setItem('title','Vasya'); …......................................................... var name = localStorage.getItem('title'); localStorage.removeItem('title'); var db = openDatabase('my_db','1.0','test',2*1024*1024,function(){ console.log('БД открыта!') } , function(){ console.log('новая БД!') } ); db.transaction( function(t){ t.executeSql( 'SELECT title FROM documents', [], function(){ }); } db.transaction( function(t){ t.executeSql( 'INSERT INTO documents ( title, type ) VALUES (?, ?)', ['Order',3]); } t.executeSql( 'SELECT title FROM documents WHERE created < ?' , [min_create], function(t, result){ for(i=o; i < result.rows.length; i++){ doc_name = result.rows.item(i).title; console.log( doc_name); } }); var kids = [ { name: "Anna" }, { name: "Betty" }, { name: "Christine" } ]; var db = window.openDatabase("CandyDB", "1", "My candy store database", 1024); db.transaction(function(tx) { for (var index = 0; index < kids.length; index++) { var kid = kids[index]; tx.executeSql("INSERT INTO kids (name) VALUES (:name);", [kid], function(tx, results) { document.getElementById("display").textContent = "Saved record for " + kid.name + " with id " + results.insertId; }); } }); var kids = [ { name: "Anna" }, { name: "Betty" }, { name: "Christine" } ]; var request = window.indexedDB.open("CandyDB", "My candy store database"); request.onsuccess = function(event) { var objectStore = event.result.objectStore("kids"); for (var index = 0; index < kids.length; index++) { var kid = kids[index]; objectStore.add(kid).onsuccess = function(event) { document.getElementById("display").textContent = "Saved record for " + kid.name + " with id " + event.result; }; } }; CACHE MANIFEST CACHE: style/default.css images/sound-icon.png images/background.png NETWORK: comm.cgi FALLBACK: main_image.jpg backup_image.jpg AddType text/cache-manifest .manifest setInterval(function () { do_update(); }, 1000000 ); function do_update() { cache = window.applicationCache; console.info("Cache updating... " + cache.status); try { cache.update(); if (cache.status == cache.UPDATEREADY) { cache.swapCache(); } } catch (e) { console.error(e); } } window.applicationCache.addEventListener('updateready', function(){ window.applicationCache.swapCache(); }, false );
function handleFileSelect(evt) { var files = evt.target.files; if(files[0].type.substr(0, 5) !== 'image'){ alert(“Файл не является рисунком!”); return false; } console.log(files[0].name); var reader = new FileReader(); reader.onload=function(e){ var span = document.createElement('span'); span.innerHTML = [''].join(''); document.getElementById('gallery').insertBefore(span, null); } reader.readAsDataURL(files[0]); } var files = evt.target.files; function handleFileSelect(evt) { var files = evt.target.files; for (var i = 0; files[i]; i++) { var reader = new FileReader(); fileName = files[i].name; reader.onload=function(e){ var span = document.createElement('span'); span.innerHTML = [''].join(''); document.getElementById('gallery').insert Before(span, null); } reader.readAsDataURL(files[i]); } } window.requestFileSystem(type, size, onInitFs, onError); function onError(error) { var msg = ''; switch (error.code) { case FileError.ABORT_ERR: msg = 'Операция прервана'; break; case FileError.NOT_READABLE_ERR: msg = 'Файл нечитаем'; break; case FileError.ENCODING_ERR: msg = 'Проблемы с кодировкой'; break; case FileError.QUOTA_EXCEEDED_ERR: msg = 'Превышен объем хранилища'; break; case FileError.NOT_FOUND_ERR: msg = 'Файл не найден'; break; case FileError.SECURITY_ERR: msg = 'Небезопасная или недопустимая операция'; break; case FileError.NO_MODIFICATION_ALLOWED_ERR: msg = 'Невозможно изменить файл'; break; case FileError.INVALID_MODIFICATION_ERR: msg = 'Ошибка изменения файла'; break; case FileError.INVALID_STATE_ERR: msg = 'Ошибка состояния'; break; case FileError.SYNTAX_ERR: msg = 'Ошибка cинтаксиса'; break; case FileError.TYPE_MISMATCH_ERR: msg = 'Неприемплимый тип файла'; break; case FileError.PATH_EXISTS_ERR: msg = 'Файл уже существует'; break; default: msg = 'Неизвестная ошибка'; break; }; alert(msg); } function onInitFs(fs) { fs.root.getFile('log.txt', {create: true}, function(fe) { alert(fe.isFile); }, onError); var keys = Object.keys(fe); for (var i = 0, key; key = keys[i]; ++i) { console.log(key+" - "+fe[key]); } fs.root.getFile('log.txt', {}, function(fe) { fe.createWriter(function(fw) { fw.onwrite = function(e) { console.log('Запись завершена'); }; fw.onerror = function(e) { console.log('Write failed: ' + e.toString()); }; var blob = new BlobBuilder(); blob.append('FilesystemAPI work!'); fw.write(blob.getBlob('text/plain')); }, onError); }, onError); fe.file(function(file) { var reader = new FileReader(); console.log(file); reader.onloadend = function(e) { console.log(this.result); } reader.readAsText(file); }); fs.root.getFile('log.txt', {create: false}, function(fileEntry) { fileEntry.remove(function() { console.log('Файл удален'); }, errorHandler); }, errorHandler); function onInitFs(fs) { fs.root.getDirectory('MyDir', {create: true}, function(de) { console.log('Директория создана'); }, onError ) } fs.root.getFile('/MyDir/log2.txt', {create: true}, function(fn) { }, onError); fs.root.getFile('/MyDir/log3.txt', {create: true}, function(fn) { }, onError); fs.root.getFile('/MyDir/log4.txt', {create: true}, function(fn) { }, onError); fs.root.getDirectory('MyDir', {}, function(de) { var dirReader = de.createReader(); dirReader.readEntries(function(results) { for(i =0;results[i];i++ ){ alert(results[i].name); } }); // alert(dirReader.readEntries()); //console.log()? }, onError);
1
2
3
4
5
6
7
$(".column").each(function(){ this.addEventListener('dragstart', handleDragStart,false); }); function handleDragStart(e) { this.style.opacity = '0.4'; return false; } $(".tr").each(function(){ this.addEventListener('dragenter', handleDragEnter, false); this.addEventListener('dragleave', handleDragLeave, false); }); .over { border: 2px dashed #000; } var inCont = 0; function handleDragEnter(e) { $(this).addClass('over'); return false; inCont = 1; } function handleDragLeave(e) { $(this).removeClass('over'); inCont = false; } function handleDragStart(e) { e.dataTransfer.effectAllowed = 'move'; e.dataTransfer.setData('text/html', this.outerHTML); this.style.opacity = '0.4'; return false; } $(".tr").each(function(){ …. this.addEventListener('drop', handleDrop, false); }); function handleDrop(e) { var obj = e.dataTransfer.getData('text/html'); $(this).append(obj); $(this).removeClass('over'); } $(".column").each(function(){ this.addEventListener('dragstart', handleDragStart,false); this.addEventListener('dragend', handleDragEnd, false); }); function handleDragEnd(e) { e.srcElement.style.opacity = '1.0'; if(inCont == true){ $(e.srcElement).remove(); inCont = false; } $(this).removeClass('over'); } $(".tr").each(function(){ …. this.addEventListener('dragover', handleDragOver, false); this.addEventListener('drop', handleDrop, false); }); function handleDragOver(e) { if (e.preventDefault) { e.preventDefault(); } e.dataTransfer.dropEffect = 'move'; } function handleDragEnd(e) { e.srcElement.style.opacity = '1.0'; if((inCont == 1)|| (e.x < 0)){ $(e.srcElement).remove(); function handleDrop(e) { files = e.dataTransfer.files; var reader = new FileReader(); reader.onload=function(e){ var span = document.createElement('span'); span.innerHTML = [''].join(''); document.getElementById('gallery').insertBefore(span, null); } reader.readAsDataURL(files[0]); } function upload(file) { var reader = new FileReader(); reader.onload = function() { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (this.readyState == 4) { if (this.status == 200) { console.log("Загрузка завершена!") return 1; } else { console.log("Ошибка!"); return 0; } } }; xhr.open("POST", "/upload.php"); var boundary = "testtest"; xhr.setRequestHeader("Content-Type", "multipart/ form-data, boundary=" + boundary); var body = "--" + boundary + "\r\n"; body += "Content-Disposition: form-data; name= 'myFile'; filename='" + file.name + "'\r\n"; body += "Content-Type: application/octet-stream\ r\n\r\n"; body += reader.result + "\r\n"; body += "--" + boundary + "--"; xhr.send(body); }; reader.readAsBinaryString(file); } function handleDrop(e) { files = e.dataTransfer.files; if( upload(file[0]) { … ----------------------------------------------------------------------------------------------------------------- Представление чисел в памяти ЭВМ. Часть 1. Целые числа Павел Закляков $ cat program1_unsigned_char_max.c #include #include void main (void) { unsigned char a; // определение переменной a=~0; // битовая инверсия 0 printf("a max: %u\n",a); printf("a size: %d\n",sizeof(a)); printf("max: %u\n",UCHAR_MAX); } $ gcc program1_unsigned_char_max.c&&./a.out $ echo "2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0"|bc $ echo "2^8-1"|bc $ cat program2_unsigned_char_representation.c #include void PrintByte (const void * pnt) { char *p=(char *) pnt; int unit=128; int c; for (c=0;c<8;c++) { if ( (*p) & (unit) ) { printf("1"); } else { printf("0"); } unit>>=1; } printf("\n"); } void main (void) { unsigned char a; a=13; printf ("по адресу %p хранится ",&a); PrintByte(&a); } $ gcc program2_unsigned_char_representation.c&&./a.out $ cat program3_unsigned_int_representation.c #include #include void PrintByte (const void * pnt) { char *p=(char *) pnt; int unit=128; int c; for (c=0;c<8;c++) { if ( (*p) & (unit) ) { printf("1"); } else { printf("0"); } unit>>=1; } printf("\n"); } void main (void) { unsigned int a; a=~0; printf("a max: %u\n",a); printf("размер: %d\n",sizeof(unsigned int)); printf("max: %u\n",UINT_MAX); a=13; printf ("по адресу %p хранится ",&a); PrintByte(&a); } $ gcc program3_unsigned_int_representation.c &&./a.out $ cat program4_unsigned_int_representation2.c #include void PrintByte (const void * pnt) { //... аналогично программе выше... } void PrintNByte(const void * pnt, int n) { int c; char * p=( (char *)pnt)+n; for (c=0;c // Описание функций PrintByte, PrintNByte, PrintN2Byte, // PrintN2Byte как и в program4_unsigned_int_representation2.c void main (int argc, char **argv[]) { int a; if (argc>=2) { a=atoi(argv[1]); printf(" Исходное число: %d\n",a); printf(" Двоичный вид: "); PrintNByte (&a,sizeof(int)); printf("Двоичный вид в памяти: "); PrintN2Byte (&a,sizeof(int)); printf ("по адресу %p хранится ",&a); PrintByte(&a); printf("\n"); PrintHexNByte (&a,sizeof(int)); } else { printf ("Введите число вторым параметром.\n"); } } $ gcc program5_int_representation.c &&./a.out -1013 ----------------------------------------------------------------------------------------------------------------- Red Hat Enterprise Virtualization 3 Оксана Курышева yum install rhevm -----------------------------------------------------------------------------------------------------------------