¿Por qué no puedo crear un archivo con un nombre con el prefijo "passwd"? en "/ etc"?

9

Tengo una PC con Ubuntu 16.04 instalado. Recientemente quiero instalar algunos paquetes pero tengo problemas para instalarlos. Después de investigar un poco, descubrí que la falla parece estar relacionada con el sistema de cuentas de usuario de Linux. El problema es que cualquier archivo con un nombre con el prefijo passwd.no se puede crear en la /etcruta.

# 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
#

Puedo crear ese archivo en otras rutas, como /o /usr, pero no en /etc, y puedo crear un archivo con otros nombres de archivo /etc, pero no con los nombres de archivo con el prefijo passwd.. No puedo reproducir este problema con otras PC.

He intentado otros comandos:

  • 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
  • Reiniciar el sistema

Nada funciona.

¿Qué podría causar este problema?

Aquí hay algunos resultados del comando de depuración:

# 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

Aquí está la stracesalida:

# 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 +++
EFanZh
fuente
2
que ls -ld /etcdice ¿Qué tal lsattr -d /etc? Si está utilizando SELinux, ¿qué ls -dZ /etcdice? Si está utilizando AppArmor, ¿qué dice el comando equivalente (no sé qué es)? ¿En qué se /etc/diferencia esto de /etcotras PC? Ejecute los mismos comandos allí y busque diferencias.
NickD
¿Es touchuna función o un script o algo? ¿Qué hacer type -a touche file "$(command -v touch)"informar? No puedo reproducir en mi caja 16.04.
muru
@NickD He comparado todas las salidas de comandos, excepto la AppArmor porque no encontré cómo mostrar la información relacionada de una carpeta. El resultado es el mismo.
EFanZh
1
Solo para estar seguro: estás haciendo esto como root, ¿verdad?
Panki
1
Ubuntu aparentemente usa apparmor, ver: help.ubuntu.com/community/AppArmor
Rafael Kitover

Respuestas:

6

Descubrí por qué. Es porque ISecTP (Endpoint Security for Linux Threat Prevention) estaba instalado en mi PC. Incluye " Protección de acceso ", que utiliza la interfaz del kernel fanotify o la inyección de un módulo personalizado en el kernel ( que se puede configurar ), para denegar el acceso a rutas arbitrarias. No lo sabía porque no soy el único que usa la PC. Después de desinstalarlo, todo está bien ahora.

¡Gracias a todos por su ayuda!

EFanZh
fuente
Muy interesante, nunca he oído hablar de un software como este, por lo que sabía, todos usaban selinux o apaparmor.
Rafael Kitover
Gracias por proporcionar una actualización. Cuando puedas, acepta tu propia respuesta.
roaima