2013年8月27日 星期二

FreeBSD Samba 無法啟動問題

有一天早上我的客戶的網管小姐突然打電話給我講,怎麼辦我們公司的Samba Server無法使用,我心裡應該是小問題吧,結果我搞了一天挫屎

在FreeBSD使用測試指令檢查Samba Config 是否有問題

# testparm
發現到問題的一行
Load smb config files from /usr/local/etc/smb.conf
max_open_files: sysctl_max (11095) below minimum Windows limit (16384)
rlimit_max: rlimit_max (11095) below minimum Windows limit (16384)
ERROR: pid directory /var/run/samba does not exist
Processing section "[printers]"
WARNING: You have some share names that are longer than 12 characters.
These may not be accessible to some older clients.
(Eg. Windows9x, WindowsMe, and smbclient prior to Samba 3.0.)
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

上網找了一下都是國外的網站解答找到原因
因為 Sever 中的 /var/run/samba 這個目錄不見了
所以只要下個指令就可以了
mkdir /var/run/samba
在重新啟動一下Samba Server 就可以了。



2013年8月20日 星期二

WINDOWS 7 家用版修改LAN Manager 驗證層級

WINDOWS 7 的LAN Manager 驗證層級可以透過gpedit.msc修改:


  • 電腦設定→Widnows→設定→安全性設定→本機原則→安全性選項→網路安全性 Lan Manager 驗證等級
  • 改成「傳送 LM 和 NTLM - 如有交涉,使用 NTLMv2 工作階段安全性」
    或
    1. 開啟「控制台>系統管理工具>本機安全性原則」,進到「本機原則>安全性選項」
    2. 找到「網路安全性:LAN Manager 驗證層級」,改為「傳送 LM 和 NTLM - 如有交涉,使用 NTLMv2 工作階段安全性
    」

    來達到可以連進比較低階微軟產品,但是遇到 Windows7 家用版卻沒有gpedit.ms可以用,
    必須透過regedit 修改來設定。

    在 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] 下新增名稱為 LmCompatibilityLevel 的 32bit DWORD 值 1。

    2013年8月19日 星期一

    在 Linux下將一個用戶的程序全部 kill 掉


    當某個用戶使用過多系統資源時,可以用以下指令將他開啟的所有進程 kill 掉:

    kill -9 `ps -u USERNAME -o “pid=”`

    使用上只要將以上指令的 USERNAME 改成用戶名稱。



    文章出處 網路技術日誌

    FreeBSD Root 密碼更改

    由於之前的一個客戶發生了一個慘案,就是整個公司的網路原本是外包給某一個不知名公司,結果因為某些溝通上的問題發生一些不愉快的事結果就找上了我,可是在這之前我原本就不知道,只是儘本份解決網路,結果我一直希望他們提供密碼在一直無法拿到的情況下才了解了這個問題,所以我也只好更改了密碼,所以網路是一個公司對外的命脈,所以說「網路不是萬能的,但是沒有網路是萬萬不能」的。

    所以說在忘記 FreeBSD Root 密碼時,就可以在開機時等待的那10秒鐘進入 Single user mode 重新設定密碼:

    1. 按下Crtl+alt+del 重新開啟 FreeBSD 主機。

    2. 在 「Welcome to FreeBSD」的選單中按趕點按下「4」 選擇 「Boot FreeBSD in single user mode」。

    3. 然後經過一系列的開機過程後就會看到 「When prompted Enter full pathname of shell or RETURN for /bin/sh:」,在直接按 Enter。

    4. 這時便會直接進入 Single user mode,就可以輸入指令重新掛載根目錄 "/" 為可讀寫:

    # mount -u /
    # mount -a

    5. 用 passwd 重新設定 root 密碼:

    # passwd root

    6. 最後重新啟動即可:

    # sync;sync;sync;reboot

    2013年8月15日 星期四

    Iptables 限制每個 IP 連線數

    如果在 Linux 下要限制每個 IP 連線數,可以透過 iptables 實現。
    詳細指令語法如下:
    /sbin/iptables -A INPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above 3 -j REJECT
    限制每個 ip 只可以有 3 個 ssh 連線 (預設 ssh 使用 port 22)。
    /sbin/iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 -j REJECT –reject-with tcp-reset
    只接受每個 ip 20 個 http 連線 (httpd.conf 裡面的 MaxClients 預設是 60)。
    要留意的是,這個設定可能會把 proxy servers 阻隔,因為每個 proxy servers 可能會建立大量的連線。
    Skip proxy server IP 1.2.3.4 from this kind of limitations:
    /sbin/iptables -A INPUT -p tcp –syn –dport 80 -d ! 1.2.3.4 -m connlimit –connlimit-above 20 -j REJECT –reject-with tcp-reset
    這句的作用跟上面語法一樣,只是把已知的 proxy server (1.2.3.4) 給開通,避免阻隔 proxy servers 的連線。
    In this example, limit the parallel http requests to 20 per class C sized network (24 bit netmask)
    /sbin/iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 24 -j REJECT –reject-with tcp-reset
    這個是限制同一個 class C 網絡同時建立 20 個連線。
    如果想把在指定時間內建立過多連線的 ip 阻隔,這便要編輯 iptables 的 shell script。
    以下例子會阻隔在 100 秒內建立多於 10 個 http 連線的 ip
    #!/bin/bash
    IPT=/sbin/iptables
    # Max connection in seconds
    SECONDS=100
    # Max connections per IP
    BLOCKCOUNT=10
    # ….
    # ..
    # default action can be DROP or REJECT
    DACTION=”DROP”
    $IPT -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –set
    $IPT -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –seconds ${SECONDS} –hitcount ${BLOCKCOUNT} -j ${DACTION}
    # ….
    # ..
    要儲存 iptables 的修改可以查看 iptables-save 的 man page,在 redhat 下是用以下指令:
    service iptables save

    文章出處  網路技術日誌

    破解 XP 使用者密碼

    如果忘記 XP 的登入密碼,以下方法可以不需安裝任何軟件及不用安裝光碟的情況下解決:
    1. 在啟動時按 “F8″ 鍵,選擇 「帶命令行的安全模式」。
    2. 當出現帶有 Administrator 及其他用戶的選單時,選擇 Administrator 進入命令模式。
    3. 如果想恢復密碼的用戶名為 xp_user,而密碼為 new_pass,則輸入以下指令:
    net new_user new_pass /add
    4. 如果想新增一個帶管理員權限的用戶,例如新用戶名為 new_user,而密碼為 new_pass,則輸入以下指令:
    net user new_user new_pass /add
    net localgroup administrators new_user /add


    5. 重新開機便可以使用新密碼登錄。

    文章出處  網路技術日誌

    PHP 取得用戶真實 IP

    要用 PHP 取得用戶的 IP 十分容易,只要用 $_SERVER['REMOTE_ADDR'] 變數就可以知道用戶的 IP,但如果用戶使用了 proxy server 上網的話,$_SERVER['REMOTE_ADDR'] 只會得到 proxy 的 IP 地址。
    以下方法會使用 $_SERVER["HTTP_CLIENT_IP"] 及 $_SERVER["HTTP_X_FORWARDED_FOR"] 解決這個問題:
    PHP:
    1. if (!empty($_SERVER["HTTP_CLIENT_IP"])){
    2.     $ip = $_SERVER["HTTP_CLIENT_IP"];
    3. }elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
    4.     $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    5. }else{
    6.     $ip = $_SERVER["REMOTE_ADDR"];
    7. }
    8. echo $ip;
    9. ?>

    文章出處 網路技術日誌