मैं "passwd" द्वारा उपसर्ग नाम के साथ एक फ़ाइल क्यों नहीं बना सकता "/ etc" में?


9

मेरे पास एक पीसी है जिसमें उबंटू 16.04 स्थापित है। हाल ही में मैं कुछ पैकेजों को स्थापित करना चाहता हूं, लेकिन उन्हें स्थापित करने में समस्या है। कुछ खुदाई के बाद, मैंने पाया कि विफलता लिनक्स उपयोगकर्ता खाता प्रणाली से संबंधित है। समस्या यह है कि उपसर्ग नाम के किसी भी फ़ाइल को पथ passwd.में नहीं बनाया जा सकता है /etc

# ls /etc/passwd.*
ls: cannot access '/etc/passwd.*': No such file or directory

# touch /etc/passwd.test-test-test
touch: cannot touch '/etc/passwd.test-test-test': Permission denied

# ls /etc/passwe.*
ls: cannot access '/etc/passwe.*': No such file or directory

# touch /etc/passwe.test-test-test
#

मैं उस फ़ाइल को अन्य पथों में बना सकता हूं, जैसे कि /या /usr, लेकिन अंदर नहीं /etc, और मैं फ़ाइल को अन्य फ़ाइल नामों के साथ बना सकता हूं /etc, लेकिन उपसर्ग द्वारा दर्ज फ़ाइल नामों के साथ नहीं passwd.। मैं अन्य पीसी के साथ इस समस्या को पुन: पेश नहीं कर सकता।

मैंने अन्य आदेशों की कोशिश की है:

  • nano /etc/shadow.xxx
  • echo xxx > /etc/shadow.xxx
  • touch /etc/test-temp-file && mv /etc/test-temp-file /etc/shadow.xxx
  • systemctl stop apparmor
  • सिस्टम को रिबूट करें

कुछ भी काम नहीं करता है।

इस समस्या का क्या कारण हो सकता है?

यहाँ कुछ डीबग कमांड आउटपुट दिए गए हैं:

# ls -ld /etc
drwxr-xr-x 136 root root 12288 Aug 12 10:07 /etc

# lsattr -d /etc
----------I--e-- /etc

# ls -dZ /etc
? /etc

# type -a touch
touch is /usr/bin/touch
touch is /bin/touch

# file "$(command -v touch)"
/usr/bin/touch: symbolic link to /bin/touch

यहाँ straceउत्पादन है:

# strace touch /etc/passwd.test-test-test
execve("/usr/bin/touch", ["touch", "/etc/passwd.test-test-test"], [/* 22 vars */]) = 0
brk(NULL)                               = 0x8da000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=80559, ...}) = 0
mmap(NULL, 80559, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9bc360e000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1868984, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9bc360d000
mmap(NULL, 3971488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9bc3033000
mprotect(0x7f9bc31f3000, 2097152, PROT_NONE) = 0
mmap(0x7f9bc33f3000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c0000) = 0x7f9bc33f3000
mmap(0x7f9bc33f9000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f9bc33f9000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9bc360c000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9bc360b000
arch_prctl(ARCH_SET_FS, 0x7f9bc360c700) = 0
mprotect(0x7f9bc33f3000, 16384, PROT_READ) = 0
mprotect(0x60e000, 4096, PROT_READ)     = 0
mprotect(0x7f9bc3622000, 4096, PROT_READ) = 0
munmap(0x7f9bc360e000, 80559)           = 0
brk(NULL)                               = 0x8da000
brk(0x8fb000)                           = 0x8fb000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=1668976, ...}) = 0
mmap(NULL, 1668976, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9bc3473000
close(3)                                = 0
open("/etc/passwd.test-test-test", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = -1 EACCES (Permission denied)
utimensat(AT_FDCWD, "/etc/passwd.test-test-test", NULL, 0) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2995, ...}) = 0
read(3, "# Locale name alias data base.\n#"..., 4096) = 2995
read(3, "", 4096)                       = 0
close(3)                                = 0
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "touch: ", 7touch: )                  = 7
write(2, "cannot touch '/etc/passwd.test-t"..., 41cannot touch '/etc/passwd.test-test-test') = 41
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, ": Permission denied", 19: Permission denied)     = 19
write(2, "\n", 1
)                       = 1
close(1)                                = 0
close(2)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

2
क्या ls -ld /etcकहता है कैसे के बारे में lsattr -d /etc? यदि आप SELinux का उपयोग कर रहे हैं, तो क्या ls -dZ /etcकहता है? यदि आप AppArmor का उपयोग कर रहे हैं, तो समतुल्य कमांड क्या है (मुझे नहीं पता कि यह क्या है)? यह अन्य पीसी /etc/से अलग कैसे है /etc? वहां एक ही कमांड चलाएं और मतभेद खोजें।
निकड

है touchएक समारोह या एक स्क्रिप्ट या कुछ और? क्या करें type -a touchऔर file "$(command -v touch)"रिपोर्ट करें? मैं अपने 16.04 बॉक्स पर पुन: पेश नहीं कर सकता।
मुरु १

@NICKD मैंने AppArmor को छोड़कर सभी कमांड आउटपुट की तुलना की है क्योंकि मुझे यह नहीं मिला कि मैं किसी फ़ोल्डर की संबंधित जानकारी कैसे दिखा सकता हूं। परिणाम वही हैं।
EFanZh

1
बस यह सुनिश्चित करने के लिए: आप इसे rootसही कर रहे हैं ?
पनकी

1
उबंटू जाहिरा तौर पर apparmor का उपयोग करता है, देखें: help.ubuntu.com/community/AppArmor
राफेल किओवर

जवाबों:


6

मुझे पता चला क्यों। ऐसा इसलिए है क्योंकि ISecTP (लिनक्स खतरा निवारण के लिए समापन बिंदु सुरक्षा) मेरे पीसी पर स्थापित किया गया था। इसमें " एक्सेस प्रोटेक्शन " शामिल है, जो या तो फैनोटिफ़ाइबल कर्नेल इंटरफ़ेस का उपयोग करता है, या कर्नेल में कस्टम मॉड्यूल के इंजेक्शन ( इनमे से कौन सा काम करता है ), जिससे मनमाने रास्तों से वंचित किया जा सके। मुझे इसकी जानकारी नहीं थी क्योंकि मैं पीसी का उपयोग करने वाला अकेला नहीं हूं। इसे अनइंस्टॉल करने के बाद अब सब कुछ ठीक है।

मदद के लिए आप सभी को धन्यवाद!


बहुत दिलचस्प है, मैंने कभी इस तरह के सॉफ्टवेयर के बारे में नहीं सुना है, जहां तक ​​मुझे पता था कि हर कोई सेलाइनक्स या एपर्मर का उपयोग कर रहा था।
राफेल किटओवर

अपडेट प्रदान करने के लिए धन्यवाद। जब आप कर सकते हैं, तो कृपया अपना स्वयं का उत्तर स्वीकार करें।
23
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.