¡¾·ì϶¹«¸æ¡¿Linux CIFS±¾µØÌáȨ·ì϶

°ä²¼¹¦·ò 2026-05-29

Ò»¡¢·ì϶¸ÅÊö



0529·ì϶¸ÅÊö.png


Linux CIFS¿Í»§¶ËÊÇLinux KernelÖÐÓÃÓÚ¹ÒÔØºÍ½Ó¼ûSMB/CIFSÍøÂçÎļþ¹²ÏíµÄÄÚºË×é¼þ£¬£¬³£ÓÃÓÚ½Ó¼ûWindowsÎļþ¹²Ïí¡¢NAS¼°ÆóÒµÎļþ·þÎñÆ÷¡£cifs-utilsÊÇÆäÅäÌ×Óû§Ì¬¹¤¾ß¼¯£¬£¬Ìṩmount.cifs¡¢cifs.upcallµÈ·¨Ê½£¬£¬ÓÃÓÚ´¦ÖÃCIFS¹ÒÔØ¡¢Kerberos/SPNEGOÈÏÖ¤¼°ÓйØÃÜÔ¿ÒªÇó¡£


2026Äê5ÔÂ29ÈÕ£¬£¬OG¶«·½Ìü°²È«Ó¦¼±ÏìÓ¦ÖÐÐÄ£¨VSRC£©¼à²âµ½Linux CIFS±¾µØÌáȨ·ì϶¡£¸Ã·ì϶ԴÓÚÄں˲àδÑéÖ¤cifs.spnego keyÃèÊöÊÇ·ñÀ´×Ô¿ÉÐÅCIFSÄں˸ߵÍÎÄ£¬£¬µ¼Ö±¾µØµÍȨÏÞÓû§¿Éͨ¹ýrequest_keyαÔìcifs.spnegoÃèÊö£¬£¬´¥·¢cifs.upcallÒÔrootȨÏÞÔËÐУ¬£¬²¢ÀûÓÃÊÜ¿Øpid¡¢uid¡¢creduid¡¢upcall_targetµÈ×Ö¶ÎÇл»ÖÁ¹¥»÷Õß¶¨Ãû¿Õ¼ä£¬£¬ÔÚȨÏÞ½µÂäǰ¼ÓÔØ¶ñÒâNSSÄ £¿£¿£¿é£¬£¬ÊµÏÖroot´úÂëÖ´ÐС£³É¹¦ÀûÓúó¿ÉÆëÈ«½ÚÖÆÊÜÓ°ÏìÖ÷»ú£¬£¬Ôì³ÉϵͳÅäÖá¢ÒµÎñÊý¾ÝºÍÕ˺ÅÍ´´¦Ð¹Â¶»ò´Û¸Ä¡£



¶þ¡¢Ó°ÏìÁìÓò



Linux Kernel£ºÎ´ºÏÈë²¹¶¡3da1fdf4efbc490041eb4f836bf596201203f8f2µÄ°æ±¾

cifs-utils >= 6.14

¸Ã·ì϶ÀûÓû¹ÒÀÀµÒÔÏÂǰÌáͬʱÂú×㣺ϵͳװÖÃcifs-utils²¢±£ÁôĬÈÏcifs.spnego request-key¹æ¶¨£»CIFSÄÚºËÄ £¿£¿£¿é¿É¼ÓÔØ»òÒѱàÒë½øÄںˣ»ÔÊÐí·ÇÌØÈ¨Óû§´´½¨user namespaceºÍmount namespace£»SELinux¡¢AppArmorµÈ°²È«Õ½Êõδ×è¶Ï¸ÃÀûÓÃÁ´¡£²¿ÃÅ¿¯Ðаæ¿ÉÄÜͨ¹ýĬÈϰ²È«Õ½Êõ×è¶ÏPoC£¬£¬µ«ÔÚÕ½Êõ·Å¿íºóÈÔ¿ÉÄÜÊÜÓ°Ïì¡£

 


Èý¡¢°²È«´ëÊ©



3.1 Éý¼¶°æ±¾


¹Ù·½ÒѰ䲼Äں˲àÐÞ¸´²¹¶¡£¬£¬ÒÔÐÞ¸´¸Ã·ì϶¡£¡£

ÐÞ¸´ÌύΪ3da1fdf4efbc£¨¡°smb: client: reject userspace cifs.spnego descriptions¡±£©¡£½¨ÒéÓû§¾¡¿ìÉý¼¶ÖÁ¿¯Ðа泧Ḛ́䲼µÄ°²È«Äں˰汾£¬£¬»ò¸üÐÂÖÁÒѺÏÈë¸Ã²¹¶¡µÄLinux Kernel°æ±¾¡£¸Ã²¹¶¡ÔÚÄں˲àΪcifs.spnego keyÀàÐÍÔö³¤ÃèÊöÑéÖ¤Âß¼­£¬£¬½öÔÊÐíCIFSʹÓÃspnego_credÌáÒéµÄºÏ·¨ÃèÊöͨ¹ýУÑ飬£¬´Ó¶ø×è¶Ïͨ³£Óû§Î±Ôìcifs.spnego upcall²¢´¥·¢rootȨÏÞcifs.upcallµÄÀûÓÃõè¾¶£¬£¬Í¬Ê±£¬£¬½¨Òé³ÖÐø¹Ø×¢cifs-utils¹Ù·½¼°¸÷Linux¿¯Ðа氲ȫ²¼¸æ£¬£¬ÊµÊ±¸üÐÂcifs-utilsÈí¼þ°ü¡£

ÏÂÔØÁ´½Ó£º

https://github.com/torvalds/linux/commit/3da1fdf4efbc490041eb4f836bf596201203f8f2/


3.2 Ò»Ê±´ëÊ©


ÈçÒµÎñ²»±ØÒªSMB/CIFS¹ÒÔØ£¬£¬²»ÈÝCIFSÄÚºËÄ £¿£¿£¿é¼ÓÔØ£¬£¬»òÐ¶ÔØcifs-utils¡£

Èç²»±ØÒªKerberos CIFSÈÏÖ¤£¬£¬É¾³ý»ò¸²¸ÇĬÈÏcifs.spnego request-key¹æ¶¨£¬£¬ÀýÈ磺

cat >/etc/request-key.d/cifs.spnego.conf <<'EOF'

create cifs.spnego * * /usr/sbin/keyctl negate %k 30 %S

EOF

½ûÓ÷ÇÌØÈ¨Óû§¶¨Ãû¿Õ¼ä£¬£¬½µµÍ±¾µØµÍȨÏÞÓû§»ú¹Ø¸ôÀ붨Ãû¿Õ¼ä²¢ÓÕµ¼root¸¨Öú·¨Ê½Çл»µÄ·çÏÕ¡£

ά³ÖSELinux¡¢AppArmorµÈÇ¿ÖÆ½Ó¼û½ÚÖÆÕ½Êõ¿ªÆô£¬£¬Ô¤·À·Å¿íÓйØuser namespace¡¢mount namespace¼°NSSÄ £¿£¿£¿é¼ÓÔØÏÞ¶È¡£

¼ÓÇ¿request-key»Øµ÷Á´Â·°²È«Ð£Ñ飬£¬Ô¤·ÀÓû§Ì¬helperÐÅÀµÎ´¾­ÑéÖ¤µÄpid¡¢uid¡¢creduid¡¢upcall_targetµÈ×ֶΡ£

¶Ôcifs.upcall¡¢request-key¡¢keyctl¡¢namespace´´½¨ÐÐΪ½øÐÐÉó¼ÆºÍ¸æ¾¯£¬£¬ÖØµã¹Ø×¢µÍȨÏÞÓû§Òì³£´¥·¢cifs.spnego upcallµÄÐÐΪ¡£

Ô¤·ÀÔÚ¸ßȨÏÞ¸¨Öú·¨Ê½ÖлùÓÚ¹¥»÷Õ߿ɿض¨Ãû¿Õ¼äÖ´ÐÐNSS½âÎö¡¢¶¯Ì¬¿â¼ÓÔØµÈÃô¸Ð²Ù×÷£¬£¬Ô¤·ÀÔÚȨÏÞ½µÂäǰ¼ÓÔØ²»³ÉÐÅ´úÂë¡£


3.3 ͨÓý¨Òé


¶¨ÆÚ¸üÐÂϵͳ²¹¶¡£¬£¬Ï÷¼õϵͳ·ì϶£¬£¬ÌáÉý·þÎñÆ÷µÄ°²È«ÐÔ¡£

¼ÓǿϵͳºÍÍøÂçµÄ½Ó¼û½ÚÖÆ£¬£¬Åú¸Ä·À»ðǽսÊõ£¬£¬¹Ø±Õ·Ç±ØÒªµÄÀûÓö˿ڻò·þÎñ£¬£¬Ï÷¼õ½«Î£ÏÕ·þÎñ£¨ÈçSSH¡¢RDPµÈ£©Â¶³öµ½¹«Íø£¬£¬Ï÷¼õ¹¥»÷Ãæ¡£

ʹÓÃÆóÒµ¼¶°²È«²úÆ·£¬£¬ÌáÉýÆóÒµµÄÍøÂ簲ȫ»úÄÜ¡£

¼ÓǿϵͳÓû§ºÍȨÏÞÖÎÀí£¬£¬ÆôÓöà³É·ÖÈÏÖ¤»úÖÆºÍ×îСȨÏÞ×¼Ôò£¬£¬Óû§ºÍÈí¼þȨÏÞӦά³ÖÔÚ×îµÍÏÞ¶È¡£

ÆôÓÃÇ¿ÃÜÂëÕ½Êõ²¢ÉèÖÃΪ¶¨ÆÚÅú¸Ä¡£

 

3.4 ²Î¿¼Á´½Ó


https://heyitsas.im/posts/cifswitch/

https://seclists.org/oss-sec/2026/q2/717