İşlenmemiş soketleri kullanan bir programın Linux yetenekleriyle root olmayan bir şekilde doğru şekilde çalıştırılmaya çalışıyorum.Belirli bir kullanıcıya ve çalıştırılabilirliğe yetenekler vermek için PAM yetenek modülünü nasıl kullanırım?
#include <netinet/ip.h>
int main()
{
int sd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);
if(sd < 0)
{
perror("socket() error");
return 1;
}
return 0;
}
bunu derlemek ve non-root olarak çalıştırmak, beklendiği gibi, ben bir hata alıyorum:
[[email protected] ~]$ make socket
cc socket.c -o socket
[[email protected] ~]$ ./socket
socket() error: Operation not permitted
Ben cap_net_raw
yeteneği eklerseniz, etkili olarak aşağıdaki gibi bir programdır ve izin verilen yetenek, çalışır.
[[email protected] ~]$ sudo setcap cap_net_raw+ep socket
[sudo] password for user:
[[email protected] ~]$ ./socket
[[email protected] ~]$
Şimdi, sadece belirli bir kullanıcının yerine herkesin, cap_net_raw
ile bu programı çalıştırmak böylece bunu yapmak için pam_cap.so
kullanmak istiyorum. Benim /etc/security/capability.conf
geçerli:
cap_net_raw user
(Ben de /etc/pam.d/sshd
çalıştı ama bu da işe görünmüyordu unutmayın) olduğu /etc/pam.d/login
Benim: Ben bir ssh oturumu vardı
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth substack system-auth
auth include postlogin
#Added this line to use pam_cap
auth required pam_cap.so
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
, ben geri çıkış yapmış ve o ve sonra aşağıdaki komutları yürütür:
[[email protected] ~]$ sudo setcap cap_net_raw+p socket
[sudo] password for user:
[[email protected] ~]$ getcap socket
socket = cap_net_raw+p
[[email protected] ~]$ ./socket
socket() error: Operation not permitted
[[email protected] ~]$
sorum şu: Neden cap_net_raw
ile 'yuva' programını çalıştırmak mümkün değildi? Giriş yaptığımda, kullanıcımın izin verilen bir yetenek olarak elde edeceğini ve 'kullanıcı' nın cap_net_raw
ile 'soketi' çalıştırmasına izin vereceğini düşündüm.
Bu benim üzerinde çalışan ettiğim şey:
[[email protected] ~]$ uname -a
Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[[email protected] ~]$ cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)