banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Cùng học Bash Shell Scripting  XML
  [Question]   Cùng học Bash Shell Scripting 06/12/2007 03:29:39 (+0700) | #1 | 102127
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Nhân topic của quanghuy12, tớ lập cái topic này để tất cả anh em nào thích viết scripts vào đây cùng thảo luận. Mọi người có thể sưu tầm hoặc tự nghĩ ra đề bài, post lên và những người khác cùng tìm hiểu. Hoặc bạn có thể post lên những đoạn scripts hay, thú vị mà bạn viết hoặc sưu tầm được.

Xin mở màn với vài câu:
+ Viết một đoạn script convert tất cả các file ảnh có định dạng *.bmp nằm trong một thư mục (nhập vào từ bàn phím) sang định dạng *.jpg
+ Nhập vào 1 user từ bàn phím. Kiểm tra xem user đó có xuất hiện trong /etc/passwd hay không?
+ Chỉnh sửa /etc/profile để khi đăng nhập với root bạn sẽ nhận được một lời chào
+ Viết một đoạn script nhập vào uid. In ra tên người dùng, thư mục home, shell và GUID.
+ Nhập vào một process ID. Kiểm tra xem process có PID đó có đang chạy hay không?
+ Viết một đoạn script kiểm tra 1 tham số đưa vào là số nguyên (integer) hay chuỗi (string)

Xin mời anh (chị) em.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 06/12/2007 04:39:09 (+0700) | #2 | 102137
[Avatar]
rickb
Reseacher

Joined: 27/01/2007 17:47:27
Messages: 200
Offline
[Profile] [PM] [Yahoo!]
Mình nghĩ đề này chỉ cần 2 dòng là xong rồi nhỉ smilie VD ta cần convert file ảnh trong thư mục abc thì đặt script này trong thư mục abc rồi cho chạy tự động bằng cron là xong (còn nếu đặt script này ở 1 nơi khác thư mục abc thì phải sửa script lại sử dụng đường dẫn tuyệt đối

#!/bin/bash
mv *.bmp *.jpg 


Có gì sai sót mong bỏ qua
Thân
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 06/12/2007 05:14:53 (+0700) | #3 | 102145
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]

rickb wrote:
Mình nghĩ đề này chỉ cần 2 dòng là xong rồi nhỉ smilie VD ta cần convert file ảnh trong thư mục abc thì đặt script này trong thư mục abc rồi cho chạy tự động bằng cron là xong (còn nếu đặt script này ở 1 nơi khác thư mục abc thì phải sửa script lại sử dụng đường dẫn tuyệt đối

#!/bin/bash
mv *.bmp *.jpg 


Có gì sai sót mong bỏ qua
Thân 


Cái gì thế này? Convert chứ có phải đổi tên đâu, đọc kĩ đề đi bro. Hint: sử dụng ImageMagick, trừ phi quanta muốn mọi người tự viết hoàn toàn script. Hơn nữa, câu lệnh trên của bro chắc chắn ko hoạt động nếu có nhiều file bmp.
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 06/12/2007 05:36:49 (+0700) | #4 | 102153
[Avatar]
rickb
Reseacher

Joined: 27/01/2007 17:47:27
Messages: 200
Offline
[Profile] [PM] [Yahoo!]

StarGhost wrote:

rickb wrote:
Mình nghĩ đề này chỉ cần 2 dòng là xong rồi nhỉ smilie VD ta cần convert file ảnh trong thư mục abc thì đặt script này trong thư mục abc rồi cho chạy tự động bằng cron là xong (còn nếu đặt script này ở 1 nơi khác thư mục abc thì phải sửa script lại sử dụng đường dẫn tuyệt đối

#!/bin/bash
mv *.bmp *.jpg 


Có gì sai sót mong bỏ qua
Thân 


Cái gì thế này? Convert chứ có phải đổi tên đâu, đọc kĩ đề đi bro. Hint: sử dụng ImageMagick, trừ phi quanta muốn mọi người tự viết hoàn toàn script. Hơn nữa, câu lệnh trên của bro chắc chắn ko hoạt động nếu có nhiều file bmp. 


lúc đầu mình cũng nghĩ vậy nhưng mình nghĩ nếu đã dùng chươngtrình làm thì cần gì viết shel script chạy làm chi nữa ? Còn về việc nhiều file thì mình thử rồi, cha tuốt smilie
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 06/12/2007 17:09:59 (+0700) | #5 | 102274
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]

rickb wrote:

Còn về việc nhiều file thì mình thử rồi, cha tuốt smilie
 


Không cãi được đâu bro, xem lại man page của mv nhé:

Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
 


Trừ phi bro viết 1 cái mv script khác, còn standard thì...
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 07/12/2007 03:13:19 (+0700) | #6 | 102368
[Avatar]
rickb
Reseacher

Joined: 27/01/2007 17:47:27
Messages: 200
Offline
[Profile] [PM] [Yahoo!]
Mình cãi gì đâu, cái này thì đã tự tay làm thực tế được chứ nói gì đọc lý thuyết man
[Up] [Print Copy]
  [Question]   Ai thích viết Bash Shell Scripting -- Vào đây 08/12/2007 16:32:08 (+0700) | #7 | 102753
[Avatar]
tan_khongminh
Member

[Minus]    0    [Plus]
Joined: 08/08/2006 21:02:22
Messages: 4
Location: Coltech
Offline
[Profile] [PM] [Yahoo!]

quanta wrote:
Nhân topic của quanghuy12, tớ lập cái topic này để tất cả anh em nào thích viết scripts vào đây cùng thảo luận. Mọi người có thể sưu tầm hoặc tự nghĩ ra đề bài, post lên và những người khác cùng tìm hiểu. Hoặc bạn có thể post lên những đoạn scripts hay, thú vị mà bạn viết hoặc sưu tầm được.

Xin mở màn với vài câu:
+ Viết một đoạn script convert tất cả các file ảnh có định dạng *.bmp nằm trong một thư mục (nhập vào từ bàn phím) sang định dạng *.jpg 

Chịu.
______________________________________________
+ Nhập vào 1 user từ bàn phím. Kiểm tra xem user đó có xuất hiện trong /etc/passwd hay không? 

Code:
#! /bin/bash
echo -n "User name: "
read uname
temp=`grep $uname /etc/passwd`
if [ "$uname" = "${temp%%:*}" ]
then
        echo "$uname is a created user"
else
        echo "$uname isn't a created user"
fi

________________________________________________


+ Chỉnh sửa /etc/profile để khi đăng nhập với root bạn sẽ nhận được một lời chào 


Thêm dòng sau vào cuối file profile (nếu chưa cài gói figlet thì cài vào):
Code:
figlet Welcome to my PC!



+ Viết một đoạn script nhập vào uid. In ra tên người dùng, thư mục home, shell và GUID. 

Code:
#! /bin/bash
echo -n "User id: "
read uid
temp=`grep "[^:]*smilie:$uid" /etc/passwd`
temp2=${temp#*x:}
if [ "${temp2%%:*}" = "$uid" ]
then
        echo User name: ${temp%%:*}
        ush=${temp##*:}
        temp=${temp%:*}
        echo Home Folder: ${temp##*:}
        echo User shell: $ush
        temp=${temp#*smilie:$uid:}
        echo GUID: ${temp%%:*}
else
        echo "User id is not exist!"
fi

________________________________________________


+ Nhập vào một process ID. Kiểm tra xem process có PID đó có đang chạy hay không? 

Code:
#! /bin/bash
echo -n "Process id: "
read pid
temp=`ps -p $pid | grep $pid`
if [ "$temp" = "$pid*" ]
then
        echo Process is running
else
        echo Process is not running
fi
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 09/12/2007 12:24:52 (+0700) | #8 | 102860
[Avatar]
lihavim
Elite Member

[Minus]    0    [Plus]
Joined: 08/06/2004 15:19:32
Messages: 506
Offline
[Profile] [PM]
+ Viết một đoạn script convert tất cả các file ảnh có định dạng *.bmp nằm trong một thư mục (nhập vào từ bàn phím) sang định dạng *.jpg
Có thể xài lệnh mogrify như sau:
Code:
mogrify -format jpg name.bmp

Xài cho nhanh thì dùng alias như sau:
Code:
alias bmp2jpg="mogrify -format jpg"

Tham khảo thêm về chỉnh sửa ảnh với dòng lệnh ở http://www.ibm.com/developerworks/linux/library/l-graf/#N101ED http://www.linux.com/articles/113978.


+ Viết một đoạn script kiểm tra 1 tham số đưa vào là số nguyên (integer) hay chuỗi (string)
Theo http://tldp.org/LDP/abs/html/string-manipulation.html thì thực ra bash nó không phân biệt số hay chuỗi mà cho vô chuỗi tất, tuỳ hoàn cảnh mà nó xử lý ra sao thôi.
Nhưng có thể coi số nguyên là chuỗi chỉ bao gồm các kí tự 0-9.
Code:
#!/bin/bash

echo -n "nhập vô: "
read nhap
nhap=`echo ${nhap//[0-9]/}`
[ "${#nhap}" = "0" ] && echo "số" || echo "chuỗi"


+ Nhập vào một process ID. Kiểm tra xem process có PID đó có đang chạy hay không?
Cái này em xin sửa lại cho ngắn gọn hơn 1 chút:
Code:
#!/bin/bash

echo -n "nhập vô: "
read nhap
nhap=`ps -eo pid | grep "\<$nhap$"`
[ "$nhap" = "" ] && echo "Đang chạy" || echo "Không chạy"
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 19/03/2008 12:09:46 (+0700) | #9 | 120088
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Tiếp theo:
Input: Cho một file text có một số dòng bắt đầu bằng dấu >
Output: Hãy thêm chuỗi "append" vào cuỗi mỗi dòng bắt đầu bằng dấu > này.

Ví dụ:
Input:
>111
abc
>222
def 

Output:
>111append
abc
>222append
def
 
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 21/03/2008 05:08:37 (+0700) | #10 | 120325
SemiNoob
Member

[Minus]    0    [Plus]
Joined: 06/03/2008 01:27:31
Messages: 7
Offline
[Profile] [PM]

lihavim wrote:

+ Viết một đoạn script kiểm tra 1 tham số đưa vào là số nguyên (integer) hay chuỗi (string)
Theo http://tldp.org/LDP/abs/html/string-manipulation.html thì thực ra bash nó không phân biệt số hay chuỗi mà cho vô chuỗi tất, tuỳ hoàn cảnh mà nó xử lý ra sao thôi.
Nhưng có thể coi số nguyên là chuỗi chỉ bao gồm các kí tự 0-9.
Code:
#!/bin/bash

echo -n "nhập vô: "
read nhap
nhap=`echo ${nhap//[0-9]/}`
[ "${#nhap}" = "0" ] && echo "số" || echo "chuỗi"

 

Hix cái này em không hiểu cái đoạn "${nhap//[0-9]/}" với "${#nhap}" cho lắm mấy anh giải thích dùm em được không smilie . Sorry em là Newbie smilie

lihavim wrote:

+ Nhập vào một process ID. Kiểm tra xem process có PID đó có đang chạy hay không?
Cái này em xin sửa lại cho ngắn gọn hơn 1 chút:
Code:
#!/bin/bash

echo -n "nhập vô: "
read nhap
nhap=`ps -eo pid | grep "\<$nhap$"`
[ "$nhap" = "" ] && echo "Đang chạy" || echo "Không chạy"
 


Cái này nó không chạy smilie. Em hiểu ý của anh này nhưng mà em không hiểu cái Script này. Em xin sửa lại thế này được không?

Code:
#!/bin/bash

echo -n "nhap vo: "
read nhap
nhap=`ps -eo pid | grep "$nhap"`
[ "$nhap" = "" ] && echo "Khong chay" || echo "Dang chay"


Nhân đây mấy anh cho em hỏi cái này: Em đọc trong 1 tài liệu người ta ghi " >&2" hoặc " 1>&2" ---> output standard error ==> nghĩa là nó output ra đâu vậy? Mấy anh giải thích dùm em được không smilie
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 21/03/2008 13:29:55 (+0700) | #11 | 120400
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

SemiNoob wrote:

lihavim wrote:

+ Viết một đoạn script kiểm tra 1 tham số đưa vào là số nguyên (integer) hay chuỗi (string)
Theo http://tldp.org/LDP/abs/html/string-manipulation.html thì thực ra bash nó không phân biệt số hay chuỗi mà cho vô chuỗi tất, tuỳ hoàn cảnh mà nó xử lý ra sao thôi.
Nhưng có thể coi số nguyên là chuỗi chỉ bao gồm các kí tự 0-9.
Code:
#!/bin/bash

echo -n "nhập vô: "
read nhap
nhap=`echo ${nhap//[0-9]/}`
[ "${#nhap}" = "0" ] && echo "số" || echo "chuỗi"

 

Hix cái này em không hiểu cái đoạn "${nhap//[0-9]/}" với "${#nhap}" cho lắm mấy anh giải thích dùm em được không smilie . Sorry em là Newbie smilie
 

Chào SemiNoob,

Để hiểu mấy cái này bạn kiếm một bài viết về Regex (Regular Expression) và đọc là ok thôi.
${nhap//[0-9]/}: trả về giá trị của biến nhap (theo thứ tự) ngoại trừ các chữ số từ 0 đến 9. Ví dụ bạn nhập vào abc123def456 thì echo ${nhap//[0-9]/} sẽ trả về abcdef.
${#nhap}: trả về chiều dài (length) của chuỗi nhap. Từ đó bạn sẽ hiểu được đoạn script trên. Bạn tìm lại trên diễn đàn tài liệu "Shell tutorial cơ bản" để tham khảo thêm.

SemiNoob wrote:

lihavim wrote:

+ Nhập vào một process ID. Kiểm tra xem process có PID đó có đang chạy hay không?
Cái này em xin sửa lại cho ngắn gọn hơn 1 chút:
Code:
#!/bin/bash

echo -n "nhập vô: "
read nhap
nhap=`ps -eo pid | grep "\<$nhap$"`
[ "$nhap" = "" ] && echo "Đang chạy" || echo "Không chạy"
 


Cái này nó không chạy smilie. Em hiểu ý của anh này nhưng mà em không hiểu cái Script này. Em xin sửa lại thế này được không?

Code:
#!/bin/bash

echo -n "nhap vo: "
read nhap
nhap=`ps -eo pid | grep "$nhap"`
[ "$nhap" = "" ] && echo "Khong chay" || echo "Dang chay"

 

Bạn không hiểu cái script của lihavim ở chỗ nào, đoạn script đó vẫn chạy bình thường nhưng bị nhầm giữa hai cái "echo" thôi mà.
Còn đoạn script của bạn sẽ bị sai đó. Bạn thử nghĩ xem sai ở đâu nhé.

SemiNoob wrote:

Nhân đây mấy anh cho em hỏi cái này: Em đọc trong 1 tài liệu người ta ghi " >&2" hoặc " 1>&2" ---> output standard error ==> nghĩa là nó output ra đâu vậy? Mấy anh giải thích dùm em được không smilie  

Bạn post cả đoạn tài liệu đó xem nào. Tớ đoán bạn đang muốn nói đến stdin, stdout, stderr.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 21/03/2008 22:17:03 (+0700) | #12 | 120443
SemiNoob
Member

[Minus]    0    [Plus]
Joined: 06/03/2008 01:27:31
Messages: 7
Offline
[Profile] [PM]
Sorry smilie ! Đúng là em đã thấy 2 cái echo để nhầm chỗ nhưng em không phải nói về cái đó! Hôm nay test lại thì thấy ok! Có lẽ do hôm qua test trên Window trứoc = Cygwin -> mà Cygwin thì không có agrument -eo pid nên có chỉnh sửa đôi chút rồi chép qua bên Linux quên chỉnh lại smilie.
Cái Script của em sai: >.<
1. Sai echo >.<
2. xxx có thể grep ra xxx | yxxx | xxxy ---> báo cáo sẽ sai nếu xxx không chạy mà yxxx chạy smilie

Đoạn tài liệu nó đây:

While this code will detect if the user is the superuser, it does not really solve the problem yet. We want to stop the script if the user is not the superuser, so we will code it like so:

Code:
if [ $(id -u) != "0" ]; then
    echo "You must be the superuser to run this script" >&2
    exit 1
fi



With this code, if the output of the id -u command is not equal to "0", then the script prints a descriptive error message, exits, and sets the exit status to 1, indicating to the operating system that the script executed unsuccessfully.

Notice the ">&2" at the end of the echo command. This is another form of I/O direction. You will often notice this in routines that display error messages. If this wwwection were not done, the error message would go to standard output. With this wwwection, the message is sent to standard error. Since we are executing our script and wwwecting its standard output to a file, we want the error messages separated from the normal output.
 


Anh có sẵn tài liệu về regex hay "Shell tutorial cơ bản" share em, đường link cũng được. Em đang search trên diễn đàn mà nhiều trang quá, phải duyệt từng trang, thời gian thì hơi hạn hẹp! Thx anyway smilie
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 21/03/2008 23:15:53 (+0700) | #13 | 120453
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

SemiNoob wrote:

Đoạn tài liệu nó đây:

While this code will detect if the user is the superuser, it does not really solve the problem yet. We want to stop the script if the user is not the superuser, so we will code it like so:

Code:
if [ $(id -u) != "0" ]; then
    echo "You must be the superuser to run this script" >&2
    exit 1
fi



With this code, if the output of the id -u command is not equal to "0", then the script prints a descriptive error message, exits, and sets the exit status to 1, indicating to the operating system that the script executed unsuccessfully.

Notice the ">&2" at the end of the echo command. This is another form of I/O direction. You will often notice this in routines that display error messages. If this wwwection were not done, the error message would go to standard output. With this wwwection, the message is sent to standard error. Since we are executing our script and wwwecting its standard output to a file, we want the error messages separated from the normal output.
 

 

Phần này bạn có thể đọc thêm về http://www.cpqlinux.com/wwwect.html
Trong Linux quy ước như sau:
Code:
0 	 Standard input 	 /dev/stdin 	   /dev/fd/0
1 	 Standard output       /dev/stdout 	/dev/fd/1
2 	 Standard error 	/dev/stderr 	 /dev/fd/2

Thông thường thì một đoạn script sẽ đọc standard input từ bàn phím và gửi standard output cùng standard error ra màn hình.

Như vậy, với lệnh echo "You must be the superuser to run this script" >&2 bạn có thể hiểu là: output của lệnh echo sẽ được wwwect đến standard error

SemiNoob wrote:

Anh có sẵn tài liệu về regex hay "Shell tutorial cơ bản" share em, đường link cũng được. Em đang search trên diễn đàn mà nhiều trang quá, phải duyệt từng trang, thời gian thì hơi hạn hẹp! Thx anyway smilie
 

http://www.zytrax.com/tech/web/regex.htm
/hvaonline/posts/list/10496.html
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 10/04/2008 11:12:14 (+0700) | #14 | 124350
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Nếu bạn có thói quen lưu lại logs của Pidgin, hãy chú ý một điều: tất cả logs này đều được lưu ở dạng plain text hoặc html. Ai đó "táy máy" vào máy của bạn, họ sẽ dễ dàng đọc được tất cả.

Cách tốt nhất là cài TrueCrypt lên, tạo một Virtual Volume và dời logs vào đó.

Bạn có thể viết 1 đoạn script như sau và cho vào /etc/cron.hourly:
Code:
#!/bin/bash
LOGS_DIR="/home/<user_name>/.purple/logs/yahoo/<your_account>"
BACKUP_DIR="/media/truecrypt/logs/yahoo/<your_account>"
for ACCOUNT in `ls $LOGS_DIR`; do
        if [ -d $BACKUP_DIR/$ACCOUNT ]; then
                for DATE in `ls $LOGS_DIR/$ACCOUNT`; do
                        mv $LOGS_DIR/$ACCOUNT/$DATE $BACKUP_DIR/$ACCOUNT
                done
        else
                mv $LOGS_DIR/$ACCOUNT $BACKUP_DIR
        fi
done

rm -fr $LOGS_DIR/*
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Ai thích viết Bash Shell Scripting -- Vào đây 30/04/2008 04:44:51 (+0700) | #15 | 128209
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Nhân việc đọc lại bài viết /hvaonline/posts/list/1985.html của binhnx2000, xin chia sẻ cùng mọi người vài đoạn scripts:


...
1) Về sự phân cấp, quyền hạn, sở hữu cho File Sự phân cấp, quyền và sự sở hữu rõ ràng đơn giản đã tạo lên sức mạnh bảo mật của Unix/Linux. Vấn đề đầu tiên mà chúng ta cần kiểm tra có lẽ là sự phân cấp, quyền hạn, sở hữu các File trên hệ thống của bạn. Nếu không được cấu hình một cách chính xác điều này hết sức nguy hiểm. Cho lý do này bạn lên thường xuyên kiểm toán hệ thống File trên Server của bạn. Đặc biệt lên chú ý đến ID của root. Có một số chương trình cho phép người sử dụng trên hệ thống của bạn có thể tự do Set UID mà không cần root. Chắc tôi không cần nói, bạn cũng biết là phải làm gì với các chương trình loại này rồi chứ ? Bây giờ chúng ta tìm các File có sự phân cấp, quyền hạn không ổn định trên hệ thống của bạn và sau đó điều chỉnh lại giá trị an toàn cho chúng:


root@localhotst# find / -type f -perm +6000 -ls
59520 30 -rwsr-xr-x 1 root root 30560 Apr 15 1999 /usr/bin/chage
59560 16 -r-sr-sr-x 1 root lp 15816 Jan 6 2000 /usr/bin/lpq
 


root@localhotst# chmod -s /usr/bin/chage /usr/bin/lpq
root@localhotst# ls -l /usr/bin/lpq /usr/bin/chage
-rwxr-xr-x 1 root root 30560 Apr 15 1999 /usr/bin/chage
-r-xr-xr-x 1 root lp 15816 Jan 6 2000 /usr/bin/lpq
 


Các dòng lệnh trên tìm các File có UID root hay tương đương root. Tiếp đó gán thuộc tính chỉ cho phép root mới có quyền thực thi nó.
 


Giá trị +6000 dành cho permissions ở đây có nghĩa là: tìm tất cả các file có SUID (4000) hoặc SGID (2000). Dấu + ở đây có nghĩa là hoặc

Thử chạy trên máy tớ nó ra khá nhiều:
Code:
# find / -type f -perm +6000 -ls
find: /proc/8149/task/8149/fdinfo/4: No such file or directory
find: /proc/8149/fdinfo/4: No such file or directory
131894   64 -rwsr-xr-x   1 root     root        57972 Jan 23 11:04 /usr/bin/pulseaudio
132176 1868 -rws--x--x   1 root     root      1906404 Mar 14 17:49 /usr/bin/Xorg
130140    4 -rwxr-sr-x   1 root     utempter     3284 Mar 27 00:45 /usr/bin/konsole
131504  104 -r-xr-s--x   1 root     20          99208 Jan  8 13:37 /usr/bin/gnotravex
131135  432 -r-xr-s--x   1 root     20         435436 Jan  8 13:37 /usr/bin/iagno
132003  124 -r-xr-s--x   1 root     20         119700 Jan  8 13:37 /usr/bin/mahjongg
132042   28 -rwsr-xr-x   1 root     root        25708 Sep 25  2007 /usr/bin/passwd
129652  112 -r-xr-s--x   1 root     20         108776 Jan  8 13:37 /usr/bin/gtali
130352   20 -rwsr-xr-x   1 root     root        14448 Oct 16  2007 /usr/bin/rlogin
130991  388 -rwsr-xr-x   1 root     root       389480 Sep 25  2007 /usr/bin/wodim
130093   48 -rwsr-xr-x   1 root     root        47080 Apr  8 09:11 /usr/bin/chage
130353   16 -rwsr-xr-x   1 root     root         9064 Oct 16  2007 /usr/bin/rsh
131345   96 -rwxr-sr-x   1 root     nobody      93164 Nov 20 14:40 /usr/bin/ssh-agent
130350   24 -rwsr-xr-x   1 root     root        18732 Oct 16  2007 /usr/bin/rcp
132280  348 -rwxr-sr-x   1 root     screen     348908 Aug 24  2007 /usr/bin/screen
130994  132 -r-xr-s--x   1 root     20         130436 Jan  8 13:37 /usr/bin/gnome-falling-blocks
131160  168 ---s--x--x   2 root     root       164644 Feb 21 12:45 /usr/bin/sudo
130557   12 -rwxr-sr-x   1 root     tty         10052 Jan 16 08:47 /usr/bin/write
130079  476 -r-xr-s--x   1 root     20         480144 Jan  8 13:37 /usr/bin/gnibbles
129545   16 -rwxr-sr-x   1 root     mail        16260 Aug 22  2007 /usr/bin/lockfile
129889  588 -rwsr-xr-x   1 root     root       594068 Aug 17  2007 /usr/bin/cdrdao
131350   48 -rwsr-xr-x   1 root     root        47680 Feb 28 05:01 /usr/bin/at
129564   48 -rwsr-xr-x   1 root     root        47472 Apr  8 09:11 /usr/bin/gpasswd
131271  160 -r-xr-s--x   1 root     20         157712 Jan  8 13:37 /usr/bin/gnobots2
132110    8 -rwsr-xr-x   1 root     root         6808 Mar 10 13:56 /usr/bin/kpac_dhcp_helper
131324   36 -rwx--s--x   1 root     slocate     34716 Aug 24  2007 /usr/bin/locate
131161   28 -rwsr-xr-x   1 root     root        24656 Apr  8 09:11 /usr/bin/newgrp
131160  168 ---s--x--x   2 root     root       164644 Feb 21 12:45 /usr/bin/sudoedit
129818   12 -r-xr-sr-x   1 root     tty         10712 Oct 10  2007 /usr/bin/wall
130132  108 -r-xr-s--x   1 root     20         105992 Jan  8 13:37 /usr/bin/gnomine
130101   76 -rws--x--x   1 root     root        71088 Mar 20 04:51 /usr/bin/sperl5.8.8
131839  312 -rwsr-sr-x   1 root     root       312496 Feb 13 02:24 /usr/bin/crontab
132305  112 -r-xr-s--x   1 root     20         109524 Jan  8 13:37 /usr/bin/glines
131570   16 -rws--x--x   1 root     root        15720 Jan 16 08:47 /usr/bin/chfn
131302  100 -r-xr-s--x   1 root     20          96700 Jan  8 13:37 /usr/bin/same-gnome
132120    8 -rwsr-xr-x   1 root     root         5872 Mar 10 13:56 /usr/bin/kgrantpty
131825  104 -r-xr-s--x   1 root     20         101036 Jan  8 13:37 /usr/bin/gnotski
130523   16 -rws--x--x   1 root     root        14696 Jan 16 08:47 /usr/bin/chsh
129668  180 -rwxr-sr-x   1 root     20         178100 Sep 11  2006 /usr/bin/gnuchess
745371   56 -rwsr-xr-x   1 root     root        50695 Jan  9 22:13 /usr/local/bin/fusermount
749030   88 -r-sr-xr-x   1 root     nagios      84029 Apr 22 12:59 /usr/local/nagios/libexec/check_icmp
749029   84 -r-sr-xr-x   1 root     nagios      79512 Apr 22 12:59 /usr/local/nagios/libexec/check_dhcp
939496    8 -rwx--s--x   1 root     utmp         6896 Jan  4 14:59 /usr/libexec/utempter/utempter
939333   12 -rwsr-x---   1 root     polkituser     9924 Apr  4 03:03 /usr/libexec/polkit-grant-helper-pam
939502   20 -rwxr-sr-x   1 root     polkituser    16440 Apr  4 03:03 /usr/libexec/polkit-grant-helper
939151    8 -rws--x--x   1 vcsa     root         8136 Nov 14 09:03 /usr/libexec/mc/cons.saver
939183  188 -rwsr-xr-x   1 root     root       186096 Nov 20 14:40 /usr/libexec/openssh/ssh-keysign
1392660   16 -rwx--s--x   1 root     utmp        12616 Sep 18  2007 /usr/lib/vte/gnome-pty-helper
1426488   20 -rwsr-x---   1 root     squid       17952 Mar 13 09:33 /usr/lib/squid/ncsa_auth
1425016   16 -rwsr-x---   1 root     squid       15672 Mar 13 09:33 /usr/lib/squid/pam_auth
2331680  156 -rwsr-xr-x   1 root     root       151841 Mar 18 14:35 /usr/kerberos/bin/ksu
1394453  164 -rwxr-sr-x   1 root     postdrop   160744 Oct  4  2007 /usr/sbin/postdrop
1392562   32 -rwsr-xr-x   1 root     root        30072 Sep 11  2006 /usr/sbin/fping6
1392566   32 -rwsr-xr-x   1 root     root        29140 Sep 11  2006 /usr/sbin/fping
1392960   12 -r-s--x---   1 root     apache      11668 Jan 28 06:27 /usr/sbin/suexec
1392810    8 -rwsr-x---   1 root     gnokii       7440 Nov 29 08:58 /usr/sbin/mgnokiidev
1392909   20 -rwx--s--x   1 root     lock        16904 Oct 15  2007 /usr/sbin/lockdev
1392553   36 -rws--x--x   1 root     root        35152 Oct 16  2007 /usr/sbin/userhelper
161941  188 -rwxr-sr-x   1 root     postdrop   185348 Oct  4  2007 /usr/sbin/postqueue
1392655   12 -rwsr-xr-x   1 root     root         6456 Aug 22  2007 /usr/sbin/ccreds_validate
1392885   12 -rwsr-xr-x   1 root     root         7056 Oct  9  2007 /usr/sbin/usernetctl
 95122   64 -rwsr-xr-x   1 root     root        60956 Jan 16 08:46 /bin/mount
 95064   28 -rwsr-xr-x   1 root     root        27244 Mar 25 14:04 /bin/su
 95077   44 -rwsr-xr-x   1 root     root        41912 Sep 14  2007 /bin/ping
 95124   40 -rwsr-xr-x   1 root     root        39264 Jan 16 08:46 /bin/umount
 95129   24 -rwsr-xr-x   1 root     root        23908 Feb 28 06:05 /bin/fusermount
 95080   40 -rwsr-xr-x   1 root     root        36940 Sep 14  2007 /bin/ping6
443522   48 -rwsr-x---   1 root     dbus        46276 Feb 27 23:40 /lib/dbus-1/dbus-daemon-launch-helper
253666    8 -rwxr-sr-x   1 root     root         6164 Oct  9  2007 /sbin/netreport
253637   64 -rwsr-xr-x   1 root     root        55456 Oct 17  2007 /sbin/mount.nfs
253515   16 -rwsr-xr-x   1 root     root        12552 Feb 19 16:02 /sbin/pam_timestamp_check
253541   28 -rwsr-xr-x   1 root     root        27576 Feb 19 16:02 /sbin/unix_chkpwd

Trong danh sách này, có những file bắt buộc phải được gán SUID hoặc SGID, nhưng có những files bạn phải bỏ ngay lập tức.

Viết một đoạn script ngắn gọn để làm việc này:
Code:
#!/bin/bash
for FILE in `find / -type f -perm +6000`
do
        echo -n "chmod -s "$FILE"? (y/n) "
        read ANSWER
        if [ $ANSWER = "y" ]; then
                chmod -s $FILE
        fi
done


Hãy chắc chắn rằng: bạn biết file nào không cần chạy với SUID hoặc SGID.

(Còn tiếp)
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Cùng học Bash Shell Scripting 31/07/2010 16:17:28 (+0700) | #16 | 217027
[Avatar]
vltn
Member

[Minus]    0    [Plus]
Joined: 13/07/2010 23:09:11
Messages: 74
Location: V9F
Offline
[Profile] [PM] [WWW]
Quanta vui lòng cho cái topic này tiếp để mọi người tham khảo đi smilie

Đang xem đến đây, smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|