ช่วงหลัง หันมาศึกษาและใช้ SELinux อย่างจริงจัง พยายามจะไม่ปิดการใช้ SELinux แต่จะแก้ไขคอนฟิก อนุญาตเป็นรายโปรแกรมไป
บทความนี้ขอแปะวิธีแก้ไข SELinux บนเครื่องที่รัน vsftpd FTP Server เพื่อให้ผู้ใช้สามารถล็อกอิน ftp เข้ามา home ของผู้ใช้เองได้
หมายเหตุ ในที่นี้ทดลองบน CentOS 6.2 ในลีนุกซ์เวอร์ชั่นอื่นๆ คอนฟิก SELinux อาจแตกต่างไป
ทดลองใช้ ftp ด้วย user1
[root@cent6 ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): user1
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/home/user1
Login failed.
ftp>
ผู้ใช้ user1 สามารถ login เข้า ftp ได้ (password ถูกต้อง) แต่ไม่สามารถเข้าไดเร็คทอรี home ของตัวเองได้
สาเหตุเนื่องจากดีฟอลต์คอนฟิก SELinux ของ CentOS 6 ไม่อนุญาตให้ ftp เข้าไปใช้ไดเร็คทอรี home ได้
หากดูไฟล์ /var/log/audit/audit.log ไปด้วย จะเห็นข้อความฟ้องแบบนี้
[root@cent6 ~]# tail -f /var/log/audit/audit.log type=AVC msg=audit(1342860489.387:8445): avc: denied { search } for pid=1806 comm="vsftpd" name="home" dev=sda3 ino=393217 scontext=unconfined_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:home_root_t:s0 tclass=dir
ใช้คำสั่ง getsebool เพื่อดูคอนฟิก SELinux ค่า “ftp_home_dir” ว่า ftp สามารถเข้า home ของผู้ใช้ได้หรือไม่
ถ้า off คือไม่สามารถใช้ได้
[root@cent6 ~]# getsebool ftp_home_dir
ftp_home_dir --> off
ถ้าต้องการเปลี่ยนแปลงคืออนุญาตให้ user ใช้ ftp แล้วเข้า home ได้ ต้องใช้คำสั่ง setsebool เพื่อเปลี่ยน “ftp_home_dir” เป็น “on”
[root@cent6 ~]# setsebool ftp_home_dir on
หลังการแก้ไข
[root@cent6 ~]# getsebool ftp_home_dir ftp_home_dir --> on
ถ้าต้องการแก้ไขค่าคอนฟิก SELinux นี้อย่างถาวร (persistant) คือมีผลหลังการรีบู๊ตเครื่องด้วย ต้องเพิ่มออปชั่น ‘-P’ เข้าไป ตัวอย่างเช่น
[root@cent6 ~]# setsebool -P ftp_home_dir on
ทดลอง ftp ด้วย user อีกครั้ง หลังการแก้ไข
[root@cent6 ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>