candiddevmike 9 hours ago

It's rm with a trash can that by default is in a terribly insecure location (/tmp is typically world read/writable).

EDIT: just tested it, it creates /tmp/graveyard-$USER with 0755.

  • imdsm 9 hours ago

    It's a great idea but perhaps needs to be executed a little better. Hoping the op reads these comments as us all just being grumpy sysops but takes the positives from them, and works on rip3 with better system-level safety.

    And for everyone else, always worth remembering that author could have instead built: .

    Instead they chose to build something, so let's not shit all over their intent

    • stavros 9 hours ago

      Not only that, but the comment could have been much better: It could be an issue on GH saying "the default location is insecure, please use ~/.cache" or whatnot.

    • keybored 7 hours ago

      Good point. :) I definitely overanalyze to the point where I program a lot less extracurricular stuff. I admire people with the ability to just do it.

  • linkdd 9 hours ago

    But it's safe because it's written in Rust!

  • xyst 9 hours ago

    Author acknowledges how the tmpdir can be a bad default, so that’s why you can change it :)

    > Graveyard location.

    > You can see the current graveyard location by running rip graveyard. If you have $XDG_DATA_HOME environment variable set, rip will use $XDG_DATA_HOME/graveyard instead of the $TMPDIR/graveyard-$USER.

    > If you want to put the graveyard somewhere else (like ~/.local/share/Trash), you have two options, in order of precedence:

    > Alias rip to rip --graveyard ~/.local/share/Trash

    > Set the environment variable $RIP_GRAVEYARD to ~/.local/share/Trash.

    > This can be a good idea because if the graveyard is mounted on an in-memory file system (as /tmp is in Arch Linux), deleting large files can quickly fill up your RAM. It's also much slower to move files across file systems, although the delay should be minimal with an SSD.

    • beanjuiceII 9 hours ago

      >rip is a rust-based rm with a focus on safety, ergonomics, and performance

      then puts the default trash location in /tmp ? knowing its a bad decision? kinda makes me leery of the rest with this kind of reasoning skills

      • stavros 9 hours ago

        Yeah, I can't disagree with this, knowing that something is a bad default and still using it isn't fantastic.

        It would be much better to put the files somewhere else and clear old files whenever rip was run.

    • forgotpwd16 9 hours ago

      >~/.local/share/Trash

      Kinda bad example since this tool doesn't follow xdg-trash spec per README. Tools that do (such as the file managers from the big DEs) use this directory.

  • eptcyka 9 hours ago

    God forbid `/tmp` is a different filesystem from wherever the original file resided in.

    • xk3 9 hours ago

      which, it usually is... tmpfs

      • adrian_b 9 hours ago

        Which, until recently, was losing file metadata, like extended attributes (in very old tmpfs versions also the timestamps could have been truncated).

        Whenever exact file copies are desired, they must not pass through /tmp or through any other place where tmpfs is mounted, unless it is checked that the tmpfs version is new enough to preserve file metadata.

        (In multi-user computers, it was usual to copy a file through /tmp for copies between users, because that might have been the only place where both users had access.)

        Older versions of tmpfs did not support any extended attributes, then only certain system attributes were preserved, while all user attributes were deleted. Only one year or two ago tmpfs has been enhanced to preserve most extended attributes, with some size constraints. Many older systems still have tmpfs versions that lose the extended attributes.

        • bravetraveler 9 hours ago

          Oh heck, good point. I forgot about that in my criticism, extended attributes. If you've gone through the effort of actually using SELinux, this could undo it... at least to the point of requiring 'restorecon' to reapply the context policy on deleted-then-restored files

          So the trash bin leaves grime on things, great.

      • bravetraveler 9 hours ago

        Self-clearing insecure recycle bin, but it's memory safe!!!

        • wongarsu 9 hours ago

          And if you delete too much the trash folder on tmpfs will fill up to half your available memory. With how terrible linux is with swap, unintentionally deleting a lot of data while doing something memory-intensive may well cause your system to slow to a crawl, forcing you to either sit it out or reboot and lose your recycle bin

          • bravetraveler 8 hours ago

            Don't forget 'systemd-oomd' who may try to help. Depending on the configuration of your distribution/desktop environment, there's a non-zero chance your whole DE gets whacked. I generally am a fan of 'systemd', but the collection of parts require attention. cgroups and such

            Absolutely none of this is a concern for this project, though. I just find this-then-that stuff funny

  • dathinab 9 hours ago

    That's not quite how things work, file permissions don't magically go way just because they land in tmp, this is only a problem if your file permissions are setup wrongly and implicitly relied on parent folders etc.

    But then file permissions being "wrong" or relying on the parent folder is the norm...

    I wonder if it does keep ACLs associated with the file.

    • bravetraveler 9 hours ago

      Take this prior art for example:

          ~ $ ll -d $HOME/.local/share/Trash
          drwx------. 5 me me 47 Jan 15  2020 /home/me/.local/share/Trash
      
      Home directories and the root they're stored in aren't generally well-protected, trash directories should do so to avoid leaking.

      Per the XDG spec if this is open, you want sticky bits. More justice (and considerations) here: https://specifications.freedesktop.org/trash-spec/latest/

      An interesting challenge or angle to this: space consumption, ownership in a real-world sense (ie: fingerpointing)

  • ksynwa 9 hours ago

    Anyone knows how something like GNOME or KDE handles it? I am guessing a directory in user's home should be good enough, right?

  • j-krieger 9 hours ago

    That is a neat easy challenge for my next CTF.

  • leetrout 9 hours ago

    And sometimes mounted to a device with less storage

  • irdc 9 hours ago

    This is a good practical example for the less experienced that just because it’s written in rust doesn’t mean it’s magically more secure. Who’s gonna write up the CVE?

0points 9 hours ago

Warning, this software

> does not implement the xdg-trash spec or attempt to achieve the same goals

Second warning, deleted files become world readable by design

> Deleted files get sent to the graveyard (typically /tmp/graveyard-$USER

  • arp242 9 hours ago

    > Second warning, deleted files become world readable by design

    This is not true. I just tested to be sure; the permissions of files are preserved.

    • Thorrez 9 hours ago

      Is it accurate to say that deleted files have their filenames and other metadata become readable by design? Or at least top-level ones (not necessarily subdirectories)?

      • arp242 4 hours ago

        I'm not sure if that's "by design" or a "bug" – I'm not really familiar with this tool. I agree that ideally it should copy the directory permission bits too, or be more restrictive about that in some other way.

    • fanf2 8 hours ago

      What if the original file was in a private directory?

    • bravetraveler 6 hours ago

      Files by default are world readable, see umask. You tested the exception, a restricted file

      It's moving files out of potentially-safe directories into definitely-not-safe

marsavar 9 hours ago

It's always laudable when OSS projects get some love, but... I'm slightly put off by programs that try to be witty or funny (e.g. flags like --decompose and --seance)

  • imdsm 9 hours ago

    I like the theme with a graveyard, decompose, perhaps not with seance though

amelius 9 hours ago

I don't think this is solving the problem at the right abstraction level.

For example, you can also "delete" files by accidentally redirecting to them using the ">" operator in the shell.

Maybe some kind of snapshotting filesystem (+ tools) is a better way to deal with this.

pmarreck 8 hours ago

I'm building a general-purpose undo that will log and let you undo things like chmods, chown/chgrps, mv's and rm's. it will work with the recursive parameters of those utilities and shunt that out to `find` with `-exec` so it can track the undo of every individual file. it will use the xdg-trash spec for rm'ing files. I haven't pushed it up to github yet but I have test cases working locally. in particular it will handle idempotent updates properly so if you for example chown a file with the same user and group, it will be recorded as a no-op so that a later (untracked) change won't get overwritten when you undo a tracked change that would otherwise interfere with it.

it's just plain old bash, so nothing fancy like Rust, but it should work

dathinab 9 hours ago

I wonder what amount of this being pushed so much is

- the allure of improving on well established UNIX commands (always an interesting topic)

- and the "it's rust factor"

  • arp242 9 hours ago

    It's mostly just the first. And to achieve the first people use languages that they're productive in, which is often Rust or Go due to being able to compile a binary and performance. Sometimes people use Python, Ruby, or Node, and that's okay too.

    Previous comment on the topic: https://news.ycombinator.com/item?id=41794221

johnisgood 9 hours ago

OK, in what way is it safer than the GNU or BSD alternative? If it has to do with logic, it could be implemented just fine.

  • wongarsu 9 hours ago

    Presumably the use of a trash bin

  • kybernetyk 9 hours ago

    There's no scary pointers in the code.

guytv 8 hours ago

I really liked the idea.

Played around with rip2 on my MacOS.

Unfortunately after playing with it for two minutes, the "undo" and "scance" functionality seemed to break:

I have opened a bug https://github.com/MilesCranmer/rip2/issues/54].

am I doing something wrong?

exitb 9 hours ago

Except it's mv

  • dietr1ch 9 hours ago

    To a potentially different Filesystem that's might not have enough space (and may be tmpfs and get Linux to start killing processes)

    TBF it's a surprisingly not straightforward problem. I appreciate the effort and would like it to succeed.

sk11001 9 hours ago

It's cool that you can build this but in practical terms it's solving a problem that nobody has.

  • abnry 8 hours ago

    That's not true. rm is a known foot gun and commands like trash-cli already exist.

  • keybored 8 hours ago

    I use the (Python) trash-cli utility all the time.

  • jedisct1 9 hours ago

    But it's written in Rust.

xyst 9 hours ago

I don’t know if I would use it but thanks for reviving a dead project and maintaining it

travisgriggs 9 hours ago

When someone does a zig implementation of rm, what will its headline announcement be?

showsomerespect 8 hours ago

I'm struggling to see the advantage of this over, for example, `trash-cli`

caseyy 9 hours ago

So, what will happen to all bash scripts once rm is aliased as suggested?

  • Liquid_Fire 9 hours ago

    Aliases are not expanded in shell scripts, unless they explicitly opt into it. Additionally, they are run in a non-interactive shell, so will not load your ~/.bashrc where you probably defined the alias.

    • caseyy 5 hours ago

      Nice to know, thank you

torginus 9 hours ago

I yearn for the day when Rust devs will be able to withhold mentioning that the software they made is, in fact, written in Rust.

  • gochad 8 hours ago

    Rust programmers are the punk rockers of the software industry. They're loud, militant, they like to draw attention to themselves, but in the end they can't really deliver anything beyond the same basic riffs.

formerly_proven 9 hours ago

A small psa if you're on Windows and like this tool want to focus on "ergonomics" and "performance" of deleting files, disabling real-time protection in the security center makes deleting large directory trees about 50% faster and reduces CPU usage by about 80% for me. It's wholly non-obvious to me why this is the case, considering that DeleteFile doesn't even use a file handle. Perhaps it acquires one internally, and that still triggers demand scanning of the file to be deleted?

  • veltas 9 hours ago

    Scanner needs to scan files being deleted to catch certain kinds of malware, and Windows blocks until it's actually scanned and deleted. Lots of file operations are like this on Windows. It makes filesystem operations seemingly easier to program/understand, but much much slower. I suspect the synchronisation assumptions it is allowing are also deeply ingrained in legacy code.

    Any serious Windows app needs to spawn many threads to work around this performance issue when batch operating on lots of files.

gochad 9 hours ago

Cool project, hopefully you got a good grade!

Hizonner 9 hours ago

"Ergonomic" means that when I delete a file, it gets freaking deleted.

  • xyst 9 hours ago

    It’s for those that want nostalgia of cleaning up the family pc or your parents computer.

    Nothing like having your parents call at 3 in the morning because their disk is full despite “deleting” the files

  • showsomerespect 8 hours ago

    until you delete something you didn't mean to delete...