File System SecurityFile System Security
HỆ THỐNG TẬP TIN CỦA UNIXHỆ THỐNG TẬP TIN CỦA UNIX
Đối với hệ Đối với hệ đđiều hành UNIX, không iều hành UNIX, không
có khái niệm các ổ có khái niệm các ổ đđĩa khác nhau. ĩa khác nhau.
Sau quá trình khởi Sau quá trình khởi đđộng, toàn bộ ộng, toàn bộ
các thcác thưư mục và tập tin mục và tập tin đưđược ‘gắn ‘ ợc ‘gắn ‘
lên (mount) và tạo thành một hệ lên (mount) và tạo thành một hệ
thống tập tin thống nhất, bắt thống tập tin thống nhất, bắt đđầu từ ầu từ
gốc ‘/’ gốc ‘/’
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
$ df -k
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c0t0d0s0 192799 131990 41530 77% /
/dev/dsk/c0t0d0s6 962983 477544 427661 53% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
/dev/dsk/c0t0d0s3 289207 115445 144842 45% /var
/dev/dsk/c0t0d0s5 465775 28807 390391 7% /opt
/dev/dsk/c0t0d0s7 1290127 233611 1004911 19% /other
/dev/dsk/c0t0d0s1 311983 203961 76824 73% /usr/openwin
swap 418136 120 418016 1% /tmp
/dev/dsk/c0t1d0s2 4124422 2359571 1723607 58% /squid
$
SUN OS File System
[citd@server citd]$ df -k
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda1 447044 45006 378948 11% /
/dev/sda6 496627 119068 351909 25% /export
/dev/sda5 496627 405042 65935 86% /usr
/dev/sda7 492657 329963 137249 71% /var
[citd@server citd]$
Linux File System
/ +
! /bin
! /sbin
! /usr /usr/bin
! ! /usr/sbin
! ! /usr/local
! ! /usr/doc
!
! /etc
! /lib
! /var /var/adm
! /var/log
! /var/spool
/
/usr
/usr/home
/squid
/ /usr /usr/home
/squid
CD
/mnt /mnt/cdrom
TƯƠNG ỨNG GIỮA DISK PARTITIONS
VÀ CẤU TRÚC TẬP TIN
GIỚI THIỆU CÁC THƯ MỤC QUAN
TRỌNG CỦA UNIX
/ (THƯ MỤC GỐC )
/bin
/sbin
/usr/bin
/usr/sbin
/var
/var/log
/var/adm
/home
/export/home (SUNOS)
Quyền và sở hữu tập tin và thư mục của Unix
(directory and file permission and ownership)
-rw-r—r— 1 fido users 163 Dec 7 14:31 myfile
Kết quả của lệnh ls -l
Khi một tập tin hay thư mục được tạo ra, nó mang owner và
group của người tạo ra nó. Phần quyền dành cho user, group,
other phụ thuộc vào giá trò của umask
Ví dụ :
[tnminh@pasteur tnminh]$ umask
002
[tnminh@pasteur tnminh]$ echo “tao mot file” > tmp
[tnminh@pasteur tnminh]$ ls -l
total 5472
-rw-rw-r 1 tnminh tnminh 13 Oct 3 21:55 tmp
[tnminh@pasteur /etc]$ umask 022
[tnminh@pasteur tnminh]$ echo “tao mot file khac”>tmp1
[tnminh@pasteur tnminh]$ ls -l
-rw-rw-r 1 tnminh tnminh 13 Oct 3 21:55 tmp
-rw-r r 1 tnminh tnminh 18 Oct 3 21:59 tmp1
Umask và các quyền truy nhập tập tin
Dạng nhị phân của quyền truy nhập tập tin và Dạng nhị phân của quyền truy nhập tập tin và
ththưư mụcmục
Quyền truy nhập tập tin chia thành ba nhóm số cho chủ nhân (user), nhóm (group) Quyền truy nhập tập tin chia thành ba nhóm số cho chủ nhân (user), nhóm (group)
và còn lại (others)và còn lại (others)
read permissionread permission 44
write permission write permission 22
Execute permission Execute permission 11
NhNhưư vậy :vậy :
0 or 0 or —— : No permissions at all : No permissions at all
4 or r4 or r——: read: read only only
2 or 2 or ww : write: write only (rare) only (rare)
1 or 1 or ——x: execute x: execute
6 or rw6 or rw : read and write : read and write
5 or r5 or r x: read and execute x: read and execute
3 or 3 or wx: write and execute (rare) wx: write and execute (rare)
7 or rwx: read, write, and execute 7 or rwx: read, write, and execute
Thay Thay đđổi các thuộc tính của tập tin và thổi các thuộc tính của tập tin và thưư
mụcmục
Cách thay Cách thay đđổi tổi tươương ng đđối :ối :
chmod g+w myfile chmod g+w myfile thêm khả nthêm khả năăng write cho group của myfileng write cho group của myfile
chmod ochmod o x myfile x myfile bớt khả nbớt khả năăng chạy của others của myfileng chạy của others của myfile
Cách thay Cách thay đđổi tuyệt ổi tuyệt đđối :ối :
chmod 644 myfile => myfile sẽ có quyền rwchmod 644 myfile => myfile sẽ có quyền rw rr rr
Đối với các admin, nên dùng cách tuyệt Đối với các admin, nên dùng cách tuyệt đđối vì nó an toàn hối vì nó an toàn hơơn.n.
Đối với các thĐối với các thưư mục, thao tác hoàn toàn tmục, thao tác hoàn toàn tươương ng đươđương.ng.
chown cho phép chown cho phép đđổi ngổi ngưười sở hữu tập tin,ời sở hữu tập tin,
Chgrp cho phép Chgrp cho phép đđổi nhóm của tập tin,ổi nhóm của tập tin,
setuid và setgid bitssetuid và setgid bits
SetSet useruser id : Setid : Set useruser id nghĩa là khi chid nghĩa là khi chươương trình ng trình đưđược chạy, nó sẽ có ợc chạy, nó sẽ có
quyền nhquyền nhưư ngngưười chủ (owner) của file cho dù ngời chủ (owner) của file cho dù ngưười gọi chời gọi chươương trình ng trình
là ai là ai đđi nữa.i nữa.
Ví dụ :Ví dụ :
$ ls $ ls ––l /l /usr/susr/sbin/sendmailbin/sendmail
rwsrrwsr xrxr x root root sendmailx root root sendmail
TTươương tự, setng tự, set groupgroup id cho quyền chid cho quyền chươương trình nhng trình nhưư group của tập tin group của tập tin
chchươương trình.ng trình.
Bit thứ 4 mã giá trị này. 4 = setuid; 2= setgid,Bit thứ 4 mã giá trị này. 4 = setuid; 2= setgid,
Nếu /bin/sh có setuid bit set thì ai cũng là root vì owner của /bin/sh là Nếu /bin/sh có setuid bit set thì ai cũng là root vì owner của /bin/sh là
root root và mọi user và mọi user đđều dùng /bin/sh khi login ều dùng /bin/sh khi login
setgid cho thsetgid cho thưư mục = tập tin tạo ra trong thmục = tập tin tạo ra trong thưư mục này có cùng group mục này có cùng group
nhnhưư group của thgroup của thưư mụcmục
Setuid cho tập tin = không có tác dụngSetuid cho tập tin = không có tác dụng
Sticky bit = user chỉ có quyền xóa file do mình là owner. Ví dụ /tmpSticky bit = user chỉ có quyền xóa file do mình là owner. Ví dụ /tmp
Bảo mật hệ thống bằng kiểm tra setuid và
setgid bits
•Tìm tập tin có setuid bit set
•find / -perm -4000 -exec ls -l {} \;
•Tương tự cho setguid :
•Tìm tập tin không user
•find / -nouser -exec ls -l {} \;
•Tìm tập tin viết được
•find / -perm –2 -print
•Tìm tập tin không sở hữa
•find / -nouser -print
-r-s x x 1 root root 10704 Apr 15 1999 /usr/bin/passwd
-rws x x 2 root root 517916 Apr 7 1999 /usr/bin/suidperl
-rws x x 2 root root 517916 Apr 7 1999 /usr/bin/sperl5.00503
-rwsr-sr-x 1 root mail 64468 Apr 7 1999 /usr/bin/procmail
-rwsr-xr-x 1 root root 14036 Apr 16 1999 /usr/bin/rcp
-rwsr-xr-x 1 root root 10516 Apr 16 1999 /usr/bin/rlogin
•Chú ý : Không nên cho các shell script giá trò setuid hay setgid. Nếu chúng ta cần setuid,
setgid, viết chương trình bằng C hay một ngôn ngữ lập trình tương đương.
Một số tập tin "nguy hiểm". Trusted hosts
•/etc/hosts.equiv : Người sử dụng từ một máy có IP trong tập tin này, có cùng
account name, có thể sử dụng rlogin và rsh mà không cần vào password trên
máy này. Rất may rằng root là một ngoại lệ .
•.rhosts : giống như /etc/hosts.equiv, nhưng kiểm tra host-user. Đặc biệt user có
thể tạo .rhosts không thông qua admin. Vì vậy, nên hoàn toàn cấm việc tạo ra
.rhosts tại các thư mục cá nhân.
Checksum và checklist
•Lệnh sum cho phép xem xét xem tập tin có bị thay đổi về nội dung hay
không. Điều này giúp chúng ta phát hiện được virus vì virus nói chung phải
thay đổi nội dung của file.
•Nên chạy sum tại những thư mục mà nội dung không thay đổi về nguyeèn tắc
/sbin, /bin . Ghi lại kết quả vào một tập tin và sử dụng sau này để biết những
tập tin có checksum thay đổi.
•Checklist (thông qua lệnh ls) cho phép tìm ra những thay đổi của các tập tin
hệ thống. Chúng ta, cũng như checksum, nên tạo một file checklist ngay từ
đầu. Bằng cách này, chúng ta sẽ biết được các tập tin mới tạo ra không hợp
pháp.
Access Control List (ACL)
•Đây là một chuẩn mới của Unix cho phép phân quyền hạn truy nhập vào hệ
thống tập tin một cách chi tiết hơn hệ thống của Unix truyền thống. Hệ thống
này cho phép ví dụ cả group ggg có quyền đọc và user uuu của group ggg này
có quyền đọc và viết.
•Hai lệnh cơ bản của ACL là getfacl và setfacl.
•Nếu chúng ta bổ sung ACL cho một tập tin, chúng ta dùng lệnh
•setfacl -m acl_entry_list filename
•để biết một tập tin có sử dụng ACL, với lệnh ls -l ta có
•-rw-r + etc . Dấu + hiển thị rằng tập tin sử dụng ACL
•Có thể sử dụng ACL trên SUN OS 5.6
Network File System (NFS)Network File System (NFS)
NFS, the Network File System has three important characteristics:NFS, the Network File System has three important characteristics:
It makes sharing of files over a network possible.It makes sharing of files over a network possible.
It mostly works well enough.It mostly works well enough.
It opens a can of security risks that are well understood byIt opens a can of security risks that are well understood by
crackers, and easily exploited to get access (read, write andcrackers, and easily exploited to get access (read, write and delete) delete)
to all your files. to all your files.
Trên nguyên tắc, NFS server tin NFS client và ngược lại. Do đó, nếu NFS server hay client bò Trên nguyên tắc, NFS server tin NFS client và ngược lại. Do đó, nếu NFS server hay client bò
xâm nhập sẽ dễ dàng dẫn đến sự xâm nhập vào toàn bộ mạng NFS.xâm nhập sẽ dễ dàng dẫn đến sự xâm nhập vào toàn bộ mạng NFS.
Client : apollon
mount -o size=1024,wsize=1024 eris:/mn/eris/local /mnt
cd /mnt
ls –l
Or in /etc/fstab
# device mountpoint fs-type options dump fsckorder
eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024 0 0
Server : eris. /etc/exports
/mn/eris/local apollon(rw)
NFS model
NFS Client SecurityNFS Client Security
nosuid optionnosuid option : : the server's root user cannotthe server's root user cannot make a suidmake a suid root root
program on the file system, log in to the client as aprogram on the file system, log in to the client as a normal user and normal user and
then use the suidthen use the suid root program to become root on theroot program to become root on the clientclient
Remote Call Procedure (RPC)Remote Call Procedure (RPC) based based
servicesservices
đối với TCP, UDP protocols, port number có 2 bytes (65536 max.)đối với TCP, UDP protocols, port number có 2 bytes (65536 max.)
Mỗi RPCMỗi RPC based có một RPC service number duy nhất 4 bytes (4294 Mportsbased có một RPC service number duy nhất 4 bytes (4294 Mports
portmapper đợi ở cổng 111 (TCP và UDP)portmapper đợi ở cổng 111 (TCP và UDP)
khi một RPC based server khởi động, nó sẽ chiếm một cổng TCP hay UDP port, sau đó khi một RPC based server khởi động, nó sẽ chiếm một cổng TCP hay UDP port, sau đó
thông báo cho portmapper ánh xạ giữa số RPC duy nhất của nó và công TCP/UDP thông báo cho portmapper ánh xạ giữa số RPC duy nhất của nó và công TCP/UDP
nó vừa nhận.nó vừa nhận.
khi một RPC client muốn kết nối với một RPCkhi một RPC client muốn kết nối với một RPC based server, nó “hỏi “ portmapper và based server, nó “hỏi “ portmapper và
được biết cổng TCP ma ø RPCđược biết cổng TCP ma ø RPC based server đang đợi.based server đang đợi.
Client và server “quên “ portmapper và nối trực tiếp với nhau.Client và server “quên “ portmapper và nối trực tiếp với nhau.
Kẻ xâm nhập có thể bypass portmapperKẻ xâm nhập có thể bypass portmapper
NFS Server Security
•root_squash option : Now, if a user with UID 0 on the client attempts to access (read,
write, delete) the file system the server substitutes the UID of the
servers `nobody' account. Which means that the root user on the
client can't access or change files that only root on the server can
access or change.
Nhưng root của client có thể su thành bin hay adm và có thể xâm nhập vào
các tập tin có owner=bin trên server. Vì vậy, những tập tin binaries hay tập
tin thường quan trọng nên có owner là root.
•portmapper và nfsd có thể có vấn đề về security, cho phép thâm nhập trái phép
vào Server file system. Để khắc phục sơ hở này cần có
portmap: ALL
trong tập tin
/etc/hosts.deny
và
portmap: 129.240.223.0/255.255.255.0
trong
/etc/hosts.allow
để cho phép network
129.240.233.0 được sử dụng portmapper
•Nếu /etc/exports chỉ có file system mà không có host, mọi host đều có quyền mount file system
của server.
Network Information Service (NIS, NIS+)
SUN 1990
• NIS is a service that provides information, that has to be known
throughout the network, to all machines on the network. Information
likely to be distributed by NIS is:
· login names/passwords/home directories (/etc/passwd)
· group information (/etc/group)
If, for example, your password entry is recorded in the NIS passwd
database, you will be able to login on all machines on the network
which have the NIS client programs running.
• NIS+ is designed by Sun Microsystems Inc. as a replacement for NIS
with better security and better handling of large installations.
NIS security problems
• Một workstation tham gia vào NIS cần phải có tập tin /etc/passwd với
dòng cuối cùng như sau :
• +::0:0:::
• Hoặc +:
Nếu ta dùng dòng một và quên dấu +, ta sẽ có một super-user không login
name và không password ;-(. Vì vậy nên dùng dòng lệnh thứ hai)
• Nếu /etc/hosts.equiv chỉ chứa + thì tất cả các user của tất cả các host có
tên account như máy này có thể truy nhập không cần password. Chú ý
một số Unix, kể cả SUN, cài hosts.equiv chỉ với một dòng như vậy ;-(
#!/bin/sh
#
# fscheck - check file system for insecurities
#
# This should be run as root
#
PATH=/usr/bin:/bin
export PATH
CHECKDIRS="/bin /etc /usr/bin /usr/etc /usr/lib /usr/ucb"
# ls.master is the file to create by command 'ls -alsgR $CHECKDIRS > ls.master
MASTER_LS=ls.master
# sum.master is the file to create by command 'find $CHECKDIRS -type f -exec echo -n {} " " \; -exec sum {} \; > sum.master
MASTER_SUM=sum.master #
echo"Set-User-Id files found:"
find / -type f -a -perm -4000 -exec ls -aslg {} \;
echo ""
#
echo."Set-Group-Id files found:"
find / -type f -a -perm -2000 -exec ls -aslg {} \;
echo ""
#
#
echo"Device files not located in /dev :"
find / \( -type b -o -type c \) -print) | grep -v '^/dev'
echo ""
#
echo "World writable files and directories : "
find / -perm -2 -exec ls -aslgd {} \;
echo ""
#
#
echo " Files owned by none xistents user or group :"
find / \( -nouser -o -nogroup \) -exec ls -aslgd {} \;
echo ""
#
#
ls -alsgR $CHECKDIRS > /tmp/lschk.$$
#
#
find $CHECKDIRS -type f -exec echo -n {} " " \; -exec sum {} \; > /tmp/sumchk.$$
#
#
echo "Files in $CHECKDIRS whose attributes have changed : "
echo "< = master check list, > = current listing"
diff $MASTER_LS /tmp/lschk.$$
echo ""
#
#
echo "Files in $CHECKDIRS whose checksums have changed:"
echo "< = master check list, > = current listing"
diff $MASTER_SUM /tmp/sumchk.$$
rm -f /tmp/lschk.$$ /tmp/sumchk.$$
exit 0