Monday, December 15, 2014

shred, securely delete files and device

http://en.wikipedia.org/wiki/Shred_%28Unix%29

Thursday, October 16, 2014

Qui tắc nuôi con đáng phục của mẹ Nhật

1. Trẻ em không cần phải quá thông minh. Thông minh, học giỏi không hẳn là một điều tốt, cái chính là cần có nhân cách tốt.
2. Môi trường nuôi dạy con cái là rất quan trọng. Khó có thể dạy dỗ một đứa trẻ nên người trong một gia đình hay xung đột, một trường học nhiều trẻ hư hay một khu phố có tệ nạn.
3. Không bao giờ hình thành cho trẻ một thói quen xấu. Không thỏa hiệp lợi ích ngắn hạn để hình thành thói quen xấu cho con. Ví dụ như: đứa trẻ không ăn, đừng bao giờ bật tivi cho con xem để xúc cơm. Để đạt được mục đích cho con ăn được thêm vài thìa gạo, mẹ sẽ phải đánh đổi bằng một thói quen xấu rất khó bỏ.
4. Tôn trọng trẻ em, biết đồng cảm với trẻ.
5. Luôn nói sự thật với con. Chỉ cần chú ý đến kỹ năng nói và cách nói là được. Không bao giờ tỏ ra “ngoại giao”, nói dối với người khác trước mặt con trẻ.
6. Không bao giờ thỏa hiệp với con dù biết trẻ sẽ mè nheo, phản đối. Thỏa hiệp chỉ khiến kết quả tồi tệ hơn.
7. Chế độ ăn uống cho con phải cân bằng. Con dưới 1 tuổi sữa vẫn là nguồn dinh dưỡng chính. Hơn 1 tuổi nên ăn 3 bữa một ngày, thực phẩm phải cân bằng và phong phú.
8. Trẻ con không bao giờ để mình bị chết đói. Không cần ép con ăn, lo con đói.
9. Bữa ăn phải được diễn ra trong ghế ăn. Không ngồi thì không ăn.
10. Bổ sung canxi cho trẻ nếu không thiếu thì không cần. Chỉ cần cho con chạy nhảy dưới ánh mặt trời, tắm nắng thường xuyên là được.
11. Cho trẻ mặt quần áo nên mặc nhiều lớp. Như vậy khi con nóng có thể cởi bớt, lạnh có thể khoác thêm. Chơi thể thao toát mồ hôi có thể bỏ ra.
12. Xác định con lạnh hay không bằng cách kiểm tra cổ.
13. Cho trẻ ăn trái cây thường xuyên và mỗi ngày.
14. Khi trẻ có triệu chứng cảm lạnh như chảy nước mũi, chỉ cần liên tục nhỏ thuốc muối sinh lý. Không cần uống thuốc. Nếu con có virus cúm mới cần uống thuốc, không uống quá 14 ngày.
15. Con sốt phải đưa đến bệnh viện khám, cố gắng yêu cầu xét nghiệm máu.
16. AI cũng có thể bị bệnh, bị ốm. Do vậy khi một đứa trẻ bị cảm lạnh, bệnh nhẹ, đừng hoảng sợ. Không cần quá hoang mang.
17. Nếu việc con làm không ảnh hưởng đến sự an toàn của con, đến lợi ích của người khác, thì không được quá can thiệp vào hành vi của con.
18. Để trẻ chơi thoái mái, không giục giã.
19. Không phải cứ cái gì nguy hiểm cũng cấm con không được tiếp cận. Nên cho con biết nguy hiểm là như thế nào, xảy ra ở đâu, làm thế nào để tránh. Cho con tiếp cận với nguy hiểm trong phạm vi kiếm soát.
20. Cần để con có cơ hội tư trải nghiệm càng nhiều càng tốt. Không nên nói trước kết quả với con. Hãy để bé tự khám phá, biết hậu quả, biết cách thành công, biết cả thất bại.
21. Dạy trẻ học cách chờ đợi.
22. Dạy trẻ chịu trách nhiệm về hành động của mình.
23. Dạy trẻ cách cho đi và nhận lại là quá trình hai chiều. Người nhận cũng phải biết ơn.
24. Hiện nay trong xã hội có rất nhiều phương pháp giáo dục sớm. Nếu không thực sự hiểu, không biết làm thế nào thì đừng làm và đừng ép con.
25. Phải đảm bảo mỗi ngày đều có thời gian dành cho con, chơi với con.
26. Luôn có cách khiến con cười ít nhất vài lần một ngày để duy trì tâm trạng tốt.
27. Dạy trẻ cách đối mặt với thất bại. Con có thể không hài lòng, có thể bỏ cuộc, có thể cố gắng làm tiếp một lần nữa. Nhưng dứt khoát không khóc, không được suy sụp.
28. Nguyên tắc cơ bản là không bao giờ được đánh bạn trước, tấn công bạn trước. Trong nhà trẻ, có thể thu hút sự chú ý của cô giáo và các bạn khác bằng cách hét lên.
29. Con có quyền quyết định những việc liên quan đến con.
30. Khi con được 4,5 tuổi, hãy dạy con cách tiêu tiền và cho con tiền tiêu vặt hàng tuần.
http://nuoicon.vn/C/A?articleId=2241

Wednesday, October 15, 2014

How to do “mysqladmin flush-hosts” on server?

I got mysql error:

ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

Resolve:

mysql -u root -p -e 'flush hosts'

Sunday, September 7, 2014

While loop with promises

var Q = require("q");

// `condition` is a function that returns a boolean
// `body` is a function that returns a promise
// returns a promise for the completion of the loop
function promiseWhile(condition, body) {
    var done = Q.defer();

    function loop() {
        // When the result of calling `condition` is no longer true, we are
        // done.
        if (!condition()) return done.resolve();
        // Use `when`, in case `body` does not return a promise.
        // When it completes loop again otherwise, if it fails, reject the
        // done promise
        Q.when(body(), loop, done.reject);
    }

    // Start running the loop in the next tick so that this function is
    // completely async. It would be unexpected if `body` was called
    // synchronously the first time.
    Q.nextTick(loop);

    // The promise
    return done.promise;
}


// Usage
var index = 1;
promiseWhile(function () { return index <= 11; }, function () {
    console.log(index);
    index++;
    return Q.delay(500); // arbitrary async
}).then(function () {
    console.log("done");
}).done();
http://stackoverflow.com/questions/17217736/while-loop-with-promises

Monday, June 30, 2014

clear log file


  1. #cat /dev/null >/var/log/error.log (command is "cat")
  2. #>/var/log/error.log (command is ">")

Sunday, April 27, 2014

Deep first search - unrecursion

def deep_first_search(vpath):
root = Node(vpath)
node = root
while True:
objs = list_directory(node.name)
for obj in objs:
child = Node(node.name + obj['objname'] + '/', node)
node.set_child(child)
first_child = node.first_child
if first_child:
node = first_child
else:
while not node.has_next_sibling:
if node is root:
break
if node is root:
first_child = node.first_child
if first_child:
node = first_child
continue
else:
break
tmp = node
node = node.next_sibling(node)
node.remove_sibling(tmp)

class Node(object):
"""docstring for Node"""
def __init__(self, name, parent=None):
super(Node, self).__init__()
self.__name = name
self.__parent = parent
self.__child_nodes = []

@property
def has_next_sibling(self):
try:
if self.__parent != None:
return len(self.__parent.__child_nodes) > 1
else:
return False
except (IndexError, AttributeError):
return False

@property
def name(self):
return self.__name

@property
def parent(self):
return self.__parent

@property
def first_child(self):
try:
return self.__child_nodes[0]
except (IndexError, AttributeError):
return None

def next_sibling(self, node):
try:
if self.__parent != None:
i = self.__parent.__child_nodes.index(node)
return self.__parent.__child_nodes[i+1]
else:
return None
except (IndexError, AttributeError):
return None

def set_child(self, node):
self.__child_nodes.append(node)

def remove_child(self, node):
try:
self.__child_nodes.remove(node)
except Exception, e:
raise e

def remove_sibling(self, node):
try:
self.__parent.__child_nodes.remove(node)
except Exception, e:
raise e

Saturday, April 19, 2014

All file modes in Python


  • r for reading
  • w for writing
  • r+ opens for reading and writing (cannot truncate a file)
  • w+ for writing and reading (can truncate a file)
  • rb+ reading or writing a binary file
  • wb+ writing a binary file
  • a+ opens for appending

Monday, April 14, 2014

run command with another user on debian


su -c "command here" -s /bin/sh another_user_here
example:
#su -c "cat /etc/groups" -s /bin/sh www-data

Friday, April 4, 2014

get all files or subdirectories in directory

cách 1:
>> liệt kê file và directory
#ls -l | awk '{print $9}'
>> liệt kê cả file ẩn
#ls -la | awk '{print $9}'
>> nếu chỉ muốn liệt kê directory
#ls -l | grep ^d | awk '{print $9}' 
>> nếu chỉ muốn liệt kê file
#ls -l | grep -v ^d | awk '{print $9}' 

cách 2:
#find . -maxdepth 1 -type f
>> xem kết quả
./.DS_Store
./03.mp3
./13ductinh.txt
./EsuDotNet_2.1.4.31.zip
./get_test.txt

./test
#str_to_rep=""
#for item in `find . -maxdepth 1 -type f`; do
#filename="${filename//.\//str_to_rep}"
#echo $filename
#done
>> kết quả
.DS_Store
03.mp3
13ductinh.txt
EsuDotNet_2.1.4.31.zip
get_test.txt
test
>> nếu không muốn hiển thị file ẩn
#find . -not -path '*/\.*' -maxdepth 1 -type f

Saturday, March 22, 2014

iptables accept ssh + apt-get

Sau 1 ngày vọc iptables, cuối cùng cũng tìm ra giải pháp.
Thông tin router:

  • IP: 192.168.0.1
  • DNS: 8.8.8.8, 8.8.4.4

Thông tin PC:

  • IP: 192.168.0.105
Mở file /etc/apt/source.list xem nội dung
deb http://ftp.debian.org/debian wheezy main
deb http://ftp.debian.org/debian wheezy contrib
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main



=> ta thấy có 2 hostname mà apt sẽ kết nối đến.
Bây giờ ta sẽ tạo một file có ext là .sh và thêm các dòng:

#!/bin/sh
# My system IP/set ip address of server
SERVER_IP="192.168.0.105"
# Flushing all rules
iptables -F
iptables -X
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Allow unlimited traffic on loopback
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT
# Allow incoming is established
iptables -A INPUT -i eth0 -s 0/0 -d $SERVER_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow incoming ssh only
iptables -A INPUT -p tcp -s 0/0 -d $SERVER_IP --sport 513:65535 --dport 22 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP -d 0/0 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
# Allow in/outcoming from dns
iptables -A OUTPUT -o eth0 -p tcp -s $SERVER_IP --sport 513:65535 -d 8.8.8.8 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -s 8.8.8.8 --sport 53 -d $SERVER_IP --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -s $SERVER_IP --sport 513:65535 -d 8.8.8.8 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 8.8.8.8 --sport 53 -d $SERVER_IP --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -s $SERVER_IP --sport 513:65535 -d 8.8.4.4 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -s 8.8.4.4 --sport 53 -d $SERVER_IP --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -s $SERVER_IP --sport 513:65535 -d 8.8.4.4 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 8.8.4.4 --sport 53 -d $SERVER_IP --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
# Allow outcoming to anywhere with port 80
iptables -A OUTPUT -o eth0 -p tcp -s $SERVER_IP --sport 513:65535 -d 0/0 --dport 80 -j ACCEPT
# Allow incoming from ftp.debian.org
iptables -A INPUT -i eth0 -p tcp --src ftp.debian.org --sport 80 -d $SERVER_IP --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
# Allow incoming from security.debian.org
iptables -A INPUT -i eth0 -p tcp --src security.debian.org --sport 80 -d $SERVER_IP --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
# Log output message
iptables -A OUTPUT -s $SERVER_IP -d 0/0 -j LOG --log-prefix "OCATCH:" --log-level info
# DHCP Client
iptables -A INPUT -i eth0 -p udp -s 192.168.0.1 -d $SERVER_IP --dport 68 --sport 67 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -s $SERVER_IP -d 192.168.0.1 --dport 67 --sport 68 -j ACCEPT
# make sure nothing comes or goes out of this box
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP


Lưu lại và chạy.

Thursday, March 20, 2014

Block All Incoming Traffic But Allow SSH

http://www.cyberciti.biz/tips/linux-iptables-4-block-all-incoming-traffic-but-allow-ssh.html
This is very common scenario. You want to permit access to a remote machine only by SSH. You would like to block all incoming traffic to your system except ssh connection under Linux.

Add following rules to your iptables shell script:
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
 
First rule will accept incoming (INPUT) tcp connection on port 22 (ssh server) and second rule will send response of incoming ssh server to client (OUTPUT) from our ssh server source port 22.
However, iptables with kernel 2.4/2.6 provides very powerful facility to filter rule based upon different connection states such as established or new connection etc. Here is complete small script to do this task:
 
#!/bin/sh
# My system IP/set ip address of server
SERVER_IP="65.55.12.13"
# Flushing all rules
iptables -F
iptables -X
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
 
# Allow incoming ssh only
iptables -A INPUT -p tcp -s 0/0 -d $SERVER_IP --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP -d 0/0 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
# make sure nothing comes or goes out of this box
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
This script is purely strict firewall. It only allows incoming ssh. No other incoming service or ping request or no outgoing service or request allowed. Incoming ssh connection can be either new or already established one and that is what specified by state rule '-m state --state NEW,ESTABLISHED'. Outgoing ssh connection state can be established only. By default this script allows everyone to ssh in by rule -s 0/0. If you want this access limited by IP or network address then replace -s 0/0 with IP address. For example allow incoming ssh from IP 202.54.1.20:
 
# Allow incoming ssh only from IP 202.54.1.20
iptables -A INPUT -p tcp -s 202.54.1.20 -d $SERVER_IP --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP -d 202.54.1.20 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT

Monday, February 17, 2014

memcache permission denied 13

#getenforce
#setenforce 0

cannot open shared object file no such file or directory

#ldconfig /usr/local/lib

Why am I still getting a password prompt with ssh with public key authentication


  • ssh-keygen -t rsa -b 2048 -f /path/to/key_name
  • adduser --disabled-password --group --system user_name
  • scp root@host:/home/user_name/.ssh/authorized_keys

Make sure the permissions on the ~/.ssh directory and its contents are proper. When I first set up my ssh key auth, I didn't have the ~/.ssh folder properly set up, and it yelled at me.
  • Your home directory ~ and your ~/.ssh directory on the remote machine must be writable only by you: rwx------ and rwxr-xr-x are fine, but rwxrwx--- is no good, even if you are the only user in your group (if you prefer numeric modes: 700 or 755, not 775).
  • Your private key file (on the local machine) must be readable and writable only by you: rw-------, i.e. 600.
  • Your ~/.ssh/authorized_keys file (on the remote machine) must be readable (at least 400), but you'll need it to be also writable (600) if you will add any more keys to it.
  • Also, if SELinux is set to enforcing, you may need to run restorecon -R -v ~/.ssh (see e.g.Ubuntu bug 965663 and Debian bug report #658675; this is patched in CentOS 6).

None of the range-specifier values in the Range

A server SHOULD return a response with this status code if a request included a Range request-header field, and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first-byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.)

When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content-type.

Kinds of SSL file

SSL has been around for long enough you'd think that there would be agreed upon container formats. And you're right, there are. Too many standards as it happens. So this is what I know, and I'm sure others will chime in.
  • .csr This is a Certificate Signing Request. Some applications can generate these for submission to certificate-authorities. It includes some/all of the key details of the requested certificate such as subject, organization, state, whatnot, as well as the public key of the certificate to get signed. These get signed by the CA and a certificate is returned. The returned certificate is the public certificate, which itself can be in a couple of formats.
  • .pem Defined in RFC's 1421 through 1424, this is a container format that may include just the public certificate (such as with Apache installs, and CA certificate files /etc/ssl/certs), or may include an entire certificate chain including public key, private key, and root certificates. The name is from Privacy Enhanced Email, a failed method for secure email but the container format it used lives on.
  • .key This is a PEM formatted file containing just the private-key of a specific certificate. In Apache installs, this frequently resides in /etc/ssl/private. The rights on this directory and the certificates is very important, and some programs will refuse to load these certificates if they are set wrong.
  • .pkcs12 .pfx .p12 Originally defined by RSA in the Public-Key Cryptography Standards, the "12" variant was enhanced by Microsoft. This is a passworded container format that contains both public and private certificate pairs. Unlike .pem files, this container is fully encrypted. Every time I get one I have to google to remember the openssl-fu required to break it into .key and .pem files.
A few other formats that show up from time to time:
  • .der A way to encode ASN.1 syntax, a .pem file is just a Base64 encoded .der file. OpenSSL can convert these to .pem. Windows sees these as Certificate files. I've only ever run into them in the wild with Novell's eDirectory certificate authority.
  • .cert .cer A .pem formatted file with a different extension, one that is recognized by Windows Explorer as a certificate, which .pem is not.
  • .crl A certificate revocation list. Certificate Authorities produce these as a way to de-authorize certificates before expiration.

In summary, there are three different ways to present certificates and their components:
  • PEM Governed by RFCs, it's used preferentially by open-source software. It can have a variety of extensions (.pem, .key, .cer, .cert, more)
  • PKCS12 A private standard that provides enhanced security versus the plain-text PEM format. It's used preferentially by Windows systems, and can be freely converted to PEM format through use of openssl.
  • DER The parent format of PEM. It's useful to think of it as a binary version of the base64-encoded PEM file. Not routinely used by anything in common usage.
I hope this helps.
http://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file