2008/01/02

솔라리스에서 일반 사용자가 ifconfig만 실행하게 할 수 있을까요 ? (Solaris RBAC)

가장 쉬운 방법은 그 사용자의 아디디가 user1이라고 할때
user1을 모두 로그아웃 시키고,
#usermod -P"Network Management" user1
이라고 실행한 후 user1이 로그인해보면

$profiles -l 실행했을 경우
자신이 실행할 수 있는 root 전용 명령어들이 나타납니다.

이 때 나타나는 명령어는 Network Management Profile(Role)에서 주어진 내용
으로 다음과 같습니다.

Network Management:solaris:cmd:::/sbin/dladm:privs=sys_net_config
Network Management:solaris:cmd:::/sbin/ifconfig:uid=0
Network Management:solaris:cmd:::/sbin/route:privs=sys_net_config
Network Management:solaris:cmd:::/sbin/routeadm:euid=0;
privs=proc_chroot,proc_owner,sys_net_config
Network Management:solaris:cmd:::/usr/sfw/sbin/zebraadm:privs=basic
Network Management:suser:cmd:::/usr/bin/netstat:uid=0
Network Management:suser:cmd:::/usr/bin/rup:euid=0
Network Management:suser:cmd:::/usr/bin/ruptime:euid=0
Network Management:suser:cmd:::/usr/bin/setuname:euid=0
Network Management:suser:cmd:::/usr/sbin/asppp2pppd:euid=0
Network Management:suser:cmd:::/usr/sbin/ifconfig:uid=0
Network Management:suser:cmd:::/usr/sbin/ipaddrsel:euid=0
Network Management:suser:cmd:::/usr/sbin/ipqosconf:euid=0
Network Management:suser:cmd:::/usr/sbin/rndc:privs=file_dac_read
Network Management:suser:cmd:::/usr/sbin/route:uid=0
Network Management:suser:cmd:::/usr/sbin/snoop:uid=0
Network Management:suser:cmd:::/usr/sbin/spray:euid=0

그런데, 이때 중요한 것은 user1이 새로 로그인해서 ifconfig를 실행하려면 특수한 쉘을 사용해야만 실행할 수 있습니다. 그렇게 안할 수도 있습니다만, 여러가지 이유로 이렇게 하는 것이 보안상이나 운영면에서 좋습니다.

$pfexec ifconfig -a plumb

혹은

$pfksh
#ifconfig -a plumb <-이때 effective user id로 root를 받게 되는데, 앞서 나열된 명령어만 사용가능합니다. #exit $ 위처럼 프로파일을 사용하게 되면, 해당하는 명령어 이외에 다른 명령어 군들 도 실행할 수 있게 되는데, 이는 장단점이 있습니다. 실제로 ifconfig를 효과 적으로 컨트롤하려면 route 명령어도 사용할 수 있어야 하는 경우도 있으며, netstat와 같은 모니터링 커맨드도 돌릴 수 있어야 하기 때문에, 한번에 이런 것들을 가능하게 하는데는 이것이 가장 좋습니다. 하지만, 특수 쉘을 사용하지않고, root처럼 기본 쉘에서 바로 실행할 수 있도록 할 수 있는데 user1을 로그아웃 시킨후 다음과 같이 실행합니다. #usermod -K"defaultpriv=proc_fork,proc_exec,sysnet_config" user1 을 실행한 후 user1이 새로이 로그인하면 위의 ifconfig 명령어를 실행할 수 있습니다. 이때는 pfexec/pfksh과 같은 특수 쉘을 사용하지 않고 바로 실행할 수 있습니다. 이 방법의 장점은 사용자의 애플리케이션이 바로 위의 해당하는 기능을 위한 시스템 콜을 일반 사용자로서 바로 사용할 수 있다는 점입니다. 반면, 이 방법의 문제점은 사용자 관점의 명령어 기준으로 구분하지 않고, 접 근권한 관점에서 컨트롤하기 때문에 위의 옵션이 다른 어떤 커맨드가 작동가 능한지 일단 알기 어렵습니다. 해당 애플리케이션이 어떤 디바이스를 접근하 고 어떤 시스템콜을 쓰는지를 조사해보아야만 알수 있는 것이기 때문입니다. 즉, 저위의 정의에 따라서, 사용자는 애플리케이션 내부에서 ifconfig를 실행 할 수 있습니다. 또한, 기존에 미리 구성되어 있는 프로파일을 사용하지 않고, 완전히 개인화된 프로파일을 만들어서 제공할 수도 있습니다. 이런 경우에는 어떤 사용자가 실행할 수 있는 명령어군들을 완전히 정의해서 사용할 수 있으므로, 완벽한 컨트롤을 할 수가 있는 반면에, 사용자가 원하는 기능에 의존성이 있는 명령어가 어떤 것이 있는 지를 사전에 조사해놓고 사용하는 것이 좋습니다. 예를 들면, ifconfig만을 돌릴 수 있는 Network Management2를 만들었는데, 실제로 사용자는 ifconfig와 함께 snoop을 늘 같이 돌리기 원할 수 가 있으므로, 이러한 조사를 사전에 해서 사용상 제한이 없도록 하는 것이 바람직합니다. 완전한 개인화를 하기위해서는 다음과 같은 순서로 합니다. 1) 일단 Profile을 작성합니다. /etc/security/prof_attr 2) 만든 프로파일(Profile) 이름으로 실행될 실행 화일을 선언합니다. /etc/security/exec_attr 3) 일반 사용자에게 새로 만든 프로파일을 적용합니다. TIP ! user1을 로그아웃 시키지 않고 구성을 변경하려면 /etc/user_attr을 편집해야 합니다. 편집하게 되면 해당 사용자가 변경 이후에 실행하는 쉘부터 효과가 적용되어 나타납니다.