¡¾·ì϶¹«¸æ¡¿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ÈÕ£¬±¦ÔËÀ³¹Ù·½ÍøÕ¾°²È«Ó¦¼±ÏìÓ¦ÖÐÐÄ£¨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