用命令列管理MySQL使用者

過去的單純的網路環境中,常時會安裝phpMyadmin來管理MySQL ,好處是有完善的使用者UI因此就變的容易管理,如果想要成為駭客級的使用者,那麼指令模式就必需要拿來練功了。

在文字指令中,輸入 mysql -uroot -p
顯示使用者清單:
[cc lang=”bash”]
mysql > select * from mysql.user;
[/cc]
會顯示全部列表,但不容易看得清楚。
只顯示 mysql 這個資料庫中 user 資料表的 Host 及 User 共2個欄位
[cc lang=”bash”]
mysql > select Host, User from mysql.user;
[/cc]
新增使用者:
[cc lang=”bash”]
mysql > create user ‘UserName’@’Host’ identified by ‘Password’;
[/cc]
給予某些權限 OPTION 如 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
TARGET 為指定資料庫
[cc lang=”bash”]
mysql > grant OPTION on TARGET to USER;
[/cc]
刪除使用者:
[cc lang=”bash”]
mysql > drop user ‘UserName’@’Host’;
[/cc]

新增使用者:
[cc lang=”bash”]
mysql > create user ‘marry’@’localhost’ identified by ‘abcd2345’;
mysql > create user ‘marry’@’%’ identified by ‘abcd2345’;
[/cc]
其中要注意的是使用者名稱跟指定來源主機的字串需要各別加單引號。

給予權限:
[cc lang=”bash”]
mysql > grant all on *.* to ‘marry’@’localhost’;
[/cc]
這樣 marry 對整個資料庫的所有資料表都擁有全部的權利
[cc lang=”bash”]
mysql > grant select,insert on myFirstDB.* to ‘marry’@’localhost’;
[/cc]
marry 只擁有對 myFirstDB 這個資料檔[的所有表格]的查詢及新增權利。

以上大概就是這個樣子,當然這個只是簡單的指令,要當成駭客級的使用者,我還遠的咧 ~

建立一個MySQL伺服器的備援(M/S Replication)

如果目前服務的MySQL只有一台,卻沒有備援機制,是一件非常危險的事。哪天主機壞了,硬碟壞了,所有資料都付之一炬。因此就必需要建立一個能備援資料的機制。
這次建立的環境為內網一台主要(Master)跟次要(Slave)的MySQL,次要機器為養機千日用在一時的備用。
要建立的步驟大約為以下幾點:
在Master要做的事

  • 建立同步資料用的帳號
  • 於my.cnf設定master該有的設定參數
  • 重啟MySQL以啟用設定

在Slave要做的事

  • 於my.cnf設定slave該有的設定參數
  • 將同步帳號輸入進slave中
  • 重啟MySQL以啟用設定

Master主機資訊: FreeBSD 9 , Mysql 50 server , if : 192.168.101.141
Slave 主機資訊: FreeBSD 9 , Mysql 50 server , if : 192.168.101.142

in Master
進入Master修改my.cnf,如果找不到my.cnf,就到/usr/local/share/mysql/my-large.cnf給它cp一份到/etc/my.cnf。
一般來說,你複製過來的設定檔已經是完整的了,只要查詢以下的設定是否有打開或是參數是否有正確。
[cc lang=”bash”]
[mysqld]
server-id=1
log-bin=mysql-bin
innodb_flush_log_at_trx_commit=1
[/cc]
重啟MySQL
[cc lang=”bash”]
$ /usr/local/etc/rc.d/mysql-server restart
[/cc]
然後進入msql的命令列新增同步用的使用者帳號
[cc lang=”bash”]
mysql>create user syncer@192.168.101.142;
mysql>grant replication slave on *.* to syncer@192.168.101.142 identified by ‘abc123’;
[/cc]
先鎖定主機,以查詢二進制的相關資料
[cc lang=”bash”]
mysql>flush tables with read lock;
mysal>show master status;
[/cc]
大概會出現像這樣的資訊

一定要記住File跟Position
然後釋放主機鎖定功能
[cc lang=”bash”]
mysql>unlock tables;
[/cc]

in Slave
修改Slave的my.cnf,其中的server-id不可以跟Master一樣,盡量小點的數字,不用太多。
[cc lang=”bash”]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
[/cc]
完成之後,重啟MySQL,並進入命令列。
[cc lang=”bash”]
mysql>slave stop;
mysql>change master to master_host=’192.168.1.141′,
->master_user=’syncer’,
->master_password=’abc123′,
->master_log_file=’mysql-bin.000006′,
->master_log_pos=1951;
[/cc]
記得master_log_file與master_log_pos都是剛才在Master的show master status所得的資訊。
然後,開啟slave機制。
[cc lang=”bash”]
mysql>start slave;
[/cc]
重看slave的狀態
[cc lang=”bash”]
mysql>show slave status\G
[/cc]
只要看到Slave_IO_Running: Yes 跟 Slave_SQL_Running: Yes 都表示皆在運作中。所以你就可以在Master試一下編修資料。照理來說,你的Slave就會即時吸取你所修改的資料進來了,因此你就得到一台一模一樣的第二台Mysql,並為你的資料做備援的準備以便未來保障你的資訊。
如果你在Slave做change master時輸入錯了相關的資訊,可以使用
[cc lang=”bash”]
STOP SLAVE;
RESET SLAVE;
[/cc]
將Slave的資訊重新設定。

如何改變帳號的群組為wheel

在FreeBSD裡,具有最高操作權限除了root之外,群組wheel也能做root身分的事。
如果帳號原身分不是wheel群組,那麼就不可以用su來改原身分為root,並且它會跟你say sorry。
一般說來在新增使用者時:adduser ,在選擇要加入哪些群組時,就可以在那邊做加入wheel的動作,若是已存在的帳號,改變群組時,可以下這個指令:

[cc lang=”bash”]
$ pw groupmod wheel -m username
[/cc]

然後讓該帳號重新登入,就可以用su來改變為root身份了。
當然也可以直接修改 /etc/group 檔案找到該後改成:
[cc lang=”bash”]
wheel:*:0:root,username
[/cc]

username就是要加入wheel群組的帳號名稱。

PF 的傳輸埠導向

如果你的NAT需要開放一些SSH或是一些服務的埠號導向後方的電腦們,這時你就需要設定一些導埠的的語法將所需的服務開通並導向正確的電腦們。
檔案設定在 /etc/pf.conf
[cc lang=”bash”]
if_ext=”vtnet0″
if_int=”vtnet1″

#用兩台mysql的原因是需要靠外部的SSH連進去管理。因此請照你目前NAT的後方的電腦的服務狀況來設定。
mysqla01=”192.168.101.141″
mysqla02=”192.168.101.142″

net_lan=”192.168.101.0/24″

set skip on lo0

nat on $if_ext from $net_lan -> ($if_ext:0)
no nat on $if_ext from !$net_lan to any

#導向ssh的通訊埠
rdr pass on $if_ext proto tcp from any to any port 22141 -> $mysqla01 port 22
rdr pass on $if_ext proto tcp from any to any port 22142 -> $mysqla02 port 22
rdr pass on $if_ext proto tcp from any to any port 22 -> 192.168.101.254 port 22

#原本要阻擋所有導進來的通訊,為了能測試通過導向,先開啟所有通訊埠。未來再找資料做個比較好的設定。
#block in on $if_ext
pass in on $if_ext

pass out
[/cc]

其設定的重點就是在rdr的部份,照以上的格式,可以將NAT對外的網卡以any to any的方式將來自於埠號22141連進第一台mysql的SSH之22埠。
然後用pfctl -nf /etc/pf.conf 來測試是否有正確,然後再下pfctl -f /etc/pf.conf 載入變更後的設定檔。
因此下了指令 pfctl -ns
[cc lang=”bash”]
$ pfctl -sn
No ALTQ support in kernel
ALTQ related functions disabled
nat on vtnet0 inet from 192.168.101.0/24 to any -> (vtnet0:0)
no nat on vtnet0 inet from ! 192.168.101.0/24 to any
rdr pass on vtnet0 inet proto tcp from any to any port = 22141 -> 192.168.101.141 port 22
rdr pass on vtnet0 inet proto tcp from any to any port = 22142 -> 192.168.101.142 port 22
rdr pass on vtnet0 inet proto tcp from any to any port = ssh -> 192.168.101.254 port 22
[/cc]
只要看到上述的內容有正確,就可以方便進入管理NAT後方的電腦了。

用FreeBSD9架設pf + NAT

最近在試這個NAT的架設方法,我用了三天去試,總算今天給我試出來了。在google上所查到的文件都是舊的,因此讓我花了不少時間去try設定。
現在的 FreeBSD 9.0 已經不用再去重新編譯核心讓其支援 PF + NAT 的功能,因此這部步驟就可以省略不做。
目前需要做的事就是設定 /etc/rc.conf 跟 /etc/pf.conf

/etc/rc.conf
[cc lang=”bash”]
ifconfig_vtnet0=”DHCP”
ifconfig_vtnet1=”inet 192.168.101.254 netmask 255.255.255.0″
hostname=”nat.domain”
pf_enable=”YES”
gateway_enable=”YES”
[/cc]
網路的設定,可以把第一張對外的網卡設定成DHCP,第二張對內的網卡設定成虛擬IP。以讓後面的電腦去接對內的網卡,而其餘的電腦就設定固定的虛擬IP並把閘道設定為第二張網卡的IP。

/etc/pf.conf
[cc lang=”bash”]
if_ext=”vtnet0″
if_int=”vtnet1″
net_lan=”192.168.101.0/24″

set skip on lo0

nat on $if_ext from $net_lan -> ($if_ext:0)
no nat on $if_ext from !$net_lan to any

block in on $if_ext
pass out
[/cc]
現在的設定方式是用PF的功能,並照設定檔的方式將封包轉譯出去。這時NAT才能工作。

設定好之後,重開機,這台NAT就是一台IP分享器了!

screen的設定

使用screen的好處就是在命令列下登入的工作狀態可以被予以保留,直到它被重開機為止。
它也有相關的設定提供顯示一些資訊。
設定檔為 .screenrc ,放在你的home目綠下即可。
用文字編輯器新增一個檔案。
[cc lang=”bash”]
$vi ~/.screenrc
[/cc]
然後把以下的設定通通都複製進去即可。

[cc lang=”bash”]
hardstatus on
hardstatus alwayslastline
hardstatus string “%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d %c:%s ”
bind b encoding big5 utf8
bind u encoding utf8 utf8
[/cc]