Tải bản đầy đủ (.ppt) (48 trang)

Chương 12: An toàn Hệ thống File Linux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (10.46 MB, 48 trang )







File System Security
File System Security
HỆ THỐNG TẬP TIN CỦA UNIX
HỆ THỐNG TẬP TIN CỦA UNIX
Đối với hệ điều hành UNIX, không
Đối với hệ điều hành UNIX, không
có khái niệm các ổ đóa khác nhau.
có khái niệm các ổ đóa khác nhau.
Sau quá trình khởi động, toàn bộ
Sau quá trình khởi động, toàn bộ
các thư mục và tập tin được ‘gắn ‘
các thư mục và tập tin đượ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 đầu từ
thống tập tin thống nhất, bắ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ớ duù :
[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 vaứ caực quyen truy nhaọp taọ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à
thư mục
thư mục
Quyền truy nhập tập tin chia thành ba nhóm số cho chủ nhân (user), nhóm
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)
(group) và còn lại (others)
read permission
read permission
4

4


write permission
write permission
2
2


Execute permission
Execute permission
1
1


Như vậy :
Như vậy :

0 or —-: No permissions at all
0 or —-: No permissions at all

4 or r—: read-only
4 or r—: read-only

2 or -w-: write-only (rare)
2 or -w-: write-only (rare)

1 or —x: execute
1 or —x: execute


6 or rw-: read and write
6 or rw-: read and write

5 or r-x: read and execute
5 or r-x: read and execute

3 or -wx: write and execute (rare)
3 or -wx: write and execute (rare)

7 or rwx: read, write, and execute
7 or rwx: read, write, and execute

Thay đổi các thuộc tính của tập tin và thư
Thay đổi các thuộc tính của tập tin và thư
mục
mục
Cách thay đổi tương đối :
Cách thay đổi tương đối :

chmod g+w myfile
chmod g+w myfile


thêm khả năng write cho group của myfile
thêm khả năng write cho group của myfile

chmod o-x myfile
chmod o-x myfile



bớt khả năng chạy của others của myfile
bớt khả năng chạy của others của myfile
Cách thay đổi tuyệt đối :
Cách thay đổi tuyệt đối :

chmod 644 myfile => myfile sẽ có quyền rw-r r
chmod 644 myfile => myfile sẽ có quyền rw-r r


Đối với các admin, nên dùng cách tuyệt đối vì nó an toàn hơn.
Đối với các admin, nên dùng cách tuyệt đối vì nó an toàn hơn.
Đối với các thư mục, thao tác hoàn toàn tương đương.
Đối với các thư mục, thao tác hoàn toàn tương đương.
chown cho phép đổi người sở hữu tập tin,
chown cho phép đổi người sở hữu tập tin,
Chgrp cho phép đổi nhóm của tập tin,
Chgrp cho phép đổi nhóm của tập tin,

setuid và setgid bits
setuid và setgid bits
Set-user-id : Set-user-id nghóa là khi chương trình được chạy, nó sẽ
Set-user-id : Set-user-id nghóa là khi chương trình được chạy, nó sẽ
có quyền như người chủ (owner) của file cho dù người gọi chương
có quyền như người chủ (owner) của file cho dù người gọi chương
trình là ai đi nữa.
trình là ai đi nữa.


Ví dụ :
Ví dụ :


$ ls –l /
$ ls –l /
usr/s
usr/s
bin/sendmail
bin/sendmail

rwsr-xr-x root root sendmail
rwsr-xr-x root root sendmail
Tương tự, set-group-id cho quyền chương trình như group của tập tin
Tương tự, set-group-id cho quyền chương trình như group của tập tin
chương trình.
chươ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
Nếu /bin/sh có setuid bit set thì ai cũng là root vì owner của /bin/sh
là root
là root
và mọi user đều dùng /bin/sh khi login
và mọi user đều dùng /bin/sh khi login


.
.
setgid cho thư mục = tập tin tạo ra trong thư mục này có cùng group
setgid cho thư mục = tập tin tạo ra trong thư mục này có cùng group
như group của thư mục
như group của thư mục

Setuid cho tập tin = không có tác dụng
Setuid 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ụ /tmp
Sticky 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ề nguyn
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 by
It opens a can of security risks that are well understood by




crackers, and easily exploited to get access (read, write and
crackers, and easily exploited to get access (read, write and


delete) to all your files.
delete) to all your files.
Trên nguyên tắc, NFS server tin NFS client và ngược lại. Do đó, nếu
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
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.
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 Security
NFS Client Security


nosuid option
nosuid option
:
:
the server's root user cannot
the server's root user cannot


make a suid-root
make a suid-root
program on the file system, log in to the client as a
program on the file system, log in to the client as a


normal user and
normal user and
then use the suid-root program to become root on the
then use the suid-root program to become root on the


client
client
.

.

Remote Call Procedure (RPC)-based
Remote Call Procedure (RPC)-based
services
services
-
-
đố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 RPC-based có một RPC service number duy nhất 4 bytes (4294 Mports
- Mỗi RPC-based 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 nó
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.
vừa nhận.
- khi một RPC client muốn kết nối với một RPC-based server, nó “hỏi “ portmapper và
- khi một RPC client muốn kết nối với một RPC-based server, nó “hỏi “ portmapper và
được biết cổng TCP ma ø RPC-based server đang đợi.
được biết cổng TCP ma ø RPC-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 portmapper
- Kẻ 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

×