eldorado
suid/sgid 파일 점검 본문
suid/sgid 파일 점검
일반 유저 권한으로 suid/sgid가 설정된 파일을 실행할 때에는 해당 파일의 소유자 또는 소유그룹 권한으로 작동하게 되므로 suid/sgid는 보안적인 관점에서 매우 중요한 역할을 한다. 이 때문에 /usr/sbin/sendmail과 같이 전통적으로 root 권한의 suid/sgid가 설정된 파일에서 보안 취약성이 많이 발견된 것이 사실이다.
따라서 초기 시스템 구축 시 뿐만 아니라 정기적으로 시스템에서 suid/sgid가 설정된 파일을 모니터링 하여 suid나 sgid가 불필요하다면 파일 자체를 삭제 하거나 s비트를 해제하는 것이 좋다.
# find / -type f \( -perm -4000 -o -perm -2000 \) |
또는
# find / -type f -perm +6000 -ls |
먼저 위의 명령어를 실행하여 전체 시스템 내(/)에서 suid(4000)나 sgid(2000)가 설정된 파일을 검색하도록 한다. 배포판이나 버전에 따라 결과는 조금씩 다를 수는 있지만 일반적으로 다음과 같은 결과가 보일 것이다.
위 명령의 결과로 출력되는 각각의 파일에 대해 간단히 살펴보자.
/usr/bin/chage (suid)
- chage는 유저의 암호 만기일 정보를 변경하거나 조회하는 명령어인데,
root만 사용하면 되므로 suid가 설정될 필요 없다.
/usr/bin/gpasswd (suid)
- /etc/group이나 /etc/gshadow 파일을 관리할 때 사용되는 명령어인데 잘 사용되지 않으므로 굳이 설정할 필요 없다.
/usr/bin/wall (sgid)
- 터미널에 연결되어 있는 유저들에게 메시지를 보내고자 할 때 사용되는데,
실제 서버를 이용 시 사용될 이유가 없으므로 해제하는 것이 좋다.
/usr/bin/chfn (suid)
- finger로 질의 시 보이는 정보를 변경하는 명령어인데, finger 자체가 보안 문제등 으로 잘 사용되지 않으므로 필요 없다.
/usr/bin/chsh (suid)
- bash나 csh등 로그인시 실행되는 쉘을 변경하는 명령어인데, 쉘을 변경할 필요 가없다면 필요 없다.
/usr/bin/newgrp (suid)
- 새로운 그룹으로 로그인하는 명령어인데, 잘 사용되지 않으므로 역시 필요 없다.
/usr/bin/write (sgid)
- talk와 같이 다른 유저에게 메시지를 보내는 명령어인데, 서버 운영 시 잘 사용되 지 않고 필요도 없다.
/usr/bin/at (suid)
- at는 cron과 같이 반복적인 작업을 하고자 할 때 사용되는데, at 자체가
cron에 비해 보안 결함이 있고 잘 사용되지 않으므로 필요 없다.
/usr/sbin/usernetctl(suid)
- 일반 유저가 인터페이스를 제어하도록 하는 명령어인데, 허용할 필요가 없 으므로 필요 없다.
/usr/sbin/userhelper (suid)
- GUI를 통해 암호를 관리하고자 할 때 필요한데, 서버 운영 시 GUI 자체가 보안 상 문제가 될 수 있으므로 필요 없다.
/bin/mount (suid)
- 파일 시스템을 마운트 하고자 할 때 필요한데, 일반 유저에게 마운트 권한을 줄 필요가 없으므로 필요 없다.
/bin/umount (suid)
- 파일 시스템을 언마운트 하고자 할 때 필요한데, 일반 유저에게 언마운트 권한을 줄 필요가 없으므로 필요 없다.
/usr/sbin/lockdev (sgid)
- devices를 잠글 때 필요하며 lock이라는 그룹 권한으로 설정되어 있는데,
그대로 두는 것이 좋다.
/bin/ping (suid)
- ping은 잘 알고 있듯이 icmp echo request 패킷을 발송하는 것으로
일반 유저에게 ping을 허용하려면 suid를 그대로 유지하고 일반유저에게 ping을 금지하려면 suid를 해제하면 된다.
. 만약 4755 대신 0755로 설정한 상태에서 일 반 유저가 ping을 실행하면 아래와 같은 에러가 나게 된다.
.
ping: icmp open socket: Operation not permitted
/usr/sbin/traceroute (suid)
- traceroute는 네트워크 경로를 추적하는 명령어로서 일반 유저에게 traceroute 를 허용하려면 suid를 그대로 유지하고, 금지하려면 suid를 해제하면 된다.
.
/usr/bin/passwd (suid)
- suid가 설정된 파일 중 가장 많이 사용되는 명령어일 것이다.
일반 유저가 자 신의 암호를 변경하려면 /etc/shadow 파일을 읽고 쓸 수 있는 권한이 있어야 하는데, 이는 root 권한만이 가능하므로 passwd 파일은 root 소유의 suid가 설정되어 있어야 한다. 따라서 이 파일의 퍼미션을 755등으로 변경하면 오직 root만이 암호를 변경할 수 있게 된다.
.
/usr/bin/crontab (suid)
- 일반 유저가 cron을 설정하여 사용하도록 허용할 경우에는 suid가 필요하지만
일반 유저가 cron을 사용할 수 없도록 제한할 경우에는 불필요하다.
이후 suid가 설정된 파일에서 s 비트를 해제하는 명령어는 아래와 같다.
# chmod u-s /usr/sbin/suid_file |
위는 user에 설정된 s 비트를 해제(-)하는 명령어이고, 만약 s 비트를 설정하려면 -s 대신 "chmod u+s"를 실행하면 된다.
. 또는 s 비트를 해제하려면 아래와 같이 4xxx 대신 0xxx 또는 0을 빼고 실행해도 된다.
.
# chmod 0700 /usr/sbin/suid_file 또는 chmod 700 /usr/sbin/suid_file |
같은 방법으로 sgid가 설정된 파일에서 s 비트를 해제하는 명령어는 아래와 같다.
# chmod g-s /usr/sbin/sgid_file |
위는 group에 설정된 s 비트를 해제(-)하는 명령어이고, 만약 s 비트를 설정하려면 -s 대신 "chmod g+s"를 실행하면 된다.
. 또는 s 비트를 해제하려면 아래와 같이 2xxx 대신 0xxx 또는 0을 빼고 실행해도 된다.
.
# chmod 0700 /usr/sbin/sgid_file 또는 chmod 700 /usr/sbin/sgid_file |
'@ Tips' 카테고리의 다른 글
[Kubernetes] 타임존 설정 (0) | 2024.05.08 |
---|---|
CISCO 스위치 NTP 설정 (0) | 2021.07.02 |
스위치 네트워크 기본명령어(2) (0) | 2020.02.28 |
스위치 네트워크 기본명령어(1) (0) | 2020.02.28 |
바코반(BACOBAN) 살균티슈 (0) | 2020.01.29 |