Warum funktioniert die Umleitung (>) manchmal nicht, das Anhängen (>>) jedoch?

7

Während des Studiums für das RHCE bin ich auf eine Situation gestoßen, in der die Standardumleitung nicht funktioniert in bash:

# file /tmp/users.txt
/tmp/users.txt: cannot open `/tmp/users.txt' (No such file or directory)  
# semanage login -l > /tmp/users.txt
# file /tmp/users.txt
/tmp/users.txt: empty

Dies funktioniert jedoch:

# file /tmp/users.txt
/tmp/users.txt: cannot open `/tmp/users.txt' (No such file or directory)
# semanage login -l >> /tmp/users.txt
# file /tmp/users.txt
/tmp/users.txt: ASCII text

Warum ist das so?

1. Update:

Berechtigungen:

# ls -ld /tmp
drwxrwxrwt. 8 root root 4096 Jul 17 15:27 /tmp

ACLs (kein ACL-Mount, aber nur für den Fall):

# getfacl /tmp
getfacl: Removing leading '/' from absolute path names
# file: tmp
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx

Und ich führe alle Befehle als aus root(daher die Hash-Eingabeaufforderung).

2. Update

Per Caleb, vollständige Liste der Berechtigungen von /tmp:

# ls -al /tmp
total 40
drwxrwxrwt.  8 root    root    4096 Jul 17 15:37 .
dr-xr-xr-x. 26 root    root    4096 Jul 17 15:07 ..
drwx------.  2 melmel  melmel  4096 Jul 16 21:08 .esd-500
drwxrwxrwt.  2 root    root    4096 Jul 17 15:07 .ICE-unix
drwx------.  2 gdm     gdm     4096 Jul 17 15:08 orbit-gdm
drwx------.  2 gdm     gdm     4096 Jul 17 15:07 pulse-5E9i88IGxaNh
drwx------.  2 melmel  melmel  4096 Jul 16 21:08 pulse-329qCo13Xk
-rw-------.  1 root    root       0 Jul 16 14:32 tmpXd9THg
-rw-------.  1 root    root       0 Jul 16 12:55 tmpie0O98
-rw-------.  1 root    root       0 Jul 16 20:23 tmpr10LrK
-r--r--r--.  1 root    root      11 Jul 17 15:07 .X0-lock
drwxrwxrwt.  2 root    root    4096 Jul 17 15:07 .X11-unix
-rw-r--r--.  1 root    root     865 Jul 16 20:20 yum.conf.security
-rw-------.  1 root    root       0 Jul 10 14:57 yum.log

3. Update:

Per Hello71:

# mount | grep /tmp
# mount | grep -w '/'
/dev/mapper/vg_svr-tap-lv_root on / type ext4 (rw)

Antworten auf Gilles 'Fragen:

Haben Sie darüber in einem Buch gelesen oder haben Sie diese Situation auf einer realen Maschine erreicht?

Dies wurde bemerkt, als ein Labor in einem Buch auf einer realen Maschine durchgeführt wurde.

Wird SELinux verwendet?

# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

Einige Linux-on-Linux-Virtualisierung?

Ja. KVM / QEMU Gast.

Ich stimme der Anfrage von Hello71 zu, außer bitte grep / tmp / proc / mounts

Nichts passt zusammen.

Auch env | grep '^ LD_' bitte.

Nichts passt zusammen.

Oh, und können wir aktive Angriffe ausschließen?

Ja wir können. Ich bin der einzige, der Zugang zu diesem Gast hat.

Belmin Fernandez
quelle
Können Sie uns die Ausgabe von ls -alfor / tmp und /tmp/users.txt geben?
Caleb
Fügen Sie einfach den fileBefehl vor und nach der E / A-Umleitung hinzu. Ist das ausreichend
Belmin Fernandez
Bitte geben Sie uns die vollständige Berechtigungsansicht des Verzeichnisses.
Caleb
Fügen Sie das jetzt hinzu. Ich bin verwirrt, wie relevant das wäre. Kannst du bitte erklären?
Belmin Fernandez
mount | grep /tmp?
Hallo71

Antworten:

2

Es ist wahrscheinlich ein Fehler in der SELinux-Richtlinie in Bezug auf semanageBinärdateien (die einen eigenen Kontext haben semanage_t) und /tmpVerzeichnisse, die auch einen eigenen Kontext haben - tmp_t.

Ich konnte auf meinem CentOS 5.6 fast die gleichen Ergebnisse reproduzieren.

# file /tmp/users.txt 
/tmp/users.txt: FEHLER: `/tmp/users.txt 'kann nicht geöffnet werden (keine solche Datei oder kein solches Verzeichnis)
# semanage login -l> /tmp/users.txt
# file /tmp/users.txt 
/tmp/users.txt: leer
# semanage login -l >> /tmp/users.txt
# file /tmp/users.txt 
/tmp/users.txt: leer

Als ich versuchte, eine Datei in einem anderen Verzeichnis zu verwenden, erhielt ich normale Ergebnisse

# file /root/users.txt
/root/users.txt: FEHLER: `/root/users.txt 'kann nicht geöffnet werden (keine solche Datei oder kein solches Verzeichnis)
# semanage login -l> /root/users.txt
# file /root/users.txt
/root/users.txt: ASCII-Text

Unterschied zwischen /tmpund /rootist ihr Kontext

# ls -Zd / root /
drwxr-x --- root root root: object_r: user_home_dir_t / root /
# ls -Zd / tmp /
drwxrwxrwt root root system_u: object_r: tmp_t / tmp /

Und schließlich habe /tmpich nach dem Versuch, in eine Datei umzuleiten, folgende Fehler in/var/log/audit/audit.log

type = AVC msg = audit (1310971817.808: 163242): avc: verweigert {write} für pid = 10782 comm = "semanage" path = "/ tmp / users.txt" dev = dm
-0 ino = 37093377 scontext = user_u: system_r: semanage_t: s0 tcontext = user_u: object_r: tmp_t: s0 tclass = file
type = AVC msg = audit (1310971838.888: 163255): avc: verweigert {append} für pid = 11372 comm = "semanage" path = "/ tmp / users.txt" dev = d
m-0 ino = 37093377 scontext = user_u: system_r: semanage_t: s0 tcontext = user_u: object_r: tmp_t: s0 tclass = file

Interessanter Hinweis: Die Umleitung der semanageAusgabe in die Pipe funktioniert einwandfrei

#semanage login -l | tee /tmp/users.txt> /tmp/users1.txt
# file /tmp/users.txt 
/tmp/users.txt: ASCII-Text
# file /tmp/users1.txt 
/tmp/users1.txt: ASCII-Text
AlexD
quelle
2
Das erklärt nicht, warum das Anhängen funktioniert, das Abschneiden jedoch nicht. Wenn die Schreibvorgänge abgelehnt werden, sollte das Anhängen die Datei weiterhin leer lassen.
Psusi
Auf meinem System funktioniert das Anhängen auch nicht. Dies könnte durch Unterschiede in den SELinux-Richtlinien zwischen meinem CentOS und dem ursprünglichen System erklärt werden.
AlexD