[FreeBSD] Single user mode

人多少會有健忘的時候

有時候會不小心忘記root密碼

或是不小心把設定改爛進不去系統

這時候就可以利用single user mode去修復

重開機後選擇第四個開機選項進入single user mode

 

#進入single user mode後會詢問下面的東西,按Enter直接跳過
Enter full pathname of shell of RETURN for /bin/sh:
#檢查並修正檔案系統
> fsck -p
#載入所有
> mount -a
#修改密碼
> pwsswd root
#編輯改爛的設定 (example: /etc/rc.conf)
> vi /etc/rc.conf

[PHP] PHP 5.4 的 session 寫法變革

前陣子把 PHP 升級到5.4後
發現有用到session的程式都爆了

Fatal error: Call to undefined function session_register()

 

google一下
原來是PHP 5.4的session寫法有改變
PHP 5.4 移除了 session_is_registered()  、 session_register()  與 session_unregister()  三支function。
Session 的操作更簡化了一些。

//判斷 Session 是否存在
if( isset($_SESSION['foo']) ) {
    echo 'session is exist';
}

//註冊 Session
$_SESSION['foo'] = 'bar';

//移除 Session
unset($_SESSION['foo']);

 

這樣操作其實更直覺,也不需要額外多記函式(個人很健忘),這三支函式早該移除了。
但是大大小小的舊系統改起來也是不少麻煩
所以另一個做法就是把移除的function在script執行前先定義好:

<?php
if ( !function_exists('session_register') ) {
    function session_register() {
        $args = func_get_args();
        foreach ($args as $key) {
            $_SESSION[ $key ] = $GLOBALS[ $key ];
        }
    }
}

if ( !function_exists('session_is_registered') ) {
    function session_is_registered( $key ) {
        return isset( $_SESSION[ $key ] );
    }
}

if ( !function_exists('session_unregister') ) {
    function session_unregister( $key ){
        unset( $_SESSION[ $key ] );
    }
}

 

這樣就可以相容舊系統了
不過還是比較建議移除舊寫法囉
Reference:http://blog.wu-boy.com/2012/06/what-has-changed-in-php-5-4-x/

[FreeBSD] sudo command

要在 FreeBSD 下使用 sudo 這個指令要額外裝套件
安裝 sudo 套件

cd /usr/ports/security/sudo
make install clean

 

裝完,編輯 sudoers,給予指定使用者使用 sudo 指令的權限

vim /usr/local/etc/sudoers

 

找到並複製 root 這行,將 root 修改為指定使用者名稱,修改完後強制存檔!wq

root ALL=(ALL) ALL
calos ALL=(ALL) ALL #指定使用者

 

※強制存檔與 chmod 的差別
如果 sudoers 檔案權限屬性非 440 時( read-only )
基於安全性,系統會將 sudo 指令擋下
所以如果是先 chmod 變更過權限屬性再修改檔案的話
記得要將權限屬性修改回 440
才不會發生無法使用指令的情況

[Apache] .htaccess 失效

今天發現自己的apache根目錄會顯示出來
基於安全的問題所以在根目錄丟一個.htaccess去檔顯示目錄

Options -Indexes

丟進去後
卻發現目錄依然會顯示
檢查一下http.conf
原來是AllowOverride的設定是None
改成 AllowOverride All 重新啟動Apache即可

<Directory "/usr/local/www">
    Options Indexes FollowSymLinks
    # 這裡改成All
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

[FreeBSD] Twiki Install note

version:4.2.4

必要套件:Apache22、Perl5.10

安裝
cd /usr/ports/www/twiki
make install clean

 

設定各目錄訪問權限(bin與pub的設定在twiki.conf內而不使用.htaccess)
cd /usr/local/www/twiki
cp root-htaccess.txt .htaccess
cp subdir-htaccess.txt data/.htaccess
cp subdir-htaccess.txt locale/.htaccess
cp subdir-htaccess.txt templates/.htaccess
cp subdir-htaccess.txt tools/.htaccess
cp subdir-htaccess.txt working/.htaccess

 

設定twikiLibPath
cd /usr/local/www/twiki/bin
cp LocalLib.cfg.txt LocalLib.cfg //先copy example config
vi LocalLib.cfg
找到$twikiLibPath,並修改成實際路徑
$twikiLibPath = "/usr/local/www/twiki/lib"

 

 

加入/usr/local/etc/apache22/twiki.conf
ScriptAlias /twiki/bin "/usr/local/www/twiki/bin"
Alias /twiki/pub "/usr/local/www/twiki/pub"

BrowserMatchNoCase ^$ blockAccess

<Directory "/usr/local/www/twiki/bin">
AllowOverride None
Order Allow,Deny
Allow from all
Deny from env=blockAccess

Options ExecCGI FollowSymLinks
SetHandler cgi-script

Password file for TWiki users

AuthUserFile /usr/local/www/twiki/data/.htpasswd
AuthName 'Enter your WikiName: (First name and last name, no space, no dots, capitalized, e.g. JohnSmith)'
AuthType Basic

<FilesMatch "^configure.*">
SetHandler cgi-script
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.1.10 <--在這裡加入自己的IP(不然進不去configure)
Require user JohnDoe
Satisfy Any
</FilesMatch>
</Directory>

<Directory "/usr/local/www/twiki/pub">
Options None
AllowOverride Limit
Allow from all

AddType text/plain .shtml .php .php3 .phtml .phtm .pl .py .cgi
</Directory>

 

 

 

編輯http.conf,在最底下加入一行
include "etc/apache22/twiki.conf"

 

打開瀏覽器進入Configure
http://(hostname)/twiki/bin/configure

 

若噴出Error.pm,將p5-Error砍掉重裝
cd /usr/ports/lang/p5-Error
make deinstall clean
make install clean
※不知道為什麼reinstall系統會噴錯誤,所以才下兩行指令

 

這時候應該就沒有error了,可以點選next
然後設定密碼後保存
twiki/lib底下就會出現LocalSite.cfg(用來保存網站設定)

 

若{RCS}{EgrepCmd}與{RCS}{fgrepCmd}出現
Error:"/BIN/grep" does not meet the current Path.
因為FreeBSD的grep在/usr/bin底下
所以只要把/bin/grep改成/usr/bin/grep(後面的參數不動)即可

 

 

User Mapping的部分:
預射是Twiki::Users::TwikiUserMapping
如果想先試跑首頁就先改成Twiki::Users::BaseUserMapping
保存後就可進入WebHome了
網址 http://(hostname)/twiki/bin/view/Main/WebHome

 

 

 

認證:

CGI::Session Install
shell> perl -MCPAN -e shell
cpan> install CGI::Session
Reference:http://cpan.uwinnipeg.ca/htdocs/CGI-Session/INSTALL.html