bash-3.00$ /usr/sbin/snoop
snoop: /dev/dmfe0: Permission denied
Решим данную проблему.
Чтобы поглядеть свои привилегии в текущем shell выполняем
bash-3.00$ ppriv -v $$
8792: -bash
flags =
E: file_link_any,proc_exec,proc_fork,proc_info,proc_session
I: file_link_any,proc_exec,proc_fork,proc_info,proc_session
P: file_link_any,proc_exec,proc_fork,proc_info,proc_session
L: contract_event,contract_observer, cpc_cpu, dtrace_kernel, dtrace_proc,dtrace_user,
file_chown,file_chown_self,file_dac_execute,file_dac_read,file_dac_search,
file_dac_write,file_downgrade_sl,file_link_any,file_owner,file_setid,file_upgrade_sl,
graphics_access,graphics_map,ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,
net_icmpaccess,net_mac_aware,net_privaddr,net_rawaccess,proc_audit,proc_chroot,
proc_clock_highres,proc_exec,proc_fork,proc_info,proc_lock_memory,proc_owner,
proc_priocntl,proc_session,proc_setid,proc_taskid,proc_zone,sys_acct,sys_admin,sys_audit,
sys_config,sys_devices,sys_ipc_config,sys_linkdir,sys_mount,sys_net_config,sys_nfs,
sys_res_config,sys_resource,sys_suser_compat,sys_time,sys_trans_label,win_colormap,
win_config,win_dac_read,win_dac_write,win_devices,win_dga,win_downgrade_sl,win_fontpath,
win_mac_read,win_mac_write,win_selection,win_upgrade_sl
Чтобы посмотреть каких привилегий мне не хватает исполняем команду ppriv в режиме отладчика
bash-3.00$ ppriv -eD /usr/sbin/snoop
snoop[8809]: missing privilege "net_rawaccess" (euid = 585, syscall = 5) for "devpolicy" needed at spec_open+0xd4
snoop: /dev/dmfe0: Permission denied
-bash-3.00$
Из вывода видно что не хватает привилегии net_rawaccess , так же в этом можно убедиться исполнив
bash-3.00$ truss /usr/sbin/snoop
execve("/usr/sbin/snoop", 0xFFBFFE0C, 0xFFBFFE14) argc = 1
.....
.....
stat("/dev/dmfe0", 0xFFBFF6C0) = 0
open("/dev/dmfe0", O_RDWR) Err#13 EACCES [net_rawaccess]
fstat64(2, 0xFFBFE408) = 0
....
Вывод показывает, что пользователю не хватает привилегии net_rawaccess.
Значит необходимо её дать данному пользователю, для этого переходим в режим суперпользователя(su).
Задаём привилегии пользователю admin:
root@test:~# usermod -K defaultpriv=basic,net_rawaccess admin
UX: usermod: admin is currently logged in, some changes may not take effect until next login.
Видим, что изменить привилегии админу не удалось и они вступят в силу при следующем входе в систему,т.к.
из под админа я перешёл в режим суперпользователя.
Убеждаемся, что привилегии действительно добавлены:
root@test:~# cat /etc/user_attr
#
# Copyright (c) 2003 by Sun Microsystems, Inc. All rights reserved.
#
# /etc/user_attr
#
# user attributes. see user_attr(4)
#
#pragma ident "@(#)user_attr 1.1 03/07/09 SMI"
#
adm::::profiles=Log Management
lp::::profiles=Printer Management
root::::auths=solaris.*,solaris.grant;profiles=Web Console Management,All;lock_after_retries=no
admin::::type=normal;defaultpriv=basic,net_rawaccess
root@test:~#
Теперь открываем новую сессию от пользователя admin и проверяем привилегии
-bash-3.00$ ppriv -v $$
8830: -bash
flags =
E: file_link_any,net_rawaccess,proc_exec,proc_fork,proc_info,proc_session
I: file_link_any,net_rawaccess,proc_exec,proc_fork,proc_info,proc_session
P: file_link_any,net_rawaccess,proc_exec,proc_fork,proc_info,proc_session
L: contract_event,contract_observer,cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,
file_chown,file_chown_self,file_dac_execute,file_dac_read,file_dac_search,file_dac_write,
file_downgrade_sl,file_link_any,file_owner,file_setid,file_upgrade_sl,graphics_access,graphics_map,
ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,net_icmpaccess,net_mac_aware,net_privaddr,
net_rawaccess,proc_audit,proc_chroot,proc_clock_highres,proc_exec,proc_fork,proc_info,
proc_lock_memory,proc_owner,proc_priocntl,proc_session,proc_setid,proc_taskid,proc_zone,
sys_acct,sys_admin,sys_audit,sys_config,sys_devices,sys_ipc_config,sys_linkdir,sys_mount,
sys_net_config,sys_nfs,sys_res_config,sys_resource,sys_suser_compat,sys_time,sys_trans_label,
win_colormap,win_config,win_dac_read,win_dac_write,win_devices,win_dga,win_downgrade_sl,
win_fontpath,win_mac_read,win_mac_write,win_selection,win_upgrade_sl
Пробуем исполнить:
-bash-3.00$ /usr/sbin/snoop
Using device /dev/dmfe0 (promiscuous mode)
nbadmin.my.local -> test TCP D=22 S=1532 Ack=1195115507 Seq=3633069593 Len=0 Win=65415
nbadmin.my.local -> test TCP D=22 S=1532 Push Ack=1195115507 Seq=3633069593 Len=52 Win=65415
Из вывода видно, что выданные привилегии работают это нам и требовалось.
Кстати их можно не только давать, но и отнимать:
# usermod -K defaultpriv=basic,!priv-name username
Только нельзя отменять proc_fork или proc_exec без этих привилегий пользователь не сможет использовать систему.
Вот вкратце рассказал про механизм, а уж что и кому раздавать дело каждого
Манипулировать привилегиями можно и через Role-Based Access Control (RBAC), но это уже материалы
для другой статьи.